savon-ng-1.6 2.4.0

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.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +15 -0
  4. data/.yardopts +6 -0
  5. data/CHANGELOG.md +1024 -0
  6. data/CONTRIBUTING.md +46 -0
  7. data/Gemfile +8 -0
  8. data/LICENSE +20 -0
  9. data/README.md +81 -0
  10. data/Rakefile +14 -0
  11. data/donate.png +0 -0
  12. data/lib/savon/block_interface.rb +26 -0
  13. data/lib/savon/builder.rb +166 -0
  14. data/lib/savon/client.rb +88 -0
  15. data/lib/savon/core_ext/string.rb +29 -0
  16. data/lib/savon/header.rb +70 -0
  17. data/lib/savon/http_error.rb +27 -0
  18. data/lib/savon/log_message.rb +48 -0
  19. data/lib/savon/message.rb +36 -0
  20. data/lib/savon/mock/expectation.rb +71 -0
  21. data/lib/savon/mock/spec_helper.rb +62 -0
  22. data/lib/savon/mock.rb +5 -0
  23. data/lib/savon/model.rb +80 -0
  24. data/lib/savon/operation.rb +127 -0
  25. data/lib/savon/options.rb +330 -0
  26. data/lib/savon/qualified_message.rb +49 -0
  27. data/lib/savon/request.rb +89 -0
  28. data/lib/savon/request_logger.rb +48 -0
  29. data/lib/savon/response.rb +112 -0
  30. data/lib/savon/soap_fault.rb +48 -0
  31. data/lib/savon/version.rb +5 -0
  32. data/lib/savon.rb +27 -0
  33. data/savon.gemspec +47 -0
  34. data/spec/fixtures/gzip/message.gz +0 -0
  35. data/spec/fixtures/response/another_soap_fault.xml +14 -0
  36. data/spec/fixtures/response/authentication.xml +14 -0
  37. data/spec/fixtures/response/header.xml +13 -0
  38. data/spec/fixtures/response/list.xml +18 -0
  39. data/spec/fixtures/response/multi_ref.xml +39 -0
  40. data/spec/fixtures/response/soap_fault.xml +8 -0
  41. data/spec/fixtures/response/soap_fault12.xml +18 -0
  42. data/spec/fixtures/response/taxcloud.xml +1 -0
  43. data/spec/fixtures/ssl/client_cert.pem +16 -0
  44. data/spec/fixtures/ssl/client_encrypted_key.pem +30 -0
  45. data/spec/fixtures/ssl/client_encrypted_key_cert.pem +24 -0
  46. data/spec/fixtures/ssl/client_key.pem +15 -0
  47. data/spec/fixtures/wsdl/authentication.xml +63 -0
  48. data/spec/fixtures/wsdl/betfair.xml +2981 -0
  49. data/spec/fixtures/wsdl/edialog.xml +15416 -0
  50. data/spec/fixtures/wsdl/interhome.xml +2137 -0
  51. data/spec/fixtures/wsdl/lower_camel.xml +52 -0
  52. data/spec/fixtures/wsdl/multiple_namespaces.xml +92 -0
  53. data/spec/fixtures/wsdl/multiple_types.xml +60 -0
  54. data/spec/fixtures/wsdl/taxcloud.xml +934 -0
  55. data/spec/fixtures/wsdl/team_software.xml +1 -0
  56. data/spec/fixtures/wsdl/vies.xml +176 -0
  57. data/spec/fixtures/wsdl/wasmuth.xml +153 -0
  58. data/spec/integration/email_example_spec.rb +32 -0
  59. data/spec/integration/ratp_example_spec.rb +28 -0
  60. data/spec/integration/stockquote_example_spec.rb +28 -0
  61. data/spec/integration/support/application.rb +82 -0
  62. data/spec/integration/support/server.rb +84 -0
  63. data/spec/integration/temperature_example_spec.rb +46 -0
  64. data/spec/integration/zipcode_example_spec.rb +42 -0
  65. data/spec/savon/builder_spec.rb +86 -0
  66. data/spec/savon/client_spec.rb +193 -0
  67. data/spec/savon/core_ext/string_spec.rb +37 -0
  68. data/spec/savon/features/message_tag_spec.rb +61 -0
  69. data/spec/savon/http_error_spec.rb +49 -0
  70. data/spec/savon/log_message_spec.rb +33 -0
  71. data/spec/savon/message_spec.rb +40 -0
  72. data/spec/savon/mock_spec.rb +157 -0
  73. data/spec/savon/model_spec.rb +154 -0
  74. data/spec/savon/observers_spec.rb +92 -0
  75. data/spec/savon/operation_spec.rb +211 -0
  76. data/spec/savon/options_spec.rb +772 -0
  77. data/spec/savon/request_spec.rb +493 -0
  78. data/spec/savon/response_spec.rb +258 -0
  79. data/spec/savon/soap_fault_spec.rb +126 -0
  80. data/spec/spec_helper.rb +30 -0
  81. data/spec/support/endpoint.rb +25 -0
  82. data/spec/support/fixture.rb +39 -0
  83. data/spec/support/integration.rb +9 -0
  84. data/spec/support/stdout.rb +25 -0
  85. metadata +308 -0
