qbwc 0.0.3

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.
@@ -0,0 +1,50 @@
1
+ class QBWC::Request
2
+
3
+ attr_reader :request, :response_proc
4
+ attr_accessor :response, :error
5
+
6
+ def initialize(request, response_proc)
7
+ #Handle Cases for a request passed in as a Hash or String
8
+ #If it's a hash verify that it is properly wrapped with qbxml_msg_rq and xml_attributes for on_error events
9
+ #Allow strings of QBXML to be passed in directly.
10
+ case
11
+ when request.is_a?(Hash)
12
+
13
+ unless request.keys.include?(:qbxml_msgs_rq)
14
+ wrapped_request = { :qbxml_msgs_rq => {:xml_attributes => {"onError"=> QBWC::on_error } } }
15
+ wrapped_request[:qbxml_msgs_rq] = wrapped_request[:qbxml_msgs_rq].merge(request)
16
+ request = wrapped_request
17
+ end
18
+
19
+ @request = QBWC.parser.hash_to_qbxml(request)
20
+ when request.is_a?(String)
21
+ @request = request
22
+ end
23
+ @response_proc = response_proc
24
+ end
25
+
26
+ def process_response
27
+ @response_proc && @response && @response_proc.call(response)
28
+ end
29
+
30
+ def to_qbxml
31
+ QBWC.parser.hash_to_qbxml(request)
32
+ end
33
+
34
+ def to_hash
35
+ QBWC.parser.qbxml_to_hash @request.to_s
36
+ end
37
+
38
+ def to_s
39
+ @request
40
+ end
41
+
42
+ class << self
43
+
44
+ def from_array(requests, response_proc)
45
+ Array(requests).map { |r| new(r, response_proc) }
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,110 @@
1
+ class QBWC::Session
2
+ include Enumerable
3
+
4
+ attr_reader :current_job, :current_request, :saved_requests, :progress
5
+ attr_reader :qbwc_iterator_queue, :qbwc_iterating
6
+
7
+ @@session = nil
8
+
9
+ def initialize
10
+ @current_job = nil
11
+ @current_request = nil
12
+ @saved_requests = []
13
+
14
+ @qbwc_iterator_queue = []
15
+ @qbwc_iterating = false
16
+
17
+ @@session = self
18
+ reset
19
+ end
20
+
21
+ def reset
22
+ @progress = QBWC.jobs.blank? ? 100 : 0
23
+ enabled_jobs.map { |j| j.reset } unless enabled_jobs.blank?
24
+ @requests = build_request_generator(enabled_jobs)
25
+ end
26
+
27
+ def finished?
28
+ @progress == 100
29
+ end
30
+
31
+ def next
32
+ @requests.alive? ? @requests.resume : nil
33
+ end
34
+
35
+ def response=(qbxml_response)
36
+ @current_request.response = \
37
+ QBWC.parser.qbxml_to_hash(qbxml_response)
38
+ parse_response_header(@current_request.response)
39
+
40
+ if QBWC.delayed_processing
41
+ @saved_requests << @current_request
42
+ else
43
+ @current_request.process_response
44
+ end
45
+ end
46
+
47
+ def process_saved_responses
48
+ @saved_requests.each { |r| r.process_response }
49
+ end
50
+
51
+ private
52
+
53
+ def enabled_jobs
54
+ QBWC.jobs.values.select { |j| j.enabled? } unless QBWC.jobs.empty?
55
+ end
56
+
57
+ def build_request_generator(jobs)
58
+ Fiber.new do
59
+ unless jobs.blank?
60
+ jobs.each do |j|
61
+ @current_job = j
62
+ while (r = next_request)
63
+ @current_request = r
64
+ Fiber.yield r
65
+ end
66
+ end
67
+ end
68
+ @progress = 100
69
+ nil
70
+ end
71
+ end
72
+
73
+ def next_request
74
+ (@qbwc_iterating == true && @qbwc_iterator_queue.shift) || @current_job.next
75
+ end
76
+
77
+ def parse_response_header(response)
78
+ return unless response['xml_attributes']
79
+
80
+ status_code, status_severity, status_message, iterator_remaining_count, iterator_id = \
81
+ response['xml_attributes'].values_at('statusCode', 'statusSeverity', 'statusMessage',
82
+ 'iteratorRemainingCount', 'iteratorID')
83
+
84
+ if status_severity == 'Error' || status_code.to_i > 1 || response.keys.size <= 1
85
+ @current_request.error = "QBWC ERROR: #{status_code} - #{status_message}"
86
+ else
87
+ if iterator_remaining_count.to_i > 0
88
+ @qbwc_iterating = true
89
+ new_request = @current_request.to_hash
90
+ new_request.delete('xml_attributes')
91
+ new_request.values.first['xml_attributes'] = {'iterator' => 'Continue', 'iteratorID' => iterator_id}
92
+ @qbwc_iterator_queue << Request.new(new_request, @current_request.response_proc)
93
+ else
94
+ @qbwc_iterating = false
95
+ end
96
+ end
97
+ end
98
+
99
+ class << self
100
+
101
+ def new_or_unfinished
102
+ (!@@session || @@session.finished?) ? new : @@session
103
+ end
104
+
105
+ end
106
+
107
+ def self.session
108
+ @@session
109
+ end
110
+ end
@@ -0,0 +1,35 @@
1
+ require 'soap/rpc/standaloneServer'
2
+
3
+ class QBWC::SoapWrapper
4
+ include QBWC
5
+ private_class_method :new
6
+
7
+ def self.initialize_singleton
8
+ @router = ::SOAP::RPC::Router.new('QBWebConnectorSvcSoap')
9
+ @router.mapping_registry = DefaultMappingRegistry::EncodedRegistry
10
+ @router.literal_mapping_registry = DefaultMappingRegistry::LiteralRegistry
11
+ @conn_data = ::SOAP::StreamHandler::ConnectionData.new
12
+
13
+ servant = QBWebConnectorSvcSoap.new
14
+ QBWebConnectorSvcSoap::Methods.each do |definitions|
15
+ opt = definitions.last
16
+ if opt[:request_style] == :document
17
+ @router.add_document_operation(servant, *definitions)
18
+ else
19
+ @router.add_rpc_operation(servant, *definitions)
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.route_request(request)
25
+ @conn_data.receive_string = request.raw_post
26
+ @conn_data.receive_contenttype = request.content_type
27
+ @conn_data.soapaction = nil
28
+
29
+ @router.external_ces = nil
30
+ res_data = @router.route(@conn_data)
31
+ res_data.send_string
32
+ end
33
+
34
+ initialize_singleton
35
+ end
@@ -0,0 +1,69 @@
1
+
2
+ class QBWC::QBWebConnectorSvcSoap
3
+ Methods = [
4
+ [ "http://developer.intuit.com/serverVersion",
5
+ "serverVersion",
6
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "serverVersion"]],
7
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "serverVersionResponse"]] ],
8
+ { :request_style => :document, :request_use => :literal,
9
+ :response_style => :document, :response_use => :literal,
10
+ :faults => {} }
11
+ ],
12
+ [ "http://developer.intuit.com/clientVersion",
13
+ "clientVersion",
14
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "clientVersion"]],
15
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "clientVersionResponse"]] ],
16
+ { :request_style => :document, :request_use => :literal,
17
+ :response_style => :document, :response_use => :literal,
18
+ :faults => {} }
19
+ ],
20
+ [ "http://developer.intuit.com/authenticate",
21
+ "authenticate",
22
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "authenticate"]],
23
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "authenticateResponse"]] ],
24
+ { :request_style => :document, :request_use => :literal,
25
+ :response_style => :document, :response_use => :literal,
26
+ :faults => {} }
27
+ ],
28
+ [ "http://developer.intuit.com/sendRequestXML",
29
+ "sendRequestXML",
30
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "sendRequestXML"]],
31
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "sendRequestXMLResponse"]] ],
32
+ { :request_style => :document, :request_use => :literal,
33
+ :response_style => :document, :response_use => :literal,
34
+ :faults => {} }
35
+ ],
36
+ [ "http://developer.intuit.com/receiveResponseXML",
37
+ "receiveResponseXML",
38
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "receiveResponseXML"]],
39
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "receiveResponseXMLResponse"]] ],
40
+ { :request_style => :document, :request_use => :literal,
41
+ :response_style => :document, :response_use => :literal,
42
+ :faults => {} }
43
+ ],
44
+ [ "http://developer.intuit.com/connectionError",
45
+ "connectionError",
46
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "connectionError"]],
47
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "connectionErrorResponse"]] ],
48
+ { :request_style => :document, :request_use => :literal,
49
+ :response_style => :document, :response_use => :literal,
50
+ :faults => {} }
51
+ ],
52
+ [ "http://developer.intuit.com/getLastError",
53
+ "getLastError",
54
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "getLastError"]],
55
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "getLastErrorResponse"]] ],
56
+ { :request_style => :document, :request_use => :literal,
57
+ :response_style => :document, :response_use => :literal,
58
+ :faults => {} }
59
+ ],
60
+ [ "http://developer.intuit.com/closeConnection",
61
+ "closeConnection",
62
+ [ ["in", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "closeConnection"]],
63
+ ["out", "parameters", ["::SOAP::SOAPElement", "http://developer.intuit.com/", "closeConnectionResponse"]] ],
64
+ { :request_style => :document, :request_use => :literal,
65
+ :response_style => :document, :response_use => :literal,
66
+ :faults => {} }
67
+ ]
68
+ ]
69
+ end
@@ -0,0 +1,312 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://developer.intuit.com/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://developer.intuit.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
3
+ <wsdl:types>
4
+ <s:schema elementFormDefault="qualified" targetNamespace="http://developer.intuit.com/">
5
+ <s:element name="authenticate">
6
+ <s:complexType>
7
+ <s:sequence>
8
+ <s:element minOccurs="0" maxOccurs="1" name="strUserName" type="s:string" />
9
+ <s:element minOccurs="0" maxOccurs="1" name="strPassword" type="s:string" />
10
+ </s:sequence>
11
+ </s:complexType>
12
+ </s:element>
13
+ <s:element name="authenticateResponse">
14
+ <s:complexType>
15
+ <s:sequence>
16
+ <s:element minOccurs="0" maxOccurs="1" name="authenticateResult" type="tns:ArrayOfString" />
17
+ </s:sequence>
18
+ </s:complexType>
19
+ </s:element>
20
+ <s:complexType name="ArrayOfString">
21
+ <s:sequence>
22
+ <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
23
+ </s:sequence>
24
+ </s:complexType>
25
+
26
+ <!-- added these two methods -->
27
+ <s:element name="serverVersion">
28
+ <s:complexType>
29
+ <s:sequence>
30
+ <s:element minOccurs="0" maxOccurs="1" name="strVersion" type="s:string" />
31
+ </s:sequence>
32
+ </s:complexType>
33
+ </s:element>
34
+ <s:element name="serverVersionResponse">
35
+ <s:complexType>
36
+ <s:sequence>
37
+ <s:element minOccurs="0" maxOccurs="1" name="serverVersionResult" type="s:string" />
38
+ </s:sequence>
39
+ </s:complexType>
40
+ </s:element>
41
+ <s:element name="clientVersion">
42
+ <s:complexType>
43
+ <s:sequence>
44
+ <s:element minOccurs="0" maxOccurs="1" name="strVersion" type="s:string" />
45
+ </s:sequence>
46
+ </s:complexType>
47
+ </s:element>
48
+ <s:element name="clientVersionResponse">
49
+ <s:complexType>
50
+ <s:sequence>
51
+ <s:element minOccurs="0" maxOccurs="1" name="clientVersionResult" type="s:string" />
52
+ </s:sequence>
53
+ </s:complexType>
54
+ </s:element>
55
+
56
+
57
+ <s:element name="sendRequestXML">
58
+ <s:complexType>
59
+ <s:sequence>
60
+ <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
61
+ <s:element minOccurs="0" maxOccurs="1" name="strHCPResponse" type="s:string" />
62
+ <s:element minOccurs="0" maxOccurs="1" name="strCompanyFileName" type="s:string" />
63
+ <s:element minOccurs="0" maxOccurs="1" name="qbXMLCountry" type="s:string" />
64
+ <s:element minOccurs="1" maxOccurs="1" name="qbXMLMajorVers" type="s:int" />
65
+ <s:element minOccurs="1" maxOccurs="1" name="qbXMLMinorVers" type="s:int" />
66
+ </s:sequence>
67
+ </s:complexType>
68
+ </s:element>
69
+ <s:element name="sendRequestXMLResponse">
70
+ <s:complexType>
71
+ <s:sequence>
72
+ <s:element minOccurs="0" maxOccurs="1" name="sendRequestXMLResult" type="s:string" />
73
+ </s:sequence>
74
+ </s:complexType>
75
+ </s:element>
76
+ <s:element name="receiveResponseXML">
77
+ <s:complexType>
78
+ <s:sequence>
79
+ <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
80
+ <s:element minOccurs="0" maxOccurs="1" name="response" type="s:string" />
81
+ <s:element minOccurs="0" maxOccurs="1" name="hresult" type="s:string" />
82
+ <s:element minOccurs="0" maxOccurs="1" name="message" type="s:string" />
83
+ </s:sequence>
84
+ </s:complexType>
85
+ </s:element>
86
+ <s:element name="receiveResponseXMLResponse">
87
+ <s:complexType>
88
+ <s:sequence>
89
+ <s:element minOccurs="1" maxOccurs="1" name="receiveResponseXMLResult" type="s:int" />
90
+ </s:sequence>
91
+ </s:complexType>
92
+ </s:element>
93
+ <s:element name="connectionError">
94
+ <s:complexType>
95
+ <s:sequence>
96
+ <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
97
+ <s:element minOccurs="0" maxOccurs="1" name="hresult" type="s:string" />
98
+ <s:element minOccurs="0" maxOccurs="1" name="message" type="s:string" />
99
+ </s:sequence>
100
+ </s:complexType>
101
+ </s:element>
102
+ <s:element name="connectionErrorResponse">
103
+ <s:complexType>
104
+ <s:sequence>
105
+ <s:element minOccurs="0" maxOccurs="1" name="connectionErrorResult" type="s:string" />
106
+ </s:sequence>
107
+ </s:complexType>
108
+ </s:element>
109
+ <s:element name="getLastError">
110
+ <s:complexType>
111
+ <s:sequence>
112
+ <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
113
+ </s:sequence>
114
+ </s:complexType>
115
+ </s:element>
116
+ <s:element name="getLastErrorResponse">
117
+ <s:complexType>
118
+ <s:sequence>
119
+ <s:element minOccurs="0" maxOccurs="1" name="getLastErrorResult" type="s:string" />
120
+ </s:sequence>
121
+ </s:complexType>
122
+ </s:element>
123
+ <s:element name="closeConnection">
124
+ <s:complexType>
125
+ <s:sequence>
126
+ <s:element minOccurs="0" maxOccurs="1" name="ticket" type="s:string" />
127
+ </s:sequence>
128
+ </s:complexType>
129
+ </s:element>
130
+ <s:element name="closeConnectionResponse">
131
+ <s:complexType>
132
+ <s:sequence>
133
+ <s:element minOccurs="0" maxOccurs="1" name="closeConnectionResult" type="s:string" />
134
+ </s:sequence>
135
+ </s:complexType>
136
+ </s:element>
137
+ </s:schema>
138
+ </wsdl:types>
139
+
140
+ <wsdl:message name="authenticateSoapIn">
141
+ <wsdl:part name="parameters" element="tns:authenticate" />
142
+ </wsdl:message>
143
+ <wsdl:message name="authenticateSoapOut">
144
+ <wsdl:part name="parameters" element="tns:authenticateResponse" />
145
+ </wsdl:message>
146
+
147
+ <!-- added this part -->
148
+ <wsdl:message name="serverVersionSoapIn">
149
+ <wsdl:part name="parameters" element="tns:serverVersion" />
150
+ </wsdl:message>
151
+ <wsdl:message name="serverVersionSoapOut">
152
+ <wsdl:part name="parameters" element="tns:serverVersionResponse" />
153
+ </wsdl:message>
154
+ <wsdl:message name="clientVersionSoapIn">
155
+ <wsdl:part name="parameters" element="tns:clientVersion" />
156
+ </wsdl:message>
157
+ <wsdl:message name="clientVersionSoapOut">
158
+ <wsdl:part name="parameters" element="tns:clientVersionResponse" />
159
+ </wsdl:message>
160
+
161
+
162
+ <wsdl:message name="sendRequestXMLSoapIn">
163
+ <wsdl:part name="parameters" element="tns:sendRequestXML" />
164
+ </wsdl:message>
165
+ <wsdl:message name="sendRequestXMLSoapOut">
166
+ <wsdl:part name="parameters" element="tns:sendRequestXMLResponse" />
167
+ </wsdl:message>
168
+ <wsdl:message name="receiveResponseXMLSoapIn">
169
+ <wsdl:part name="parameters" element="tns:receiveResponseXML" />
170
+ </wsdl:message>
171
+ <wsdl:message name="receiveResponseXMLSoapOut">
172
+ <wsdl:part name="parameters" element="tns:receiveResponseXMLResponse" />
173
+ </wsdl:message>
174
+ <wsdl:message name="connectionErrorSoapIn">
175
+ <wsdl:part name="parameters" element="tns:connectionError" />
176
+ </wsdl:message>
177
+ <wsdl:message name="connectionErrorSoapOut">
178
+ <wsdl:part name="parameters" element="tns:connectionErrorResponse" />
179
+ </wsdl:message>
180
+ <wsdl:message name="getLastErrorSoapIn">
181
+ <wsdl:part name="parameters" element="tns:getLastError" />
182
+ </wsdl:message>
183
+ <wsdl:message name="getLastErrorSoapOut">
184
+ <wsdl:part name="parameters" element="tns:getLastErrorResponse" />
185
+ </wsdl:message>
186
+ <wsdl:message name="closeConnectionSoapIn">
187
+ <wsdl:part name="parameters" element="tns:closeConnection" />
188
+ </wsdl:message>
189
+ <wsdl:message name="closeConnectionSoapOut">
190
+ <wsdl:part name="parameters" element="tns:closeConnectionResponse" />
191
+ </wsdl:message>
192
+ <wsdl:portType name="QBWebConnectorSvcSoap">
193
+
194
+ <!-- add this chunk -->
195
+ <wsdl:operation name="serverVersion">
196
+ <wsdl:input message="tns:serverVersionSoapIn" />
197
+ <wsdl:output message="tns:serverVersionSoapOut" />
198
+ </wsdl:operation>
199
+ <wsdl:operation name="clientVersion">
200
+ <wsdl:input message="tns:clientVersionSoapIn" />
201
+ <wsdl:output message="tns:clientVersionSoapOut" />
202
+ </wsdl:operation>
203
+
204
+
205
+ <wsdl:operation name="authenticate">
206
+ <wsdl:input message="tns:authenticateSoapIn" />
207
+ <wsdl:output message="tns:authenticateSoapOut" />
208
+ </wsdl:operation>
209
+ <wsdl:operation name="sendRequestXML">
210
+ <wsdl:input message="tns:sendRequestXMLSoapIn" />
211
+ <wsdl:output message="tns:sendRequestXMLSoapOut" />
212
+ </wsdl:operation>
213
+ <wsdl:operation name="receiveResponseXML">
214
+ <wsdl:input message="tns:receiveResponseXMLSoapIn" />
215
+ <wsdl:output message="tns:receiveResponseXMLSoapOut" />
216
+ </wsdl:operation>
217
+ <wsdl:operation name="connectionError">
218
+ <wsdl:input message="tns:connectionErrorSoapIn" />
219
+ <wsdl:output message="tns:connectionErrorSoapOut" />
220
+ </wsdl:operation>
221
+ <wsdl:operation name="getLastError">
222
+ <wsdl:input message="tns:getLastErrorSoapIn" />
223
+ <wsdl:output message="tns:getLastErrorSoapOut" />
224
+ </wsdl:operation>
225
+ <wsdl:operation name="closeConnection">
226
+ <wsdl:input message="tns:closeConnectionSoapIn" />
227
+ <wsdl:output message="tns:closeConnectionSoapOut" />
228
+ </wsdl:operation>
229
+ </wsdl:portType>
230
+ <wsdl:binding name="QBWebConnectorSvcSoap" type="tns:QBWebConnectorSvcSoap">
231
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
232
+ <!-- this too was added... -->
233
+ <wsdl:operation name="serverVersion">
234
+ <soap:operation soapAction="http://developer.intuit.com/serverVersion" style="document" />
235
+ <wsdl:input>
236
+ <soap:body use="literal" />
237
+ </wsdl:input>
238
+ <wsdl:output>
239
+ <soap:body use="literal" />
240
+ </wsdl:output>
241
+ </wsdl:operation>
242
+ <wsdl:operation name="clientVersion">
243
+ <soap:operation soapAction="http://developer.intuit.com/clientVersion" style="document" />
244
+ <wsdl:input>
245
+ <soap:body use="literal" />
246
+ </wsdl:input>
247
+ <wsdl:output>
248
+ <soap:body use="literal" />
249
+ </wsdl:output>
250
+ </wsdl:operation>
251
+
252
+ <wsdl:operation name="authenticate">
253
+ <soap:operation soapAction="http://developer.intuit.com/authenticate" style="document" />
254
+ <wsdl:input>
255
+ <soap:body use="literal" />
256
+ </wsdl:input>
257
+ <wsdl:output>
258
+ <soap:body use="literal" />
259
+ </wsdl:output>
260
+ </wsdl:operation>
261
+ <wsdl:operation name="sendRequestXML">
262
+ <soap:operation soapAction="http://developer.intuit.com/sendRequestXML" style="document" />
263
+ <wsdl:input>
264
+ <soap:body use="literal" />
265
+ </wsdl:input>
266
+ <wsdl:output>
267
+ <soap:body use="literal" />
268
+ </wsdl:output>
269
+ </wsdl:operation>
270
+ <wsdl:operation name="receiveResponseXML">
271
+ <soap:operation soapAction="http://developer.intuit.com/receiveResponseXML" style="document" />
272
+ <wsdl:input>
273
+ <soap:body use="literal" />
274
+ </wsdl:input>
275
+ <wsdl:output>
276
+ <soap:body use="literal" />
277
+ </wsdl:output>
278
+ </wsdl:operation>
279
+ <wsdl:operation name="connectionError">
280
+ <soap:operation soapAction="http://developer.intuit.com/connectionError" style="document" />
281
+ <wsdl:input>
282
+ <soap:body use="literal" />
283
+ </wsdl:input>
284
+ <wsdl:output>
285
+ <soap:body use="literal" />
286
+ </wsdl:output>
287
+ </wsdl:operation>
288
+ <wsdl:operation name="getLastError">
289
+ <soap:operation soapAction="http://developer.intuit.com/getLastError" style="document" />
290
+ <wsdl:input>
291
+ <soap:body use="literal" />
292
+ </wsdl:input>
293
+ <wsdl:output>
294
+ <soap:body use="literal" />
295
+ </wsdl:output>
296
+ </wsdl:operation>
297
+ <wsdl:operation name="closeConnection">
298
+ <soap:operation soapAction="http://developer.intuit.com/closeConnection" style="document" />
299
+ <wsdl:input>
300
+ <soap:body use="literal" />
301
+ </wsdl:input>
302
+ <wsdl:output>
303
+ <soap:body use="literal" />
304
+ </wsdl:output>
305
+ </wsdl:operation>
306
+ </wsdl:binding>
307
+ <wsdl:service name="QBWebConnectorSvc">
308
+ <wsdl:port name="QBWebConnectorSvcSoap" binding="tns:QBWebConnectorSvcSoap">
309
+ <soap:address location="https://idn.vogelfam.net/QBMSDonorSample/QBWebConnectorSvc.asmx" />
310
+ </wsdl:port>
311
+ </wsdl:service>
312
+ </wsdl:definitions>