julianmorrison-savon 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +92 -0
- data/README.textile +71 -0
- data/Rakefile +27 -0
- data/lib/savon.rb +34 -0
- data/lib/savon/client.rb +84 -0
- data/lib/savon/core_ext.rb +3 -0
- data/lib/savon/core_ext/datetime.rb +8 -0
- data/lib/savon/core_ext/hash.rb +78 -0
- data/lib/savon/core_ext/object.rb +21 -0
- data/lib/savon/core_ext/string.rb +47 -0
- data/lib/savon/core_ext/symbol.rb +8 -0
- data/lib/savon/core_ext/uri.rb +10 -0
- data/lib/savon/request.rb +159 -0
- data/lib/savon/response.rb +108 -0
- data/lib/savon/soap.rb +138 -0
- data/lib/savon/wsdl.rb +122 -0
- data/lib/savon/wsse.rb +122 -0
- data/spec/endpoint_helper.rb +22 -0
- data/spec/fixtures/response/response_fixture.rb +32 -0
- data/spec/fixtures/response/xml/authentication.xml +14 -0
- data/spec/fixtures/response/xml/soap_fault.xml +8 -0
- data/spec/fixtures/response/xml/soap_fault12.xml +18 -0
- data/spec/fixtures/wsdl/wsdl_fixture.rb +37 -0
- data/spec/fixtures/wsdl/xml/authentication.xml +63 -0
- data/spec/fixtures/wsdl/xml/namespaced_actions.xml +307 -0
- data/spec/fixtures/wsdl/xml/no_namespace.xml +115 -0
- data/spec/http_stubs.rb +23 -0
- data/spec/savon/client_spec.rb +83 -0
- data/spec/savon/core_ext/datetime_spec.rb +12 -0
- data/spec/savon/core_ext/hash_spec.rb +134 -0
- data/spec/savon/core_ext/object_spec.rb +40 -0
- data/spec/savon/core_ext/string_spec.rb +68 -0
- data/spec/savon/core_ext/symbol_spec.rb +11 -0
- data/spec/savon/core_ext/uri_spec.rb +15 -0
- data/spec/savon/request_spec.rb +124 -0
- data/spec/savon/response_spec.rb +122 -0
- data/spec/savon/savon_spec.rb +23 -0
- data/spec/savon/soap_spec.rb +131 -0
- data/spec/savon/wsdl_spec.rb +84 -0
- data/spec/savon/wsse_spec.rb +132 -0
- data/spec/spec_helper.rb +16 -0
- metadata +166 -0
data/lib/savon/wsse.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
module Savon
|
2
|
+
|
3
|
+
# Savon::WSSE
|
4
|
+
#
|
5
|
+
# Represents parameters for WSSE authentication.
|
6
|
+
class WSSE
|
7
|
+
|
8
|
+
# Namespace for WS Security Secext.
|
9
|
+
WSENamespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
|
10
|
+
|
11
|
+
# Namespace for WS Security Utility.
|
12
|
+
WSUNamespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
|
13
|
+
|
14
|
+
# Global WSSE username.
|
15
|
+
@@username = nil
|
16
|
+
|
17
|
+
# Returns the global WSSE username.
|
18
|
+
def self.username
|
19
|
+
@@username
|
20
|
+
end
|
21
|
+
|
22
|
+
# Sets the global WSSE username.
|
23
|
+
def self.username=(username)
|
24
|
+
@@username = username.to_s if username.respond_to? :to_s
|
25
|
+
@@username = nil if username.nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
# Global WSSE password.
|
29
|
+
@@password = nil
|
30
|
+
|
31
|
+
# Returns the global WSSE password.
|
32
|
+
def self.password
|
33
|
+
@@password
|
34
|
+
end
|
35
|
+
|
36
|
+
# Sets the global WSSE password.
|
37
|
+
def self.password=(password)
|
38
|
+
@@password = password.to_s if password.respond_to? :to_s
|
39
|
+
@@password = nil if password.nil?
|
40
|
+
end
|
41
|
+
|
42
|
+
# Global setting of whether to use WSSE digest.
|
43
|
+
@@digest = false
|
44
|
+
|
45
|
+
# Returns the global setting of whether to use WSSE digest.
|
46
|
+
def self.digest?
|
47
|
+
@@digest
|
48
|
+
end
|
49
|
+
|
50
|
+
# Global setting of whether to use WSSE digest.
|
51
|
+
def self.digest=(digest)
|
52
|
+
@@digest = digest
|
53
|
+
end
|
54
|
+
|
55
|
+
# Sets the WSSE username per request.
|
56
|
+
def username=(username)
|
57
|
+
@username = username.to_s if username.respond_to? :to_s
|
58
|
+
@username = nil if username.nil?
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns the WSSE username. Defaults to the global setting.
|
62
|
+
def username
|
63
|
+
@username || self.class.username
|
64
|
+
end
|
65
|
+
|
66
|
+
# Sets the WSSE password per request.
|
67
|
+
def password=(password)
|
68
|
+
@password = password.to_s if password.respond_to? :to_s
|
69
|
+
@password = nil if password.nil?
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns the WSSE password. Defaults to the global setting.
|
73
|
+
def password
|
74
|
+
@password || self.class.password
|
75
|
+
end
|
76
|
+
|
77
|
+
# Sets whether to use WSSE digest per request.
|
78
|
+
attr_writer :digest
|
79
|
+
|
80
|
+
# Returns whether to use WSSE digest. Defaults to the global setting.
|
81
|
+
def digest?
|
82
|
+
@digest || self.class.digest?
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns the XML for a WSSE header or an empty String unless both
|
86
|
+
# username and password were specified.
|
87
|
+
def header
|
88
|
+
return "" unless username && password
|
89
|
+
|
90
|
+
builder = Builder::XmlMarkup.new
|
91
|
+
builder.wsse :Security, "xmlns:wsse" => WSENamespace do |xml|
|
92
|
+
xml.wsse :UsernameToken, "xmlns:wsu" => WSUNamespace do
|
93
|
+
xml.wsse :Username, username
|
94
|
+
xml.wsse :Nonce, nonce
|
95
|
+
xml.wsu :Created, timestamp
|
96
|
+
xml.wsse :Password, password_node
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
# Returns the WSSE password. Encrypts the password for digest authentication.
|
104
|
+
def password_node
|
105
|
+
return password unless digest?
|
106
|
+
|
107
|
+
token = nonce + timestamp + password
|
108
|
+
Base64.encode64(Digest::SHA1.hexdigest(token)).chomp!
|
109
|
+
end
|
110
|
+
|
111
|
+
# Returns a WSSE nonce.
|
112
|
+
def nonce
|
113
|
+
@nonce ||= Digest::SHA1.hexdigest String.random + timestamp
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns a WSSE timestamp.
|
117
|
+
def timestamp
|
118
|
+
@timestamp ||= Time.now.strftime Savon::SOAPDateTimeFormat
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class EndpointHelper
|
2
|
+
|
3
|
+
# Returns the WSDL endpoint for a given +type+ of request.
|
4
|
+
def self.wsdl_endpoint(type = nil)
|
5
|
+
case type
|
6
|
+
when :no_namespace then "http://nons.example.com/Service?wsdl"
|
7
|
+
when :namespaced_actions then "http://nsactions.example.com/Service?wsdl"
|
8
|
+
else soap_endpoint(type) + "?wsdl"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Returns the SOAP endpoint for a given +type+ of request.
|
13
|
+
def self.soap_endpoint(type = nil)
|
14
|
+
case type
|
15
|
+
when :soap_fault then "http://soapfault.example.com/Service"
|
16
|
+
when :http_error then "http://httperror.example.com/Service"
|
17
|
+
when :invalid then "http://invalid.example.com/Service"
|
18
|
+
else "http://example.com/validation/1.0/AuthenticationService"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class ResponseFixture
|
2
|
+
|
3
|
+
def self.authentication(value = nil)
|
4
|
+
case value
|
5
|
+
when :to_hash
|
6
|
+
{ :success => true,
|
7
|
+
:authentication_value => {
|
8
|
+
:token => "a68d1d6379b62ff339a0e0c69ed4d9cf",
|
9
|
+
:token_hash => "AAAJxA;cIedoT;mY10ExZwG6JuKgp2OYKxow==",
|
10
|
+
:client => "radclient"
|
11
|
+
}
|
12
|
+
}
|
13
|
+
else
|
14
|
+
@@authentication ||= load_fixture :authentication
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.soap_fault
|
19
|
+
@@soap_fault ||= load_fixture :soap_fault
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.soap_fault12
|
23
|
+
@@soap_fault12 ||= load_fixture :soap_fault12
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def self.load_fixture(fixture)
|
29
|
+
File.read(File.dirname(__FILE__) + "/xml/#{fixture}.xml")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
|
2
|
+
<soap:Body>
|
3
|
+
<ns2:authenticateResponse xmlns:ns2="http://v1_0.ws.user.example.com">
|
4
|
+
<return>
|
5
|
+
<authenticationValue>
|
6
|
+
<token>a68d1d6379b62ff339a0e0c69ed4d9cf</token>
|
7
|
+
<tokenHash>AAAJxA;cIedoT;mY10ExZwG6JuKgp2OYKxow==</tokenHash>
|
8
|
+
<client>radclient</client>
|
9
|
+
</authenticationValue>
|
10
|
+
<success>true</success>
|
11
|
+
</return>
|
12
|
+
</ns2:authenticateResponse>
|
13
|
+
</soap:Body>
|
14
|
+
</soap:Envelope>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:m="http://www.example.org/timeouts">
|
2
|
+
<soap:Body>
|
3
|
+
<soap:Fault>
|
4
|
+
<Code>
|
5
|
+
<Value>soap:Sender</Value>
|
6
|
+
<Subcode>
|
7
|
+
<Value>m:MessageTimeout</Value>
|
8
|
+
</Subcode>
|
9
|
+
</Code>
|
10
|
+
<Reason>
|
11
|
+
<Text xml:lang="en">Sender Timeout</Text>
|
12
|
+
</Reason>
|
13
|
+
<Detail>
|
14
|
+
<m:MaxTime>P5M</m:MaxTime>
|
15
|
+
</Detail>
|
16
|
+
</soap:Fault>
|
17
|
+
</soap:Body>
|
18
|
+
</soap:Envelope>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "erb"
|
3
|
+
|
4
|
+
class WSDLFixture
|
5
|
+
|
6
|
+
# Returns a WSDL document matching a given +method+ name when called without
|
7
|
+
# arguments. Otherwise returns the expected value for a given +method+ name
|
8
|
+
# matching a fixture.
|
9
|
+
def self.method_missing(method, *args)
|
10
|
+
return wsdl(method) unless args.first
|
11
|
+
expectations[method][args.first]
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
@@expectations = nil
|
17
|
+
|
18
|
+
# Returns a Hash of expected namespace URI's and SOAP operations loaded
|
19
|
+
# from wsdl_fixture.yml.
|
20
|
+
def self.expectations
|
21
|
+
return @@expectations if @@expectations
|
22
|
+
|
23
|
+
file = File.read(File.dirname(__FILE__) + "/wsdl_fixture.yml")
|
24
|
+
@@expectations = YAML.load ERB.new(file).result
|
25
|
+
end
|
26
|
+
|
27
|
+
@@wsdl = {}
|
28
|
+
|
29
|
+
# Returns the WSDL document by a given file name.
|
30
|
+
def self.wsdl(wsdl)
|
31
|
+
return @@wsdl[wsdl] if @@wsdl[wsdl]
|
32
|
+
|
33
|
+
file = File.read(File.dirname(__FILE__) + "/xml/#{wsdl}.xml")
|
34
|
+
@@wsdl[wsdl] = file
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="AuthenticationWebServiceImplService" targetNamespace="http://v1_0.ws.auth.order.example.com/" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://v1_0.ws.auth.order.example.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
2
|
+
<wsdl:types>
|
3
|
+
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://v1_0.ws.auth.order.example.com/" xmlns:tns="http://v1_0.ws.auth.order.example.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
4
|
+
<xs:element name="authenticate" type="tns:authenticate" />
|
5
|
+
<xs:element name="authenticateResponse" type="tns:authenticateResponse" />
|
6
|
+
<xs:element name="authenticationResult" type="tns:authenticationResult" />
|
7
|
+
<xs:element name="authenticationValue" type="tns:authenticationValue" />
|
8
|
+
<xs:complexType name="authenticate">
|
9
|
+
<xs:sequence>
|
10
|
+
<xs:element minOccurs="0" name="user" type="xs:string" />
|
11
|
+
<xs:element minOccurs="0" name="password" type="xs:string" />
|
12
|
+
</xs:sequence>
|
13
|
+
</xs:complexType>
|
14
|
+
<xs:complexType name="authenticateResponse">
|
15
|
+
<xs:sequence>
|
16
|
+
<xs:element minOccurs="0" name="return" type="tns:authenticationResult" />
|
17
|
+
</xs:sequence>
|
18
|
+
</xs:complexType>
|
19
|
+
<xs:complexType name="authenticationResult">
|
20
|
+
<xs:sequence>
|
21
|
+
<xs:element minOccurs="0" name="authenticationValue" nillable="true" type="tns:authenticationValue" />
|
22
|
+
<xs:element name="success" type="xs:boolean" />
|
23
|
+
</xs:sequence>
|
24
|
+
</xs:complexType>
|
25
|
+
<xs:complexType name="authenticationValue">
|
26
|
+
<xs:sequence>
|
27
|
+
<xs:element name="token" type="xs:string" />
|
28
|
+
<xs:element name="tokenHash" type="xs:string" />
|
29
|
+
<xs:element name="client" type="xs:string" />
|
30
|
+
</xs:sequence>
|
31
|
+
</xs:complexType>
|
32
|
+
</xs:schema>
|
33
|
+
</wsdl:types>
|
34
|
+
<wsdl:message name="authenticate">
|
35
|
+
<wsdl:part element="tns:authenticate" name="parameters" />
|
36
|
+
</wsdl:message>
|
37
|
+
<wsdl:message name="authenticateResponse">
|
38
|
+
<wsdl:part element="tns:authenticateResponse" name="parameters" />
|
39
|
+
</wsdl:message>
|
40
|
+
<wsdl:portType name="AuthenticationWebService">
|
41
|
+
<wsdl:operation name="authenticate">
|
42
|
+
<wsdl:input message="tns:authenticate" name="authenticate" />
|
43
|
+
<wsdl:output message="tns:authenticateResponse" name="authenticateResponse" />
|
44
|
+
</wsdl:operation>
|
45
|
+
</wsdl:portType>
|
46
|
+
<wsdl:binding name="AuthenticationWebServiceImplServiceSoapBinding" type="tns:AuthenticationWebService">
|
47
|
+
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
|
48
|
+
<wsdl:operation name="authenticate">
|
49
|
+
<soap:operation soapAction="" style="document" />
|
50
|
+
<wsdl:input name="authenticate">
|
51
|
+
<soap:body use="literal" />
|
52
|
+
</wsdl:input>
|
53
|
+
<wsdl:output name="authenticateResponse">
|
54
|
+
<soap:body use="literal" />
|
55
|
+
</wsdl:output>
|
56
|
+
</wsdl:operation>
|
57
|
+
</wsdl:binding>
|
58
|
+
<wsdl:service name="AuthenticationWebServiceImplService">
|
59
|
+
<wsdl:port binding="tns:AuthenticationWebServiceImplServiceSoapBinding" name="AuthenticationWebServiceImplPort">
|
60
|
+
<soap:address location="http://example.com/validation/1.0/AuthenticationService" />
|
61
|
+
</wsdl:port>
|
62
|
+
</wsdl:service>
|
63
|
+
</wsdl:definitions>
|
@@ -0,0 +1,307 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://api.example.com/api/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://api.example.com/api/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
3
|
+
<wsdl:types>
|
4
|
+
<s:schema elementFormDefault="qualified" targetNamespace="http://api.example.com/api/">
|
5
|
+
<s:element name="User.GetApiKey">
|
6
|
+
<s:complexType>
|
7
|
+
<s:sequence>
|
8
|
+
<s:element minOccurs="0" maxOccurs="1" name="SiteUrl" type="s:string"/>
|
9
|
+
<s:element minOccurs="0" maxOccurs="1" name="Username" type="s:string"/>
|
10
|
+
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string"/>
|
11
|
+
</s:sequence>
|
12
|
+
</s:complexType>
|
13
|
+
</s:element>
|
14
|
+
<s:element name="User.GetApiKeyResponse">
|
15
|
+
<s:complexType>
|
16
|
+
<s:sequence>
|
17
|
+
<s:element minOccurs="0" maxOccurs="1" name="User.GetApiKeyResult"/>
|
18
|
+
</s:sequence>
|
19
|
+
</s:complexType>
|
20
|
+
</s:element>
|
21
|
+
<s:complexType name="Result">
|
22
|
+
<s:sequence>
|
23
|
+
<s:element minOccurs="1" maxOccurs="1" name="Code" type="s:int"/>
|
24
|
+
<s:element minOccurs="0" maxOccurs="1" name="Message" type="s:string"/>
|
25
|
+
</s:sequence>
|
26
|
+
</s:complexType>
|
27
|
+
<s:complexType name="Client">
|
28
|
+
<s:sequence>
|
29
|
+
<s:element minOccurs="0" maxOccurs="1" name="ClientID" type="s:string"/>
|
30
|
+
<s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string"/>
|
31
|
+
</s:sequence>
|
32
|
+
</s:complexType>
|
33
|
+
<s:complexType name="ArrayOfClient">
|
34
|
+
<s:sequence>
|
35
|
+
<s:element minOccurs="0" maxOccurs="unbounded" name="Client" nillable="true" type="tns:Client"/>
|
36
|
+
</s:sequence>
|
37
|
+
</s:complexType>
|
38
|
+
<s:element name="Client.Delete">
|
39
|
+
<s:complexType>
|
40
|
+
<s:sequence>
|
41
|
+
<s:element minOccurs="0" maxOccurs="1" name="ApiKey" type="s:string"/>
|
42
|
+
<s:element minOccurs="0" maxOccurs="1" name="ClientID" type="s:string"/>
|
43
|
+
</s:sequence>
|
44
|
+
</s:complexType>
|
45
|
+
</s:element>
|
46
|
+
<s:element name="Client.DeleteResponse">
|
47
|
+
<s:complexType>
|
48
|
+
<s:sequence>
|
49
|
+
<s:element minOccurs="0" maxOccurs="1" name="Client.DeleteResult" type="tns:Result"/>
|
50
|
+
</s:sequence>
|
51
|
+
</s:complexType>
|
52
|
+
</s:element>
|
53
|
+
<s:element name="User.GetClients">
|
54
|
+
<s:complexType>
|
55
|
+
<s:sequence>
|
56
|
+
<s:element minOccurs="0" maxOccurs="1" name="ApiKey" type="s:string"/>
|
57
|
+
</s:sequence>
|
58
|
+
</s:complexType>
|
59
|
+
</s:element>
|
60
|
+
<s:element name="User.GetClientsResponse">
|
61
|
+
<s:complexType>
|
62
|
+
<s:sequence>
|
63
|
+
<s:element minOccurs="0" maxOccurs="1" name="User.GetClientsResult"/>
|
64
|
+
</s:sequence>
|
65
|
+
</s:complexType>
|
66
|
+
</s:element>
|
67
|
+
<s:element name="anyType" nillable="true"/>
|
68
|
+
<s:element name="Result" nillable="true" type="tns:Result"/>
|
69
|
+
</s:schema>
|
70
|
+
</wsdl:types>
|
71
|
+
<wsdl:message name="User.GetApiKeySoapIn">
|
72
|
+
<wsdl:part name="parameters" element="tns:User.GetApiKey"/>
|
73
|
+
</wsdl:message>
|
74
|
+
<wsdl:message name="User.GetApiKeySoapOut">
|
75
|
+
<wsdl:part name="parameters" element="tns:User.GetApiKeyResponse"/>
|
76
|
+
</wsdl:message>
|
77
|
+
<wsdl:message name="Client.DeleteSoapIn">
|
78
|
+
<wsdl:part name="parameters" element="tns:Client.Delete"/>
|
79
|
+
</wsdl:message>
|
80
|
+
<wsdl:message name="Client.DeleteSoapOut">
|
81
|
+
<wsdl:part name="parameters" element="tns:Client.DeleteResponse"/>
|
82
|
+
</wsdl:message>
|
83
|
+
<wsdl:message name="User.GetClientsSoapIn">
|
84
|
+
<wsdl:part name="parameters" element="tns:User.GetClients"/>
|
85
|
+
</wsdl:message>
|
86
|
+
<wsdl:message name="User.GetClientsSoapOut">
|
87
|
+
<wsdl:part name="parameters" element="tns:User.GetClientsResponse"/>
|
88
|
+
</wsdl:message>
|
89
|
+
<wsdl:message name="User.GetApiKeyHttpGetIn">
|
90
|
+
<wsdl:part name="SiteUrl" type="s:string"/>
|
91
|
+
<wsdl:part name="Username" type="s:string"/>
|
92
|
+
<wsdl:part name="Password" type="s:string"/>
|
93
|
+
</wsdl:message>
|
94
|
+
<wsdl:message name="User.GetApiKeyHttpGetOut">
|
95
|
+
<wsdl:part name="Body" element="tns:anyType"/>
|
96
|
+
</wsdl:message>
|
97
|
+
<wsdl:message name="Client.DeleteHttpGetIn">
|
98
|
+
<wsdl:part name="ApiKey" type="s:string"/>
|
99
|
+
<wsdl:part name="ClientID" type="s:string"/>
|
100
|
+
</wsdl:message>
|
101
|
+
<wsdl:message name="Client.DeleteHttpGetOut">
|
102
|
+
<wsdl:part name="Body" element="tns:Result"/>
|
103
|
+
</wsdl:message>
|
104
|
+
<wsdl:message name="User.GetClientsHttpGetIn">
|
105
|
+
<wsdl:part name="ApiKey" type="s:string"/>
|
106
|
+
</wsdl:message>
|
107
|
+
<wsdl:message name="User.GetClientsHttpGetOut">
|
108
|
+
<wsdl:part name="Body" element="tns:anyType"/>
|
109
|
+
</wsdl:message>
|
110
|
+
<wsdl:message name="User.GetApiKeyHttpPostIn">
|
111
|
+
<wsdl:part name="SiteUrl" type="s:string"/>
|
112
|
+
<wsdl:part name="Username" type="s:string"/>
|
113
|
+
<wsdl:part name="Password" type="s:string"/>
|
114
|
+
</wsdl:message>
|
115
|
+
<wsdl:message name="User.GetApiKeyHttpPostOut">
|
116
|
+
<wsdl:part name="Body" element="tns:anyType"/>
|
117
|
+
</wsdl:message>
|
118
|
+
<wsdl:message name="Client.DeleteHttpPostIn">
|
119
|
+
<wsdl:part name="ApiKey" type="s:string"/>
|
120
|
+
<wsdl:part name="ClientID" type="s:string"/>
|
121
|
+
</wsdl:message>
|
122
|
+
<wsdl:message name="Client.DeleteHttpPostOut">
|
123
|
+
<wsdl:part name="Body" element="tns:Result"/>
|
124
|
+
</wsdl:message>
|
125
|
+
<wsdl:message name="User.GetClientsHttpPostIn">
|
126
|
+
<wsdl:part name="ApiKey" type="s:string"/>
|
127
|
+
</wsdl:message>
|
128
|
+
<wsdl:message name="User.GetClientsHttpPostOut">
|
129
|
+
<wsdl:part name="Body" element="tns:anyType"/>
|
130
|
+
</wsdl:message>
|
131
|
+
<wsdl:portType name="apiSoap">
|
132
|
+
<wsdl:operation name="GetApiKey">
|
133
|
+
<wsdl:input name="User.GetApiKey" message="tns:User.GetApiKeySoapIn"/>
|
134
|
+
<wsdl:output name="User.GetApiKey" message="tns:User.GetApiKeySoapOut"/>
|
135
|
+
</wsdl:operation>
|
136
|
+
<wsdl:operation name="DeleteClient">
|
137
|
+
<wsdl:input name="Client.Delete" message="tns:Client.DeleteSoapIn"/>
|
138
|
+
<wsdl:output name="Client.Delete" message="tns:Client.DeleteSoapOut"/>
|
139
|
+
</wsdl:operation>
|
140
|
+
<wsdl:operation name="GetClients">
|
141
|
+
<wsdl:input name="User.GetClients" message="tns:User.GetClientsSoapIn"/>
|
142
|
+
<wsdl:output name="User.GetClients" message="tns:User.GetClientsSoapOut"/>
|
143
|
+
</wsdl:operation>
|
144
|
+
</wsdl:portType>
|
145
|
+
<wsdl:portType name="apiHttpGet">
|
146
|
+
<wsdl:operation name="GetApiKey">
|
147
|
+
<wsdl:input name="User.GetApiKey" message="tns:User.GetApiKeyHttpGetIn"/>
|
148
|
+
<wsdl:output name="User.GetApiKey" message="tns:User.GetApiKeyHttpGetOut"/>
|
149
|
+
</wsdl:operation>
|
150
|
+
<wsdl:operation name="DeleteClient">
|
151
|
+
<wsdl:input name="Client.Delete" message="tns:Client.DeleteHttpGetIn"/>
|
152
|
+
<wsdl:output name="Client.Delete" message="tns:Client.DeleteHttpGetOut"/>
|
153
|
+
</wsdl:operation>
|
154
|
+
<wsdl:operation name="GetClients">
|
155
|
+
<wsdl:input name="User.GetClients" message="tns:User.GetClientsHttpGetIn"/>
|
156
|
+
<wsdl:output name="User.GetClients" message="tns:User.GetClientsHttpGetOut"/>
|
157
|
+
</wsdl:operation>
|
158
|
+
</wsdl:portType>
|
159
|
+
<wsdl:portType name="apiHttpPost">
|
160
|
+
<wsdl:operation name="GetApiKey">
|
161
|
+
<wsdl:input name="User.GetApiKey" message="tns:User.GetApiKeyHttpPostIn"/>
|
162
|
+
<wsdl:output name="User.GetApiKey" message="tns:User.GetApiKeyHttpPostOut"/>
|
163
|
+
</wsdl:operation>
|
164
|
+
<wsdl:operation name="DeleteClient">
|
165
|
+
<wsdl:input name="Client.Delete" message="tns:Client.DeleteHttpPostIn"/>
|
166
|
+
<wsdl:output name="Client.Delete" message="tns:Client.DeleteHttpPostOut"/>
|
167
|
+
</wsdl:operation>
|
168
|
+
<wsdl:operation name="GetClients">
|
169
|
+
<wsdl:input name="User.GetClients" message="tns:User.GetClientsHttpPostIn"/>
|
170
|
+
<wsdl:output name="User.GetClients" message="tns:User.GetClientsHttpPostOut"/>
|
171
|
+
</wsdl:operation>
|
172
|
+
</wsdl:portType>
|
173
|
+
<wsdl:binding name="apiSoap" type="tns:apiSoap">
|
174
|
+
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
|
175
|
+
<wsdl:operation name="GetApiKey">
|
176
|
+
<soap:operation soapAction="http://api.example.com/api/User.GetApiKey" style="document"/>
|
177
|
+
<wsdl:input name="User.GetApiKey">
|
178
|
+
<soap:body use="literal"/>
|
179
|
+
</wsdl:input>
|
180
|
+
<wsdl:output name="User.GetApiKey">
|
181
|
+
<soap:body use="literal"/>
|
182
|
+
</wsdl:output>
|
183
|
+
</wsdl:operation>
|
184
|
+
<wsdl:operation name="DeleteClient">
|
185
|
+
<soap:operation soapAction="http://api.example.com/api/Client.Delete" style="document"/>
|
186
|
+
<wsdl:input name="Client.Delete">
|
187
|
+
<soap:body use="literal"/>
|
188
|
+
</wsdl:input>
|
189
|
+
<wsdl:output name="Client.Delete">
|
190
|
+
<soap:body use="literal"/>
|
191
|
+
</wsdl:output>
|
192
|
+
</wsdl:operation>
|
193
|
+
<wsdl:operation name="GetClients">
|
194
|
+
<soap:operation soapAction="http://api.example.com/api/User.GetClients" style="document"/>
|
195
|
+
<wsdl:input name="User.GetClients">
|
196
|
+
<soap:body use="literal"/>
|
197
|
+
</wsdl:input>
|
198
|
+
<wsdl:output name="User.GetClients">
|
199
|
+
<soap:body use="literal"/>
|
200
|
+
</wsdl:output>
|
201
|
+
</wsdl:operation>
|
202
|
+
</wsdl:binding>
|
203
|
+
<wsdl:binding name="apiSoap12" type="tns:apiSoap">
|
204
|
+
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
|
205
|
+
<wsdl:operation name="GetApiKey">
|
206
|
+
<soap12:operation soapAction="http://api.example.com/api/User.GetApiKey" style="document"/>
|
207
|
+
<wsdl:input name="User.GetApiKey">
|
208
|
+
<soap12:body use="literal"/>
|
209
|
+
</wsdl:input>
|
210
|
+
<wsdl:output name="User.GetApiKey">
|
211
|
+
<soap12:body use="literal"/>
|
212
|
+
</wsdl:output>
|
213
|
+
</wsdl:operation>
|
214
|
+
<wsdl:operation name="DeleteClient">
|
215
|
+
<soap12:operation soapAction="http://api.example.com/api/Client.Delete" style="document"/>
|
216
|
+
<wsdl:input name="Client.Delete">
|
217
|
+
<soap12:body use="literal"/>
|
218
|
+
</wsdl:input>
|
219
|
+
<wsdl:output name="Client.Delete">
|
220
|
+
<soap12:body use="literal"/>
|
221
|
+
</wsdl:output>
|
222
|
+
</wsdl:operation>
|
223
|
+
<wsdl:operation name="GetClients">
|
224
|
+
<soap12:operation soapAction="http://api.example.com/api/User.GetClients" style="document"/>
|
225
|
+
<wsdl:input name="User.GetClients">
|
226
|
+
<soap12:body use="literal"/>
|
227
|
+
</wsdl:input>
|
228
|
+
<wsdl:output name="User.GetClients">
|
229
|
+
<soap12:body use="literal"/>
|
230
|
+
</wsdl:output>
|
231
|
+
</wsdl:operation>
|
232
|
+
</wsdl:binding>
|
233
|
+
<wsdl:binding name="apiHttpGet" type="tns:apiHttpGet">
|
234
|
+
<http:binding verb="GET"/>
|
235
|
+
<wsdl:operation name="GetApiKey">
|
236
|
+
<http:operation location="/User.GetApiKey"/>
|
237
|
+
<wsdl:input name="User.GetApiKey">
|
238
|
+
<http:urlEncoded/>
|
239
|
+
</wsdl:input>
|
240
|
+
<wsdl:output name="User.GetApiKey">
|
241
|
+
<mime:mimeXml part="Body"/>
|
242
|
+
</wsdl:output>
|
243
|
+
</wsdl:operation>
|
244
|
+
<wsdl:operation name="DeleteClient">
|
245
|
+
<http:operation location="/Client.Delete"/>
|
246
|
+
<wsdl:input name="Client.Delete">
|
247
|
+
<http:urlEncoded/>
|
248
|
+
</wsdl:input>
|
249
|
+
<wsdl:output name="Client.Delete">
|
250
|
+
<mime:mimeXml part="Body"/>
|
251
|
+
</wsdl:output>
|
252
|
+
</wsdl:operation>
|
253
|
+
<wsdl:operation name="GetClients">
|
254
|
+
<http:operation location="/User.GetClients"/>
|
255
|
+
<wsdl:input name="User.GetClients">
|
256
|
+
<http:urlEncoded/>
|
257
|
+
</wsdl:input>
|
258
|
+
<wsdl:output name="User.GetClients">
|
259
|
+
<mime:mimeXml part="Body"/>
|
260
|
+
</wsdl:output>
|
261
|
+
</wsdl:operation>
|
262
|
+
</wsdl:binding>
|
263
|
+
<wsdl:binding name="apiHttpPost" type="tns:apiHttpPost">
|
264
|
+
<http:binding verb="POST"/>
|
265
|
+
<wsdl:operation name="GetApiKey">
|
266
|
+
<http:operation location="/User.GetApiKey"/>
|
267
|
+
<wsdl:input name="User.GetApiKey">
|
268
|
+
<mime:content type="application/x-www-form-urlencoded"/>
|
269
|
+
</wsdl:input>
|
270
|
+
<wsdl:output name="User.GetApiKey">
|
271
|
+
<mime:mimeXml part="Body"/>
|
272
|
+
</wsdl:output>
|
273
|
+
</wsdl:operation>
|
274
|
+
<wsdl:operation name="DeleteClient">
|
275
|
+
<http:operation location="/Client.Delete"/>
|
276
|
+
<wsdl:input name="Client.Delete">
|
277
|
+
<mime:content type="application/x-www-form-urlencoded"/>
|
278
|
+
</wsdl:input>
|
279
|
+
<wsdl:output name="Client.Delete">
|
280
|
+
<mime:mimeXml part="Body"/>
|
281
|
+
</wsdl:output>
|
282
|
+
</wsdl:operation>
|
283
|
+
<wsdl:operation name="GetClients">
|
284
|
+
<http:operation location="/User.GetClients"/>
|
285
|
+
<wsdl:input name="User.GetClients">
|
286
|
+
<mime:content type="application/x-www-form-urlencoded"/>
|
287
|
+
</wsdl:input>
|
288
|
+
<wsdl:output name="User.GetClients">
|
289
|
+
<mime:mimeXml part="Body"/>
|
290
|
+
</wsdl:output>
|
291
|
+
</wsdl:operation>
|
292
|
+
</wsdl:binding>
|
293
|
+
<wsdl:service name="api">
|
294
|
+
<wsdl:port name="apiSoap" binding="tns:apiSoap">
|
295
|
+
<soap:address location="https://api.example.com/api/api.asmx"/>
|
296
|
+
</wsdl:port>
|
297
|
+
<wsdl:port name="apiSoap12" binding="tns:apiSoap12">
|
298
|
+
<soap12:address location="https://api.example.com/api/api.asmx"/>
|
299
|
+
</wsdl:port>
|
300
|
+
<wsdl:port name="apiHttpGet" binding="tns:apiHttpGet">
|
301
|
+
<http:address location="https://api.example.com/api/api.asmx"/>
|
302
|
+
</wsdl:port>
|
303
|
+
<wsdl:port name="apiHttpPost" binding="tns:apiHttpPost">
|
304
|
+
<http:address location="https://api.example.com/api/api.asmx"/>
|
305
|
+
</wsdl:port>
|
306
|
+
</wsdl:service>
|
307
|
+
</wsdl:definitions>
|