@@ -0,0 +1,49 @@
1
+ require "gyoku"
2
+
3
+ module Savon
4
+ class QualifiedMessage
5
+
6
+ def initialize(types, used_namespaces, key_converter)
7
+ @types = types
8
+ @used_namespaces = used_namespaces
9
+ @key_converter = key_converter
10
+ end
11
+
12
+ def to_hash(hash, path)
13
+ return unless hash
14
+ return hash.map { |value| to_hash(value, path) } if hash.kind_of?(Array)
15
+ return hash.to_s unless hash.kind_of? Hash
16
+
17
+ hash.inject({}) do |newhash, (key, value)|
18
+ if key == :order!
19
+ add_namespaces_to_values(value, path)
20
+ newhash.merge(key => value)
21
+ else
22
+ translated_key = Gyoku.xml_tag(key, :key_converter => @key_converter).to_s
23
+ newpath = path + [translated_key]
24
+
25
+ if @used_namespaces[newpath]
26
+ newhash.merge(
27
+ "#{@used_namespaces[newpath]}:#{translated_key}" =>
28
+ to_hash(value, @types[newpath] ? [@types[newpath]] : newpath)
29
+ )
30
+ else
31
+ newhash.merge(translated_key => value)
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def add_namespaces_to_values(values, path)
40
+ values.collect! { |value|
41
+ camelcased_value = Gyoku.xml_tag(value, :key_converter => @key_converter)
42
+ namespace_path = path + [camelcased_value.to_s]
43
+ namespace = @used_namespaces[namespace_path]
44
+ "#{namespace.blank? ? '' : namespace + ":"}#{camelcased_value}"
45
+ }
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,89 @@
1
+ require "httpi"
2
+
3
+ module Savon
4
+ class HTTPRequest
5
+
6
+ def initialize(globals, http_request = nil)
7
+ @globals = globals
8
+ @http_request = http_request || HTTPI::Request.new
9
+ end
10
+
11
+ def build
12
+ @http_request
13
+ end
14
+
15
+ private
16
+
17
+ def configure_proxy
18
+ @http_request.proxy = @globals[:proxy] if @globals.include? :proxy
19
+ end
20
+
21
+ def configure_timeouts
22
+ @http_request.open_timeout = @globals[:open_timeout] if @globals.include? :open_timeout
23
+ @http_request.read_timeout = @globals[:read_timeout] if @globals.include? :read_timeout
24
+ end
25
+
26
+ def configure_ssl
27
+ @http_request.auth.ssl.ssl_version = @globals[:ssl_version] if @globals.include? :ssl_version
28
+ @http_request.auth.ssl.verify_mode = @globals[:ssl_verify_mode] if @globals.include? :ssl_verify_mode
29
+
30
+ @http_request.auth.ssl.cert_key_file = @globals[:ssl_cert_key_file] if @globals.include? :ssl_cert_key_file
31
+ @http_request.auth.ssl.cert_file = @globals[:ssl_cert_file] if @globals.include? :ssl_cert_file
32
+ @http_request.auth.ssl.ca_cert_file = @globals[:ssl_ca_cert_file] if @globals.include? :ssl_ca_cert_file
33
+
34
+ @http_request.auth.ssl.cert_key_password = @globals[:ssl_cert_key_password] if @globals.include? :ssl_cert_key_password
35
+ end
36
+
37
+ def configure_auth
38
+ @http_request.auth.basic(*@globals[:basic_auth]) if @globals.include? :basic_auth
39
+ @http_request.auth.digest(*@globals[:digest_auth]) if @globals.include? :digest_auth
40
+ @http_request.auth.ntlm(*@globals[:ntlm]) if @globals.include? :ntlm
41
+ end
42
+
43
+ end
44
+
45
+ class WSDLRequest < HTTPRequest
46
+
47
+ def build
48
+ configure_proxy
49
+ configure_timeouts
50
+ configure_ssl
51
+ configure_auth
52
+
53
+ @http_request
54
+ end
55
+
56
+ end
57
+
58
+ class SOAPRequest < HTTPRequest
59
+
60
+ CONTENT_TYPE = {
61
+ 1 => "text/xml;charset=%s",
62
+ 2 => "application/soap+xml;charset=%s"
63
+ }
64
+
65
+ def build(options = {})
66
+ configure_proxy
67
+ configure_cookies options[:cookies]
68
+ configure_timeouts
69
+ configure_headers options[:soap_action]
70
+ configure_ssl
71
+ configure_auth
72
+
73
+ @http_request
74
+ end
75
+
76
+ private
77
+
78
+ def configure_cookies(cookies)
79
+ @http_request.set_cookies(cookies) if cookies
80
+ end
81
+
82
+ def configure_headers(soap_action)
83
+ @http_request.headers = @globals[:headers] if @globals.include? :headers
84
+ @http_request.headers["SOAPAction"] ||= %{"#{soap_action}"} if soap_action
85
+ @http_request.headers["Content-Type"] ||= CONTENT_TYPE[@globals[:soap_version]] % @globals[:encoding]
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,48 @@
1
+ require "savon/log_message"
2
+
3
+ module Savon
4
+ class RequestLogger
5
+
6
+ def initialize(globals)
7
+ @globals = globals
8
+ end
9
+
10
+ def log(request, &http_request)
11
+ log_request(request) if log?
12
+ response = http_request.call
13
+ log_response(response) if log?
14
+
15
+ response
16
+ end
17
+
18
+ def logger
19
+ @globals[:logger]
20
+ end
21
+
22
+ def log?
23
+ @globals[:log]
24
+ end
25
+
26
+ private
27
+
28
+ def log_request(request)
29
+ logger.info "SOAP request: #{request.url}"
30
+ logger.info headers_to_log(request.headers)
31
+ logger.debug body_to_log(request.body)
32
+ end
33
+
34
+ def log_response(response)
35
+ logger.info "SOAP response (status #{response.code})"
36
+ logger.debug body_to_log(response.body)
37
+ end
38
+
39
+ def headers_to_log(headers)
40
+ headers.map { |key, value| "#{key}: #{value}" }.join(", ")
41
+ end
42
+
43
+ def body_to_log(body)
44
+ LogMessage.new(body, @globals[:filters], @globals[:pretty_print_xml]).to_s
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,112 @@
1
+ require "nori"
2
+ require "savon/soap_fault"
3
+ require "savon/http_error"
4
+
5
+ module Savon
6
+ class Response
7
+
8
+ def initialize(http, globals, locals)
9
+ @http = http
10
+ @globals = globals
11
+ @locals = locals
12
+
13
+ build_soap_and_http_errors!
14
+ raise_soap_and_http_errors! if @globals[:raise_errors]
15
+ end
16
+
17
+ attr_reader :http, :globals, :locals, :soap_fault, :http_error
18
+
19
+ def success?
20
+ !soap_fault? && !http_error?
21
+ end
22
+ alias_method :successful?, :success?
23
+
24
+ def soap_fault?
25
+ SOAPFault.present? @http
26
+ end
27
+
28
+ def http_error?
29
+ HTTPError.present? @http
30
+ end
31
+
32
+ def header
33
+ find('Header')
34
+ end
35
+
36
+ def body
37
+ find('Body')
38
+ end
39
+
40
+ alias_method :to_hash, :body
41
+
42
+ def to_array(*path)
43
+ result = path.inject body do |memo, key|
44
+ return [] if memo[key].nil?
45
+ memo[key]
46
+ end
47
+
48
+ result.kind_of?(Array) ? result.compact : [result].compact
49
+ end
50
+
51
+ def hash
52
+ @hash ||= nori.parse(xml)
53
+ end
54
+
55
+ def xml
56
+ @http.body
57
+ end
58
+
59
+ alias_method :to_xml, :xml
60
+ alias_method :to_s, :xml
61
+
62
+ def doc
63
+ @doc ||= Nokogiri.XML(xml)
64
+ end
65
+
66
+ def xpath(path, namespaces = nil)
67
+ doc.xpath(path, namespaces || xml_namespaces)
68
+ end
69
+
70
+ def find(*path)
71
+ envelope = nori.find(hash, 'Envelope')
72
+ raise_invalid_response_error! unless envelope
73
+
74
+ nori.find(envelope, *path)
75
+ end
76
+
77
+ private
78
+
79
+ def build_soap_and_http_errors!
80
+ @soap_fault = SOAPFault.new(@http, nori) if soap_fault?
81
+ @http_error = HTTPError.new(@http) if http_error?
82
+ end
83
+
84
+ def raise_soap_and_http_errors!
85
+ raise soap_fault if soap_fault?
86
+ raise http_error if http_error?
87
+ end
88
+
89
+ def raise_invalid_response_error!
90
+ raise InvalidResponseError, "Unable to parse response body:\n" + xml.inspect
91
+ end
92
+
93
+ def xml_namespaces
94
+ @xml_namespaces ||= doc.collect_namespaces
95
+ end
96
+
97
+ def nori
98
+ return @nori if @nori
99
+
100
+ nori_options = {
101
+ :strip_namespaces => @globals[:strip_namespaces],
102
+ :convert_tags_to => @globals[:convert_response_tags_to],
103
+ :advanced_typecasting => @locals[:advanced_typecasting],
104
+ :parser => @locals[:response_parser]
105
+ }
106
+
107
+ non_nil_nori_options = nori_options.reject { |_, value| value.nil? }
108
+ @nori = Nori.new(non_nil_nori_options)
109
+ end
110
+
111
+ end
112
+ end
@@ -0,0 +1,48 @@
1
+ require "savon"
2
+
3
+ module Savon
4
+ class SOAPFault < Error
5
+
6
+ def self.present?(http)
7
+ fault_node = http.body.include?("Fault>")
8
+ soap1_fault = http.body.include?("faultcode>") && http.body.include?("faultstring>")
9
+ soap2_fault = http.body.include?("Code>") && http.body.include?("Reason>")
10
+
11
+ fault_node && (soap1_fault || soap2_fault)
12
+ end
13
+
14
+ def initialize(http, nori)
15
+ @http = http
16
+ @nori = nori
17
+ end
18
+
19
+ attr_reader :http, :nori
20
+
21
+ def to_s
22
+ fault = nori.find(to_hash, 'Fault')
23
+ message_by_version(fault)
24
+ end
25
+
26
+ def to_hash
27
+ parsed = nori.parse(@http.body)
28
+ nori.find(parsed, 'Envelope', 'Body')
29
+ end
30
+
31
+ private
32
+
33
+ def message_by_version(fault)
34
+ if nori.find(fault, 'faultcode')
35
+ code = nori.find(fault, 'faultcode')
36
+ text = nori.find(fault, 'faultstring')
37
+
38
+ "(#{code}) #{text}"
39
+ elsif nori.find(fault, 'Code')
40
+ code = nori.find(fault, 'Code', 'Value')
41
+ text = nori.find(fault, 'Reason', 'Text')
42
+
43
+ "(#{code}) #{text}"
44
+ end
45
+ end
46
+
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ module Savon
2
+
3
+ VERSION = "2.4.0"
4
+
5
+ end
data/lib/savon.rb ADDED
@@ -0,0 +1,27 @@
1
+ module Savon
2
+
3
+ Error = Class.new(RuntimeError)
4
+ InitializationError = Class.new(Error)
5
+ UnknownOptionError = Class.new(Error)
6
+ UnknownOperationError = Class.new(Error)
7
+ InvalidResponseError = Class.new(Error)
8
+
9
+ def self.client(globals = {}, &block)
10
+ Client.new(globals, &block)
11
+ end
12
+
13
+ def self.observers
14
+ @observers ||= []
15
+ end
16
+
17
+ def self.notify_observers(operation_name, builder, globals, locals)
18
+ observers.inject(nil) do |response, observer|
19
+ observer.notify(operation_name, builder, globals, locals)
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ require "savon/version"
26
+ require "savon/client"
27
+ require "savon/model"
data/savon.gemspec ADDED
@@ -0,0 +1,47 @@
1
+ # -*- encoding : utf-8 -*-
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $:.unshift lib unless $:.include? lib
4
+
5
+ require "savon/version"
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "savon-ng-1.6"
9
+ s.version = Savon::VERSION
10
+ s.authors = "Rafael Reggiani Manzo"
11
+ s.email = "rr.manzo@gmail.com"
12
+ s.homepage = "http://savonrb.com"
13
+ s.summary = "This a fork from Daniel Harrington's savon with nokogiri updated to 1.6"
14
+ s.description = s.summary
15
+
16
+ s.rubyforge_project = s.name
17
+ s.license = 'MIT'
18
+
19
+ s.add_dependency "nori", "~> 2.3.0"
20
+
21
+ s.add_dependency "nokogiri", ">= 1.4.0"
22
+ s.add_dependency "httpi", "~> 2.1.0"
23
+ s.add_dependency "wasabi-ng-1.6", "~> 3.3.0"
24
+ s.add_dependency "akami", "~> 1.2.0"
25
+ s.add_dependency "gyoku", "~> 1.1.0"
26
+
27
+ s.add_dependency "builder", ">= 2.1.2"
28
+
29
+ s.add_development_dependency "rack"
30
+ s.add_development_dependency "puma", "2.0.0.b4"
31
+
32
+ s.add_development_dependency "rake", "~> 10.1"
33
+ s.add_development_dependency "rspec", "~> 2.14"
34
+ s.add_development_dependency "mocha", "~> 0.14"
35
+ s.add_development_dependency "json", "~> 1.7"
36
+
37
+ ignores = File.readlines(".gitignore").grep(/\S+/).map(&:chomp)
38
+ dotfiles = %w[.gitignore .travis.yml .yardopts]
39
+
40
+ all_files_without_ignores = Dir["**/*"].reject { |f|
41
+ File.directory?(f) || ignores.any? { |i| File.fnmatch(i, f) }
42
+ }
43
+
44
+ s.files = (all_files_without_ignores + dotfiles).sort
45
+
46
+ s.require_path = "lib"
47
+ end
Binary file
@@ -0,0 +1,14 @@
1
+ <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
2
+ xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
3
+ xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
4
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
6
+ <SOAP-ENV:Body>
7
+ <SOAP-ENV:Fault>
8
+ <faultcode>ERR_NO_SESSION</faultcode>
9
+ <faultfactor>doGetItemsInfo - Wrong session</faultfactor>
10
+ <faultstring>Wrong session message</faultstring>
11
+ <detail><soapVal><ERRNO xsi:type="xsd:string">80:1289245853:55</ERRNO></soapVal></detail>
12
+ </SOAP-ENV:Fault>
13
+ </SOAP-ENV:Body>
14
+ </SOAP-ENV:Envelope>
@@ -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,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
3
+ <soap:Header xmlns="http://webservices.somewhere.com/definitions">
4
+ <SessionNumber>ABCD1234</SessionNumber>
5
+ </soap:Header>
6
+ <soap:Body>
7
+ <AuthenticateReply xmlns="http://xml.somewhere.com/ABCD">
8
+ <processStatus>
9
+ <statusCode>P</statusCode>
10
+ </processStatus>
11
+ </AuthenticateReply>
12
+ </soap:Body>
13
+ </soap:Envelope>
@@ -0,0 +1,18 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2
+ <soapenv:Body>
3
+ <MultiNamespacedEntryResponse xmlns="http://www.example.com/BusinessRulesEngine/xsd">
4
+ <history>
5
+ <ns10:case xmlns:ns10="http://www.example.com/Common/xsd">
6
+ <ns10:logTime>2010-09-21T18:22:01.558+10:00</ns10:logTime>
7
+ <ns10:logType>Notes Log</ns10:logType>
8
+ <ns10:logText>test</ns10:logText>
9
+ </ns10:case>
10
+ <ns11:case xmlns:ns11="http://www.example.com/Common/xsd">
11
+ <ns11:logTime>2010-09-21T18:22:07.038+10:00</ns11:logTime>
12
+ <ns11:logType>Notes Log</ns11:logType>
13
+ <ns11:logText>another test</ns11:logText>
14
+ </ns11:case>
15
+ </history>
16
+ </MultiNamespacedEntryResponse>
17
+ </soapenv:Body>
18
+ </soapenv:Envelope>
@@ -0,0 +1,39 @@
1
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2
+ <soapenv:Body>
3
+ <ns1:listResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://ws.example.com">
4
+ <listReturn soapenc:arrayType="ns2:HistoryEntry[3]" xsi:type="soapenc:Array" xmlns:ns2="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
5
+ <listReturn href="#id0"/>
6
+ <listReturn href="#id1"/>
7
+ <listReturn href="#id2"/>
8
+ </listReturn>
9
+ </ns1:listResponse>
10
+ <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:HistoryEntry" xmlns:ns5="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
11
+ <date xsi:type="xsd:dateTime">2009-09-22T13:47:23.000Z</date>
12
+ <location xsi:type="soapenc:string">Archive</location>
13
+ <mailId href="#id9"/>
14
+ <referenceId href="#id8"/>
15
+ <state xsi:type="soapenc:string">Original</state>
16
+ <subject xsi:type="soapenc:string">Mail from 09-22-2009: Misc</subject>
17
+ </multiRef>
18
+ <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns6:HistoryEntry" xmlns:ns6="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
19
+ <date xsi:type="xsd:dateTime">2009-04-30T06:38:34.000Z</date>
20
+ <location xsi:type="soapenc:string">Archive</location>
21
+ <mailId href="#id10"/>
22
+ <referenceId href="#id8"/>
23
+ <state xsi:type="soapenc:string">Original</state>
24
+ <subject xsi:type="soapenc:string">Mail from 04-29-2009: Technical support</subject>
25
+ </multiRef>
26
+ <multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns7:HistoryEntry" xmlns:ns7="http://ws.example.com/ws/history" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
27
+ <date xsi:type="xsd:dateTime">2009-12-18T15:43:21.000Z</date>
28
+ <location xsi:type="soapenc:string">Archive</location>
29
+ <mailId href="#id11"/>
30
+ <referenceId href="#id8"/>
31
+ <state xsi:type="soapenc:string">Original</state>
32
+ <subject xsi:type="soapenc:string">Mail from 12-17-2009: Misc</subject>
33
+ </multiRef>
34
+ <multiRef id="id11" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">972219</multiRef>
35
+ <multiRef id="id10" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">708021</multiRef>
36
+ <multiRef id="id8" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>
37
+ <multiRef id="id9" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:int" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">855763</multiRef>
38
+ </soapenv:Body>
39
+ </soapenv:Envelope>
@@ -0,0 +1,8 @@
1
+ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
2
+ <soap:Body>
3
+ <soap:Fault>
4
+ <faultcode>soap:Server</faultcode>
5
+ <faultstring>Fault occurred while processing.</faultstring>
6
+ </soap:Fault>
7
+ </soap:Body>
8
+ </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 @@
1
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><LookupResponse xmlns="http://taxcloud.net"><LookupResult><ResponseType>Error</ResponseType><Messages><ResponseMessage><ResponseType>Error</ResponseType><Message>Invalid apiLoginID and/or apiKey</Message></ResponseMessage></Messages><CartItemsResponse /></LookupResult></LookupResponse></soap:Body></soap:Envelope>
@@ -0,0 +1,16 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICbTCCAdYCCQDC4v8d04615DANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJE
3
+ RTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzEOMAwGA1UEChMF
4
+ aHR0cGkxFDASBgNVBAMTC2V4YW1wbGUuY29tMSIwIAYJKoZIhvcNAQkBFhNleGFt
5
+ cGxlQGV4YW1wbGUuY29tMB4XDTEwMTAxNTE4NTg0N1oXDTExMTAxNTE4NTg0N1ow
6
+ ezELMAkGA1UEBhMCREUxEDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1
7
+ cmcxDjAMBgNVBAoTBWh0dHBpMRQwEgYDVQQDEwtleGFtcGxlLmNvbTEiMCAGCSqG
8
+ SIb3DQEJARYTZXhhbXBsZUBleGFtcGxlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOB
9
+ jQAwgYkCgYEAvJiaojIFQAbFczXkBmjxpxra9LbQm0VIESFSl8uBSjmG/gmCBwKg
10
+ 8O94P3tAjDNClC+fEqBLE37KH4qe76yw7upgRruP5jQzUEL1yCaVtA/DoqgaCxZy
11
+ 7VhB2A3f71Zw6kQPt3BOME68fnGsTX65x9XAawCGzGmJSk/Z6wvml1MCAwEAATAN
12
+ BgkqhkiG9w0BAQUFAAOBgQCxOyni9LOKf17vUKVG8Y4TBzRYwm8/hlEdVEU3JKG0
13
+ /aCCwIJLHl+z+3L4r81IN3+YKrHilqx9K0emboJbBRQklYsv/AE+J44Bq3llRiro
14
+ 0e5zwH61jb1j+kxhcxoGiiy8R7hYho24ljuMgFGqtK3kZSP/t9tBLLVp+ItWQ6xX
15
+ 5g==
16
+ -----END CERTIFICATE-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN ENCRYPTED PRIVATE KEY-----
2
+ MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIi+Fi+FH7OtACAggA
3
+ MBQGCCqGSIb3DQMHBAivzaRTYRNk4QSCBMhnQ7/NN0ljkAwADHknQi4dgbBU+FV+
4
+ vY+ypRCTLp7UongPMDS+pC6TyOFGeHz4Yri3UvmEIN5DlBlAfjPI6+lBswjOIrpw
5
+ 6CaZXrX4oefjh73c2OcQlYKw9w03ppfmfO0v1t6oPLiK6M8sNQ5lgb8d9eG3r6Dp
6
+ LqIp4I6WeGcoXIpVYE35sz6wmLQ2Q626KY/5BPVAgMVG3K1g1haxZIAQBQE63cqz
7
+ JK3IUiG2r6Q6vOyZ+Iz9KolEf3RVvW/RgOrb0dLbbLkDOL8G6dXDgWEeYtqGZpPR
8
+ BktU2Kf7lr0BAgbI3eLubmIufhonoV4VkHVYu1ZSACwSl2HEqDl5aF5hP3wOtfS5
9
+ Ls62Z1ATO/24dG1oI8xL3YCeTzoa1Lmyeh+HFRncoVU5CdQgyzY9d5yr1x70AwN+
10
+ MpVwd0+WGyESiRVd4dN8n99SY/bTaYJxv8P+wOrbjld9Q3mF3vxx6Nkkfboai1wD
11
+ bY9i/B5/TZip5FBnZbJiYakc+yoB6Bf1UuIZA9T9EIY2K7VhTeuEjTTqJVf7dp/C
12
+ ZqVSNCHO3eAUMByrshznw2YCia8Q1VAXgIbnZ8RvUxxIZVUDTxuWPkBJkcrmMgKt
13
+ GvD2YYIOIuFwTLCFBTlcXNl8kNYc9VRAnK7efi9xrzINod0VSV5hj1PYT4e2khnS
14
+ 4cngMTbbNwWP8Rg7pSxzwWIwc8Zkytde5gnfkBFv+g8o+JRM2ZB3wkiUhEkf0Vht
15
+ gl3K9LFqdqN+EsRjXR/a16sVK3Uer7zcy/NLzvo/rF0YKRmb+apDIFO/vtCX9qyH
16
+ +pBofVO+RNb2T2ZY1iSvyjv/d7nNXRnLArecralQjekh+AKIBsl5R0nsSnQu6ydn
17
+ yDteKDuOPnVl4qQowVbmGg7juHW9j4u98H7cW4RN/txegG1J7gbFFdl2bjYQ/PGZ
18
+ iAG53QvjmvRRaiPCNOB3PYm1yO/1vCPAKlOeBYywF53BSxCDx9OjP0eXROdQGiZV
19
+ XEkDqf742R9/8Fy1ETcriEzRVWv4nSRmB+yfMfHcTZZiJnEF9RUYQVxBVfpwBi8t
20
+ I8N46L2iNeY4itbN8Ke3U3EfntdoZMNI1uN/haDmLFuRuzZIBkSl3YsnsDJXaT5P
21
+ KjPPiZWkxsC3KUYeisefjNHonkM6JXqAy9ElyWrjSPhioMLTy3Qwus8NPGLWkMfI
22
+ bpy7Z63xRf9tifXoANLOqC/VVXOCn4m/eEUAMi0EQZ7QbysopFigiri/MFidXf90
23
+ aIUMiPmCTzLDBJfHozyalMVf3aJFbDJdlAmFtasAP1aPgqReAb9s+6U3wkE8VtGB
24
+ rneBPhejj9FzrWMludgPLDRvfzr6/0nG2GC7XbOnKPd0RbKFtZaJuT18Jhil5Bwb
25
+ S2MBrUnxMmOge9N5ZIyzXk+lPFRMkHmY64h+P/Op9w8tVYCFlj4HjAboVpJAGIq4
26
+ gPgT3Q/0ghRyyBjBrmSDuk+/1s7qc/lWUONFAJaSCRdhpM9I8il5QYHPM6Z9JCg+
27
+ PrfHftP+bU0xht7mVI5ew1OjWTZEym0/ALEyqddLz0qFYejKSemx8EMze8cN2wEE
28
+ OTAqyVBLo+7HJ2FbIXMgRNSc4P77jmeEG0/4WsreMOeI1/6nOiwqvipuLY9ojc9v
29
+ TGQ=
30
+ -----END ENCRYPTED PRIVATE KEY-----
@@ -0,0 +1,24 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEBTCCAu2gAwIBAgIJAKoJLHwFIyVbMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD
3
+ VQQGEwJVUzERMA8GA1UECAwIVmlyZ2luaWExEzARBgNVBAcMCkFsZXhhbmRyaWEx
4
+ GDAWBgNVBAoMD1Rlc3RpbmcgQ28sIExMQzEQMA4GA1UECwwHVGVzdGluZzEUMBIG
5
+ A1UEAwwLZXhhbXBsZS5jb20xHzAdBgkqhkiG9w0BCQEWEHRlc3RAZXhhbXBsZS5j
6
+ b20wHhcNMTMwMTI1MTUwNDEwWhcNNDMwMTE4MTUwNDEwWjCBmDELMAkGA1UEBhMC
7
+ VVMxETAPBgNVBAgMCFZpcmdpbmlhMRMwEQYDVQQHDApBbGV4YW5kcmlhMRgwFgYD
8
+ VQQKDA9UZXN0aW5nIENvLCBMTEMxEDAOBgNVBAsMB1Rlc3RpbmcxFDASBgNVBAMM
9
+ C2V4YW1wbGUuY29tMR8wHQYJKoZIhvcNAQkBFhB0ZXN0QGV4YW1wbGUuY29tMIIB
10
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4gYiV5ufeedy/paVEJ9eJAZo
11
+ t3zFO+9UJzrIFWGhDdTB8AwX6ZE3koKV105i3nRKN+I6dS6+7APB607CqTqdzuqa
12
+ /5qLnV2d73BuTAZabeClE4/8HXsDoQH42KcPQfVQ/nCuTPjuGUEUqIWVFpwKcZmV
13
+ UP82Ezf31fOqtzVI6cSgOwWSflgFFdKRyCk0R1eNznRj2rvfYtypIplV715d1Qqk
14
+ k+XXmMIWIobNT/utgf6n39e89VPzu9EZ5vSpCflWvCkeAnjavWLD/MJktRJqQqlx
15
+ dFTWvzIxYAhJR6M+zB4a6UGDzj6NG1ujrtIdBaK1Jq6iXO4WDryRMs8RPF0UmwID
16
+ AQABo1AwTjAdBgNVHQ4EFgQUjEykvRbAg/ju1UIvMuozlXzKRpYwHwYDVR0jBBgw
17
+ FoAUjEykvRbAg/ju1UIvMuozlXzKRpYwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0B
18
+ AQUFAAOCAQEAhvgvCfZcQlEJwRZMYd1AUOS39fs90Nc5hezaIN1I6bqzW0+ka45Y
19
+ MAxcq7BTOZfVO+DTEAB/IW7yR4Np8mzWSp7gDnyP3wyOX4Lce2lUZQ2fQI71pupf
20
+ tXwpp0bGGgzeUeJK8MFBUiFMUBiJuUMsY2hYIqJ2gYlazMEQp67jV0fdgcgj3nak
21
+ 3cnC9GbHZj/QXwRAlj3dp1CDrMHqvbrCZ6jW7YS/+dVUn24oMadyIX0E88EBgP+l
22
+ Wu4gvzn2nkV8L4Ukcspt7Mqvr/YGlWu/8GPVACUp1AdZH7YJ7ARZE7SVgxR/iNGd
23
+ HJclQ/939s63ZNrnsOR+6qrhcC3c83UARw==
24
+ -----END CERTIFICATE-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXQIBAAKBgQC8mJqiMgVABsVzNeQGaPGnGtr0ttCbRUgRIVKXy4FKOYb+CYIH
3
+ AqDw73g/e0CMM0KUL58SoEsTfsofip7vrLDu6mBGu4/mNDNQQvXIJpW0D8OiqBoL
4
+ FnLtWEHYDd/vVnDqRA+3cE4wTrx+caxNfrnH1cBrAIbMaYlKT9nrC+aXUwIDAQAB
5
+ AoGBAKjrGh1KJg+pwPInA5yGJGMil5h1obRgwmKtcPeKi7u6eOFSDMdQoGwMYKyj
6
+ LTYlt21Yleat8XB9sHW9yAstpq5dU8Id2A4wfbJeaBYpek7u5+QwBENO4UrnulTk
7
+ W0d+jECBVYECn8wCStxfoFcQQRhlGrsOn05379cD8e1odMOJAkEA3o/7CsgXqahG
8
+ 7L1HaWYtKnpFfTS+EQgdGvSahOolByAKTtMA2TUBU1FdlCk+ggWBGorqmWON5Qnm
9
+ 7UDHjOasZQJBANjuPOqa9ubqHccGwHec+72pQz6q5e8f1gf1XPn7EEuXsBzYiMMH
10
+ qEa8zpfF0TmhQ0oWN75Cq709gfVVBfx/bVcCQHan1HN/Ef6FlKqKjxQGQXYwEfQa
11
+ tmpmJP5GAktyeaM+1cAIhp9GvxooeveOtaCkRpxcC48ToIbHrLI4oyrfoHECQQC6
12
+ bAHtmz6TMp5ka2j7Yez1EIC5WiQ/WxyTukgsi5V1YOX35B2jfPEf2SGxTE6BOBSb
13
+ lnxRBPqRpkoIiwiZ9OgBAkBOWKBuHXmXM6wr+0p4KQ/DOeStZiBxUT8rYbX/i1BI
14
+ /9Xo48KNerTx7qoDK+jIslDrilahvcwUz0fuVV7rHy/X
15
+ -----END RSA PRIVATE KEY-----