johnreitano-savon 0.7.2.1 → 0.7.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +36 -4
- data/README.rdoc +78 -0
- data/Rakefile +15 -9
- data/lib/savon.rb +18 -20
- data/lib/savon/client.rb +60 -32
- data/lib/savon/core_ext.rb +8 -3
- data/lib/savon/core_ext/array.rb +31 -0
- data/lib/savon/core_ext/datetime.rb +1 -1
- data/lib/savon/core_ext/hash.rb +74 -50
- data/lib/savon/core_ext/net_http.rb +1 -2
- data/lib/savon/core_ext/object.rb +1 -3
- data/lib/savon/core_ext/string.rb +23 -4
- data/lib/savon/core_ext/uri.rb +3 -3
- data/lib/savon/logger.rb +56 -0
- data/lib/savon/request.rb +61 -60
- data/lib/savon/response.rb +68 -12
- data/lib/savon/soap.rb +180 -54
- data/lib/savon/wsdl.rb +77 -62
- data/lib/savon/wsdl_stream.rb +85 -0
- data/lib/savon/wsse.rb +45 -18
- data/spec/basic_spec_helper.rb +0 -1
- data/spec/endpoint_helper.rb +1 -0
- data/spec/fixtures/wsdl/xml/geotrust.xml +156 -0
- data/spec/http_stubs.rb +3 -0
- data/spec/savon/client_spec.rb +6 -2
- data/spec/savon/core_ext/array_spec.rb +19 -0
- data/spec/savon/core_ext/datetime_spec.rb +1 -1
- data/spec/savon/core_ext/hash_spec.rb +104 -64
- data/spec/savon/core_ext/object_spec.rb +1 -1
- data/spec/savon/core_ext/string_spec.rb +21 -2
- data/spec/savon/core_ext/uri_spec.rb +4 -0
- data/spec/savon/request_spec.rb +12 -8
- data/spec/savon/soap_spec.rb +141 -111
- data/spec/savon/wsdl_spec.rb +18 -0
- metadata +39 -19
- data/README.textile +0 -75
- data/spec/savon/savon_spec.rb +0 -23
data/lib/savon/wsdl.rb
CHANGED
@@ -1,13 +1,79 @@
|
|
1
1
|
module Savon
|
2
2
|
|
3
|
-
# Savon::WSDL
|
3
|
+
# = Savon::WSDL
|
4
4
|
#
|
5
|
-
#
|
5
|
+
# Savon::WSDL represents the WSDL of your service, including information like the namespace URI,
|
6
|
+
# the SOAP endpoint and available SOAP actions.
|
7
|
+
#
|
8
|
+
# == The WSDL document
|
9
|
+
#
|
10
|
+
# Retrieve the raw WSDL document:
|
11
|
+
#
|
12
|
+
# client.wsdl.to_s
|
13
|
+
#
|
14
|
+
# == Available SOAP actions
|
15
|
+
#
|
16
|
+
# Get an array of available SOAP actions:
|
17
|
+
#
|
18
|
+
# client.wsdl.soap_actions
|
19
|
+
# # => [:get_all_users, :get_user_by_id]
|
20
|
+
#
|
21
|
+
# == Namespace URI
|
22
|
+
#
|
23
|
+
# Get the namespace URI:
|
24
|
+
#
|
25
|
+
# client.wsdl.namespace_uri
|
26
|
+
# # => "http://ws.userservice.example.com"
|
27
|
+
#
|
28
|
+
# == SOAP endpoint
|
29
|
+
#
|
30
|
+
# Get the SOAP endpoint:
|
31
|
+
#
|
32
|
+
# client.wsdl.soap_endpoint
|
33
|
+
# # => "http://example.com"
|
34
|
+
#
|
35
|
+
# == Disable Savon::WSDL
|
36
|
+
#
|
37
|
+
# Especially with large services (i.e. Ebay), getting and parsing the WSDL document can really
|
38
|
+
# slow down your request. The WSDL is great for exploring a service, but it's recommended to
|
39
|
+
# disable it for production.
|
40
|
+
#
|
41
|
+
# When disabling the WSDL, you need to pay attention to certain differences:
|
42
|
+
#
|
43
|
+
# 1. You instantiate Savon::Client with the actual SOAP endpoint instead of pointing it to the
|
44
|
+
# WSDL of your service.
|
45
|
+
# 2. You also need to manually specify the SOAP.namespace.
|
46
|
+
# 3. Append an exclamation mark (!) to your SOAP call:
|
47
|
+
#
|
48
|
+
# client = Savon::Client.new "http://example.com"
|
49
|
+
#
|
50
|
+
# client.get_user_by_id! do |soap|
|
51
|
+
# soap.namespace = "http://example.com/UserService"
|
52
|
+
# soap.body = { :id => 666 }
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# Without the WSDL, Savon also has to guess the name of the SOAP action and input tag. It takes
|
56
|
+
# the name of the method called on its client instance, converts it from snake_case to lowerCamelCase
|
57
|
+
# and uses the result.
|
58
|
+
#
|
59
|
+
# The example above expects a SOAP action with an original name of "getUserById". If you service
|
60
|
+
# uses UpperCamelCase method names, you can just use the original name:
|
61
|
+
#
|
62
|
+
# client.GetAllUsers!
|
63
|
+
#
|
64
|
+
# For special cases, you could also specify the SOAP.action and SOAP.input inside the block:
|
65
|
+
#
|
66
|
+
# client.get_user_by_id! do |soap|
|
67
|
+
# soap.namespace = "http://example.com/UserService"
|
68
|
+
# soap.action = "GetUserById"
|
69
|
+
# soap.input = "GetUserByIdRequest"
|
70
|
+
# soap.body = { :id => 123 }
|
71
|
+
# end
|
6
72
|
class WSDL
|
7
73
|
|
8
74
|
# Initializer, expects a Savon::Request.
|
9
75
|
def initialize(request)
|
10
|
-
@request = request
|
76
|
+
@request, @enabled = request, true
|
11
77
|
end
|
12
78
|
|
13
79
|
# Sets whether to use the WSDL.
|
@@ -15,7 +81,7 @@ module Savon
|
|
15
81
|
|
16
82
|
# Returns whether to use the WSDL. Defaults to +true+.
|
17
83
|
def enabled?
|
18
|
-
@enabled
|
84
|
+
@enabled
|
19
85
|
end
|
20
86
|
|
21
87
|
# Returns the namespace URI of the WSDL.
|
@@ -41,10 +107,16 @@ module Savon
|
|
41
107
|
|
42
108
|
# Returns +true+ for available methods and SOAP actions.
|
43
109
|
def respond_to?(method)
|
44
|
-
return true if soap_actions.include?
|
110
|
+
return true if !enabled? || soap_actions.include?(method)
|
45
111
|
super
|
46
112
|
end
|
47
113
|
|
114
|
+
# Returns an Array containg the SOAP action and input for a given +soap_call+.
|
115
|
+
def operation_from(soap_action)
|
116
|
+
return [soap_action.to_soap_key, soap_action.to_soap_key] unless enabled?
|
117
|
+
[operations[soap_action][:action], operations[soap_action][:input]]
|
118
|
+
end
|
119
|
+
|
48
120
|
# Returns the raw WSDL document.
|
49
121
|
def to_s
|
50
122
|
@document ||= @request.wsdl.body
|
@@ -62,61 +134,4 @@ module Savon
|
|
62
134
|
end
|
63
135
|
|
64
136
|
end
|
65
|
-
|
66
|
-
# Savon::WSDLStream
|
67
|
-
#
|
68
|
-
# Stream listener for parsing the WSDL document.
|
69
|
-
class WSDLStream
|
70
|
-
|
71
|
-
# The main sections of a WSDL document.
|
72
|
-
Sections = %w(definitions types message portType binding service)
|
73
|
-
|
74
|
-
def initialize
|
75
|
-
@depth, @operations = 0, {}
|
76
|
-
end
|
77
|
-
|
78
|
-
# Returns the namespace URI.
|
79
|
-
attr_reader :namespace_uri
|
80
|
-
|
81
|
-
# Returns the SOAP operations.
|
82
|
-
attr_reader :operations
|
83
|
-
|
84
|
-
# Returns the SOAP endpoint.
|
85
|
-
attr_reader :soap_endpoint
|
86
|
-
|
87
|
-
# Hook method called when the stream parser encounters a starting tag.
|
88
|
-
def tag_start(tag, attrs)
|
89
|
-
@depth += 1
|
90
|
-
tag = tag.strip_namespace
|
91
|
-
|
92
|
-
@section = tag.to_sym if @depth <= 2 && Sections.include?(tag)
|
93
|
-
@namespace_uri ||= attrs["targetNamespace"] if @section == :definitions
|
94
|
-
@soap_endpoint ||= URI(attrs["location"]) if @section == :service && tag == "address"
|
95
|
-
|
96
|
-
operation_from tag, attrs if @section == :binding && tag == "operation"
|
97
|
-
end
|
98
|
-
|
99
|
-
# Hook method called when the stream parser encounters a closing tag.
|
100
|
-
def tag_end(tag)
|
101
|
-
@depth -= 1
|
102
|
-
end
|
103
|
-
|
104
|
-
# Stores available operations from a given tag +name+ and +attrs+.
|
105
|
-
def operation_from(tag, attrs)
|
106
|
-
@input = attrs["name"] if attrs["name"]
|
107
|
-
|
108
|
-
if attrs["soapAction"]
|
109
|
-
@action = !attrs["soapAction"].blank? ? attrs["soapAction"] : @input
|
110
|
-
@input = @action.split("/").last if !@input || @input.empty?
|
111
|
-
|
112
|
-
@operations[@input.snakecase.to_sym] = { :action => @action, :input => @input }
|
113
|
-
@input, @action = nil, nil
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
# Catches calls to unimplemented hook methods.
|
118
|
-
def method_missing(method, *args)
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
122
137
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Savon
|
2
|
+
|
3
|
+
# = Savon::WSDLStream
|
4
|
+
#
|
5
|
+
# Savon::WSDLStream serves as a stream listener for parsing the WSDL document.
|
6
|
+
class WSDLStream
|
7
|
+
|
8
|
+
# The main sections of a WSDL document.
|
9
|
+
Sections = %w(definitions types message portType binding service)
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@path, @operations, @namespaces = [], {}, {}
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns the namespace URI.
|
16
|
+
attr_reader :namespace_uri
|
17
|
+
|
18
|
+
# Returns the SOAP operations.
|
19
|
+
attr_reader :operations
|
20
|
+
|
21
|
+
# Returns the SOAP endpoint.
|
22
|
+
attr_reader :soap_endpoint
|
23
|
+
|
24
|
+
# Hook method called when the stream parser encounters a starting tag.
|
25
|
+
def tag_start(tag, attrs)
|
26
|
+
# read xml namespaces if root element
|
27
|
+
read_namespaces(attrs) if @path.empty?
|
28
|
+
|
29
|
+
tag, namespace = tag.split(":").reverse
|
30
|
+
@path << tag
|
31
|
+
|
32
|
+
if @section == :binding && tag == "binding"
|
33
|
+
# ensure that we are in an wsdl/soap namespace
|
34
|
+
@section = nil unless @namespaces[namespace].starts_with? "http://schemas.xmlsoap.org/wsdl/soap"
|
35
|
+
end
|
36
|
+
|
37
|
+
@section = tag.to_sym if Sections.include?(tag) && depth <= 2
|
38
|
+
|
39
|
+
@namespace_uri ||= attrs["targetNamespace"] if @section == :definitions
|
40
|
+
@soap_endpoint ||= URI(attrs["location"]) if @section == :service && tag == "address"
|
41
|
+
|
42
|
+
operation_from tag, attrs if @section == :binding && tag == "operation"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns our current depth in the WSDL document.
|
46
|
+
def depth
|
47
|
+
@path.size
|
48
|
+
end
|
49
|
+
|
50
|
+
# Reads namespace definitions from a given +attrs+ Hash.
|
51
|
+
def read_namespaces(attrs)
|
52
|
+
attrs.each do |key, value|
|
53
|
+
@namespaces[key.strip_namespace] = value if key.starts_with? "xmlns:"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Hook method called when the stream parser encounters a closing tag.
|
58
|
+
def tag_end(tag)
|
59
|
+
@path.pop
|
60
|
+
|
61
|
+
if @section == :binding && @input && tag.strip_namespace == "operation"
|
62
|
+
# no soapAction attribute found till now
|
63
|
+
operation_from tag, "soapAction" => @input
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Stores available operations from a given tag +name+ and +attrs+.
|
68
|
+
def operation_from(tag, attrs)
|
69
|
+
@input = attrs["name"] if attrs["name"]
|
70
|
+
|
71
|
+
if attrs["soapAction"]
|
72
|
+
@action = !attrs["soapAction"].blank? ? attrs["soapAction"] : @input
|
73
|
+
@input = @action.split("/").last if !@input || @input.empty?
|
74
|
+
|
75
|
+
@operations[@input.snakecase.to_sym] = { :action => @action, :input => @input }
|
76
|
+
@input, @action = nil, nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Catches calls to unimplemented hook methods.
|
81
|
+
def method_missing(method, *args)
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
data/lib/savon/wsse.rb
CHANGED
@@ -1,24 +1,55 @@
|
|
1
1
|
module Savon
|
2
2
|
|
3
|
-
# Savon::WSSE
|
3
|
+
# = Savon::WSSE
|
4
4
|
#
|
5
|
-
#
|
5
|
+
# Savon::WSSE represents WSSE authentication. Pass a block to your SOAP call and the WSSE object
|
6
|
+
# is passed to it as the second argument. The object allows setting the WSSE username, password
|
7
|
+
# and whether to use digest authentication.
|
8
|
+
#
|
9
|
+
# == Credentials
|
10
|
+
#
|
11
|
+
# By default, Savon does not use WSSE authentication. Simply specify a username and password to
|
12
|
+
# change this.
|
13
|
+
#
|
14
|
+
# response = client.get_all_users do |soap, wsse|
|
15
|
+
# wsse.username = "eve"
|
16
|
+
# wsse.password = "secret"
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# == Digest
|
20
|
+
#
|
21
|
+
# To use WSSE digest authentication, just use the digest method and set it to +true+.
|
22
|
+
#
|
23
|
+
# response = client.get_all_users do |soap, wsse|
|
24
|
+
# wsse.username = "eve"
|
25
|
+
# wsse.password = "secret"
|
26
|
+
# wsse.digest = true
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# == Default to WSSE
|
30
|
+
#
|
31
|
+
# In case all you're services require WSSE authentication, you can set your credentials and whether
|
32
|
+
# to use WSSE digest for every request:
|
33
|
+
#
|
34
|
+
# Savon::WSSE.username = "eve"
|
35
|
+
# Savon::WSSE.password = "secret"
|
36
|
+
# Savon::WSSE.digest = true
|
6
37
|
class WSSE
|
7
38
|
|
8
39
|
# Base address for WSSE docs.
|
9
40
|
BaseAddress = "http://docs.oasis-open.org/wss/2004/01"
|
10
41
|
|
11
42
|
# Namespace for WS Security Secext.
|
12
|
-
WSENamespace = BaseAddress
|
43
|
+
WSENamespace = "#{BaseAddress}/oasis-200401-wss-wssecurity-secext-1.0.xsd"
|
13
44
|
|
14
45
|
# Namespace for WS Security Utility.
|
15
|
-
WSUNamespace = BaseAddress
|
46
|
+
WSUNamespace = "#{BaseAddress}/oasis-200401-wss-wssecurity-utility-1.0.xsd"
|
16
47
|
|
17
48
|
# URI for "wsse:Password/@Type" #PasswordText.
|
18
|
-
PasswordTextURI = BaseAddress
|
49
|
+
PasswordTextURI = "#{BaseAddress}/oasis-200401-wss-username-token-profile-1.0#PasswordText"
|
19
50
|
|
20
51
|
# URI for "wsse:Password/@Type" #PasswordDigest.
|
21
|
-
PasswordDigestURI = BaseAddress
|
52
|
+
PasswordDigestURI = "#{BaseAddress}/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"
|
22
53
|
|
23
54
|
# Global WSSE username.
|
24
55
|
@@username = nil
|
@@ -30,8 +61,7 @@ module Savon
|
|
30
61
|
|
31
62
|
# Sets the global WSSE username.
|
32
63
|
def self.username=(username)
|
33
|
-
@@username = username.
|
34
|
-
@@username = nil if username.nil?
|
64
|
+
@@username = username.nil? ? nil : username.to_s
|
35
65
|
end
|
36
66
|
|
37
67
|
# Global WSSE password.
|
@@ -44,8 +74,7 @@ module Savon
|
|
44
74
|
|
45
75
|
# Sets the global WSSE password.
|
46
76
|
def self.password=(password)
|
47
|
-
@@password = password.
|
48
|
-
@@password = nil if password.nil?
|
77
|
+
@@password = password.nil? ? nil : password.to_s
|
49
78
|
end
|
50
79
|
|
51
80
|
# Global setting of whether to use WSSE digest.
|
@@ -63,8 +92,7 @@ module Savon
|
|
63
92
|
|
64
93
|
# Sets the WSSE username per request.
|
65
94
|
def username=(username)
|
66
|
-
@username = username.
|
67
|
-
@username = nil if username.nil?
|
95
|
+
@username = username.nil? ? nil : username.to_s
|
68
96
|
end
|
69
97
|
|
70
98
|
# Returns the WSSE username. Defaults to the global setting.
|
@@ -74,8 +102,7 @@ module Savon
|
|
74
102
|
|
75
103
|
# Sets the WSSE password per request.
|
76
104
|
def password=(password)
|
77
|
-
@password = password.
|
78
|
-
@password = nil if password.nil?
|
105
|
+
@password = password.nil? ? nil : password.to_s
|
79
106
|
end
|
80
107
|
|
81
108
|
# Returns the WSSE password. Defaults to the global setting.
|
@@ -86,13 +113,13 @@ module Savon
|
|
86
113
|
# Sets whether to use WSSE digest per request.
|
87
114
|
attr_writer :digest
|
88
115
|
|
89
|
-
# Returns whether to use WSSE digest. Defaults to the global setting.
|
116
|
+
# Returns whether to use WSSE digest. Defaults to the global setting.
|
90
117
|
def digest?
|
91
118
|
@digest || self.class.digest?
|
92
119
|
end
|
93
120
|
|
94
|
-
# Returns the XML for a WSSE header or an empty String unless both
|
95
|
-
#
|
121
|
+
# Returns the XML for a WSSE header or an empty String unless both username and password
|
122
|
+
# were specified.
|
96
123
|
def header
|
97
124
|
return "" unless username && password
|
98
125
|
|
@@ -129,7 +156,7 @@ module Savon
|
|
129
156
|
|
130
157
|
# Returns a WSSE timestamp.
|
131
158
|
def timestamp
|
132
|
-
@timestamp ||= Time.now.strftime Savon::
|
159
|
+
@timestamp ||= Time.now.strftime Savon::SOAP::DateTimeFormat
|
133
160
|
end
|
134
161
|
|
135
162
|
end
|
data/spec/basic_spec_helper.rb
CHANGED
data/spec/endpoint_helper.rb
CHANGED
@@ -5,6 +5,7 @@ class EndpointHelper
|
|
5
5
|
case type
|
6
6
|
when :no_namespace then "http://nons.example.com/Service?wsdl"
|
7
7
|
when :namespaced_actions then "http://nsactions.example.com/Service?wsdl"
|
8
|
+
when :geotrust then "https://test-api.geotrust.com/webtrust/query.jws?WSDL"
|
8
9
|
else soap_endpoint(type)
|
9
10
|
end
|
10
11
|
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
2
|
+
<s0:definitions name="queryDefinitions" targetNamespace="http://api.geotrust.com/webtrust/query" xmlns="" xmlns:s0="http://schemas.xmlsoap.org/wsdl/" xmlns:s1="http://api.geotrust.com/webtrust/query" xmlns:s2="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s3="http://www.openuri.org/2006/12/wsdl/upgradedJWS">
|
3
|
+
<s0:types>
|
4
|
+
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://api.geotrust.com/webtrust/query" xmlns:s0="http://schemas.xmlsoap.org/wsdl/" xmlns:s1="http://api.geotrust.com/webtrust/query" xmlns:s2="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s3="http://www.openuri.org/2006/12/wsdl/upgradedJWS" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
5
|
+
<xs:complexType name="GetQuickApproverListInput">
|
6
|
+
<xs:sequence>
|
7
|
+
<xs:element minOccurs="0" name="QueryRequestHeader" type="quer:queryRequestHeader" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
8
|
+
<xs:element minOccurs="0" name="Domain" type="xs:string"/>
|
9
|
+
<xs:element minOccurs="0" name="IncludeUserAgreement" type="quer:includeUserAgreement" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
10
|
+
</xs:sequence>
|
11
|
+
</xs:complexType>
|
12
|
+
<xs:complexType name="queryRequestHeader">
|
13
|
+
<xs:sequence>
|
14
|
+
<xs:element minOccurs="0" name="PartnerCode" type="xs:string"/>
|
15
|
+
<xs:element minOccurs="0" name="AuthToken" type="quer:authToken" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
16
|
+
<xs:element minOccurs="0" name="ReplayToken" type="xs:string"/>
|
17
|
+
<xs:element minOccurs="0" name="UseReplayToken" type="xs:boolean"/>
|
18
|
+
</xs:sequence>
|
19
|
+
</xs:complexType>
|
20
|
+
<xs:complexType name="authToken">
|
21
|
+
<xs:sequence>
|
22
|
+
<xs:element minOccurs="0" name="UserName" type="xs:string"/>
|
23
|
+
<xs:element minOccurs="0" name="Password" type="xs:string"/>
|
24
|
+
</xs:sequence>
|
25
|
+
</xs:complexType>
|
26
|
+
<xs:complexType name="includeUserAgreement">
|
27
|
+
<xs:sequence>
|
28
|
+
<xs:element minOccurs="0" name="UserAgreementProductCode" type="xs:string"/>
|
29
|
+
</xs:sequence>
|
30
|
+
</xs:complexType>
|
31
|
+
<xs:complexType name="GetUserAgreementInput">
|
32
|
+
<xs:sequence>
|
33
|
+
<xs:element minOccurs="0" name="QueryRequestHeader" type="quer:queryRequestHeader" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
34
|
+
<xs:element minOccurs="0" name="UserAgreementProductCode" type="xs:string"/>
|
35
|
+
</xs:sequence>
|
36
|
+
</xs:complexType>
|
37
|
+
<xs:complexType name="GetQuickApproverListOutput">
|
38
|
+
<xs:sequence>
|
39
|
+
<xs:element minOccurs="0" name="QueryResponseHeader" type="quer:queryResponseHeader" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
40
|
+
<xs:element minOccurs="0" name="ApproverList" type="quer:ArrayOfApprover" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
41
|
+
<xs:element minOccurs="0" name="UserAgreement" type="xs:string"/>
|
42
|
+
</xs:sequence>
|
43
|
+
</xs:complexType>
|
44
|
+
<xs:complexType name="queryResponseHeader">
|
45
|
+
<xs:sequence>
|
46
|
+
<xs:element name="SuccessCode" type="xs:int"/>
|
47
|
+
<xs:element minOccurs="0" name="Errors" type="quer:ArrayOfError" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
48
|
+
<xs:element minOccurs="0" name="Timestamp" type="xs:dateTime"/>
|
49
|
+
<xs:element name="ReturnCount" type="xs:int"/>
|
50
|
+
</xs:sequence>
|
51
|
+
</xs:complexType>
|
52
|
+
<xs:complexType name="Error">
|
53
|
+
<xs:sequence>
|
54
|
+
<xs:element name="ErrorCode" type="xs:int"/>
|
55
|
+
<xs:element minOccurs="0" name="ErrorField" type="xs:string"/>
|
56
|
+
<xs:element minOccurs="0" name="ErrorMessage" type="xs:string"/>
|
57
|
+
</xs:sequence>
|
58
|
+
</xs:complexType>
|
59
|
+
<xs:complexType name="ArrayOfError">
|
60
|
+
<xs:sequence>
|
61
|
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="Error" type="quer:Error" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
62
|
+
</xs:sequence>
|
63
|
+
</xs:complexType>
|
64
|
+
<xs:element name="ArrayOfError" type="quer:ArrayOfError" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
65
|
+
<xs:complexType name="Approver">
|
66
|
+
<xs:sequence>
|
67
|
+
<xs:element minOccurs="0" name="ApproverType" type="xs:string"/>
|
68
|
+
<xs:element minOccurs="0" name="ApproverEmail" type="xs:string"/>
|
69
|
+
</xs:sequence>
|
70
|
+
</xs:complexType>
|
71
|
+
<xs:complexType name="ArrayOfApprover">
|
72
|
+
<xs:sequence>
|
73
|
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="Approver" type="quer:Approver" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
74
|
+
</xs:sequence>
|
75
|
+
</xs:complexType>
|
76
|
+
<xs:element name="ArrayOfApprover" type="quer:ArrayOfApprover" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
77
|
+
<xs:complexType name="ArrayOfString">
|
78
|
+
<xs:sequence>
|
79
|
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="String" type="xs:string"/>
|
80
|
+
</xs:sequence>
|
81
|
+
</xs:complexType>
|
82
|
+
<xs:element name="ArrayOfString" type="quer:ArrayOfString" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
83
|
+
<xs:element name="GetQuickApproverList">
|
84
|
+
<xs:complexType>
|
85
|
+
<xs:sequence>
|
86
|
+
<xs:element minOccurs="0" name="Request" type="quer:GetQuickApproverListInput" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
87
|
+
</xs:sequence>
|
88
|
+
</xs:complexType>
|
89
|
+
</xs:element>
|
90
|
+
<xs:element name="GetQuickApproverListResponse">
|
91
|
+
<xs:complexType>
|
92
|
+
<xs:sequence>
|
93
|
+
<xs:element minOccurs="0" name="GetQuickApproverListResult" type="quer:GetQuickApproverListOutput" xmlns:quer="http://api.geotrust.com/webtrust/query"/>
|
94
|
+
</xs:sequence>
|
95
|
+
</xs:complexType>
|
96
|
+
</xs:element>
|
97
|
+
<xs:element name="hello">
|
98
|
+
<xs:complexType>
|
99
|
+
<xs:sequence>
|
100
|
+
<xs:element minOccurs="0" name="Input" type="xs:string"/>
|
101
|
+
</xs:sequence>
|
102
|
+
</xs:complexType>
|
103
|
+
</xs:element>
|
104
|
+
<xs:element name="helloResponse">
|
105
|
+
<xs:complexType>
|
106
|
+
<xs:sequence>
|
107
|
+
<xs:element minOccurs="0" name="helloResult" type="xs:string"/>
|
108
|
+
</xs:sequence>
|
109
|
+
</xs:complexType>
|
110
|
+
</xs:element>
|
111
|
+
</xs:schema>
|
112
|
+
</s0:types>
|
113
|
+
<s0:message name="hello">
|
114
|
+
<s0:part element="s1:hello" name="parameters"/>
|
115
|
+
</s0:message>
|
116
|
+
<s0:message name="helloResponse">
|
117
|
+
<s0:part element="s1:helloResponse" name="helloResultPart"/>
|
118
|
+
</s0:message>
|
119
|
+
<s0:portType name="querySoap">
|
120
|
+
<s0:operation name="GetQuickApproverList" parameterOrder="parameters">
|
121
|
+
<s0:input message="s1:GetQuickApproverList"/>
|
122
|
+
<s0:output message="s1:GetQuickApproverListResponse"/>
|
123
|
+
</s0:operation>
|
124
|
+
<s0:operation name="hello" parameterOrder="parameters">
|
125
|
+
<s0:input message="s1:hello"/>
|
126
|
+
<s0:output message="s1:helloResponse"/>
|
127
|
+
</s0:operation>
|
128
|
+
</s0:portType>
|
129
|
+
<s0:binding name="querySoapBinding" type="s1:querySoap">
|
130
|
+
<s2:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
131
|
+
<s0:operation name="GetQuickApproverList">
|
132
|
+
<s2:operation style="document"/>
|
133
|
+
<s0:input>
|
134
|
+
<s2:body parts="parameters" use="literal"/>
|
135
|
+
</s0:input>
|
136
|
+
<s0:output>
|
137
|
+
<s2:body parts="GetQuickApproverListResultPart" use="literal"/>
|
138
|
+
</s0:output>
|
139
|
+
</s0:operation>
|
140
|
+
<s0:operation name="hello">
|
141
|
+
<s2:operation style="document"/>
|
142
|
+
<s0:input>
|
143
|
+
<s2:body parts="parameters" use="literal"/>
|
144
|
+
</s0:input>
|
145
|
+
<s0:output>
|
146
|
+
<s2:body parts="helloResultPart" use="literal"/>
|
147
|
+
</s0:output>
|
148
|
+
</s0:operation>
|
149
|
+
</s0:binding>
|
150
|
+
<s0:service name="query">
|
151
|
+
<s3:upgraded81/>
|
152
|
+
<s0:port binding="s1:querySoapBinding" name="querySoap">
|
153
|
+
<s2:address location="https://test-api.geotrust.com:443/webtrust/query.jws"/>
|
154
|
+
</s0:port>
|
155
|
+
</s0:service>
|
156
|
+
</s0:definitions>
|