wasabi 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ .DS_Store
2
+ doc
3
+ coverage
4
+ pkg
5
+ *~
6
+ *.gem
7
+ .bundle
8
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,8 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - ruby-head
5
+ - ree
6
+ - rbx
7
+ - rbx-2.0
8
+ - jruby
@@ -0,0 +1,4 @@
1
+ ## 1.0.0 (2011-07-03)
2
+
3
+ * Initial version extracted from the [Savon](http://rubygems.org/gems/savon) library.
4
+ Use it to build your own SOAP client and help to improve it!
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Daniel Harrington
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,58 @@
1
+ Wasabi [![Build Status](http://travis-ci.org/rubiii/wasabi.png)](http://travis-ci.org/rubiii/wasabi)
2
+ =====
3
+
4
+ A simple WSDL parser.
5
+
6
+
7
+ Installation
8
+ ------------
9
+
10
+ Wasabi is available through [Rubygems](http://rubygems.org/gems/wasabi) and can be installed via:
11
+
12
+ ```
13
+ $ gem install wasabi
14
+ ```
15
+
16
+
17
+ Getting started
18
+ ---------------
19
+
20
+ ``` ruby
21
+ document = Wasabi.document File.read("some.wsdl")
22
+ ```
23
+
24
+ Get the SOAP endpoint:
25
+
26
+ ``` ruby
27
+ document.endpoint
28
+ # => "http://soap.example.com"
29
+ ```
30
+
31
+ Get the target namespace:
32
+
33
+ ``` ruby
34
+ document.namespace
35
+ # => "http://v1.example.com"
36
+ ```
37
+
38
+ Check whether elementFormDefault is set to `:qualified` or `:unqualified`:
39
+
40
+ ``` ruby
41
+ document.element_form_default
42
+ # => :qualified
43
+ ```
44
+
45
+ Get a list of available SOAP actions (snakecase for convenience):
46
+
47
+ ``` ruby
48
+ document.soap_actions
49
+ # => [:create_user, :find_user]
50
+ ```
51
+
52
+ Get a map of SOAP action Symbols, their input tag and original SOAP action name:
53
+
54
+ ``` ruby
55
+ document.operations
56
+ # => { :create_user => { :input => "createUser", :action => "createUser" },
57
+ # => :find_user => { :input => "findUser", :action => "findUser" } }
58
+ ```
@@ -0,0 +1,11 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new do |t|
7
+ t.rspec_opts = %w(-c)
8
+ end
9
+
10
+ task :default => :spec
11
+ task :test => :spec
@@ -0,0 +1,11 @@
1
+ require "wasabi/version"
2
+ require "wasabi/document"
3
+
4
+ module Wasabi
5
+
6
+ # Expects a WSDL document and returns a <tt>Wasabi::Document</tt>.
7
+ def self.document(document)
8
+ Document.new(document)
9
+ end
10
+
11
+ end
@@ -0,0 +1,21 @@
1
+ module Wasabi
2
+ module CoreExt
3
+ module String
4
+
5
+ # Returns the String in snakecase.
6
+ def snakecase
7
+ str = dup
8
+ str.gsub! /::/, '/'
9
+ str.gsub! /([A-Z]+)([A-Z][a-z])/, '\1_\2'
10
+ str.gsub! /([a-z\d])([A-Z])/, '\1_\2'
11
+ str.tr! ".", "_"
12
+ str.tr! "-", "_"
13
+ str.downcase!
14
+ str
15
+ end unless method_defined?(:snakecase)
16
+
17
+ end
18
+ end
19
+ end
20
+
21
+ String.send :include, Wasabi::CoreExt::String
@@ -0,0 +1,91 @@
1
+ require "nokogiri"
2
+ require "wasabi/parser"
3
+
4
+ module Wasabi
5
+
6
+ # = Wasabi::Document
7
+ #
8
+ # Represents a WSDL document.
9
+ class Document
10
+
11
+ # Accepts a WSDL +document+ to parse.
12
+ def initialize(document = nil)
13
+ self.document = document
14
+ end
15
+
16
+ attr_accessor :document
17
+
18
+ # Returns whether a +document+ was set.
19
+ def document?
20
+ !!document
21
+ end
22
+
23
+ # Returns the SOAP endpoint.
24
+ def endpoint
25
+ @endpoint ||= parser.endpoint
26
+ end
27
+
28
+ # Sets the SOAP endpoint.
29
+ attr_writer :endpoint
30
+
31
+ # Returns the target namespace.
32
+ def namespace
33
+ @namespace ||= parser.namespace
34
+ end
35
+
36
+ # Sets the target namespace.
37
+ attr_writer :namespace
38
+
39
+ # Returns the value of elementFormDefault.
40
+ def element_form_default
41
+ @element_form_default ||= parser.element_form_default
42
+ end
43
+
44
+ # Returns a list of available SOAP actions.
45
+ def soap_actions
46
+ @soap_actions ||= parser.operations.keys
47
+ end
48
+
49
+ # Returns the SOAP action for a given +key+.
50
+ def soap_action(key)
51
+ operations[key][:action] if operations[key]
52
+ end
53
+
54
+ # Returns the SOAP input for a given +key+.
55
+ def soap_input(key)
56
+ operations[key][:input] if operations[key]
57
+ end
58
+
59
+ # Returns a map of SOAP operations.
60
+ def operations
61
+ @operations ||= parser.operations
62
+ end
63
+
64
+ # Returns the raw WSDL document.
65
+ # Can be used as a hook to extend the library.
66
+ def xml
67
+ @xml ||= document
68
+ end
69
+
70
+ private
71
+
72
+ # Parses the WSDL document and returns the <tt>Wasabi::Parser</tt>.
73
+ def parser
74
+ @parser ||= guard_parse && parse
75
+ end
76
+
77
+ # Raises an error if the WSDL document is missing.
78
+ def guard_parse
79
+ return true if xml.kind_of?(String)
80
+ raise ArgumentError, "Wasabi needs a WSDL document"
81
+ end
82
+
83
+ # Parses the WSDL document and returns <tt>Wasabi::Parser</tt>.
84
+ def parse
85
+ parser = Parser.new Nokogiri::XML(xml)
86
+ parser.parse
87
+ parser
88
+ end
89
+
90
+ end
91
+ end
@@ -0,0 +1,94 @@
1
+ require "uri"
2
+ require "wasabi/core_ext/string"
3
+
4
+ module Wasabi
5
+
6
+ # = Wasabi::Parser
7
+ #
8
+ # Parses WSDL documents and remembers their important parts.
9
+ class Parser
10
+
11
+ def initialize(document)
12
+ @document = document
13
+ @path = []
14
+ @operations = {}
15
+ @namespaces = {}
16
+ @element_form_default = :unqualified
17
+ end
18
+
19
+ # Returns the SOAP endpoint.
20
+ attr_reader :endpoint
21
+
22
+ # Returns the target namespace.
23
+ attr_reader :namespace
24
+
25
+ # Returns the SOAP operations.
26
+ attr_reader :operations
27
+
28
+ # Returns the value of elementFormDefault.
29
+ attr_reader :element_form_default
30
+
31
+ def parse
32
+ parse_namespaces
33
+ parse_endpoint
34
+ parse_operations
35
+ end
36
+
37
+ def parse_namespaces
38
+ element_form_default = @document.at_xpath(
39
+ "s0:definitions/s0:types/xs:schema/@elementFormDefault",
40
+ "s0" => "http://schemas.xmlsoap.org/wsdl/",
41
+ "xs" => "http://www.w3.org/2001/XMLSchema")
42
+ @element_form_default = element_form_default.to_s.to_sym if element_form_default
43
+
44
+ namespace = @document.at_xpath(
45
+ "s0:definitions/@targetNamespace",
46
+ "s0" => "http://schemas.xmlsoap.org/wsdl/")
47
+ @namespace = namespace.to_s if namespace
48
+ end
49
+
50
+ def parse_endpoint
51
+ endpoint = @document.at_xpath(
52
+ "s0:definitions/s0:service//soap11:address/@location",
53
+ "s0" => "http://schemas.xmlsoap.org/wsdl/",
54
+ "soap11" => "http://schemas.xmlsoap.org/wsdl/soap/")
55
+ endpoint ||= @document.at_xpath(
56
+ "s0:definitions/s0:service//soap12:address/@location",
57
+ "s0" => "http://schemas.xmlsoap.org/wsdl/",
58
+ "soap12" => "http://schemas.xmlsoap.org/wsdl/soap12/")
59
+
60
+ @endpoint = URI(URI.escape(endpoint.to_s)) if endpoint
61
+ end
62
+
63
+ def parse_operations
64
+ operations = @document.xpath(
65
+ "s0:definitions/s0:binding/s0:operation",
66
+ "s0" => "http://schemas.xmlsoap.org/wsdl/")
67
+
68
+ operations.each do |operation|
69
+ name = operation.attribute("name").to_s
70
+
71
+ soap_action = operation.at_xpath(".//soap11:operation/@soapAction",
72
+ "soap11" => "http://schemas.xmlsoap.org/wsdl/soap/"
73
+ )
74
+ soap_action ||= operation.at_xpath(".//soap12:operation/@soapAction",
75
+ "soap12" => "http://schemas.xmlsoap.org/wsdl/soap12/"
76
+ )
77
+
78
+ if soap_action
79
+ soap_action = soap_action.to_s
80
+
81
+ action = soap_action && !soap_action.empty? ? soap_action : name
82
+ input = (!name || name.empty?) ? action.split("/").last : name
83
+
84
+ @operations[input.snakecase.to_sym] =
85
+ { :action => action, :input => input }
86
+ elsif !@operations[name.snakecase.to_sym]
87
+ @operations[name.snakecase.to_sym] =
88
+ { :action => name, :input => name }
89
+ end
90
+ end
91
+ end
92
+
93
+ end
94
+ end
@@ -0,0 +1,5 @@
1
+ module Wasabi
2
+
3
+ VERSION = "1.0.0"
4
+
5
+ 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,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>