qbwc 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>