savon 2.2.0 → 2.12.1
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.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +20 -9
- data/CHANGELOG.md +157 -10
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +10 -2
- data/README.md +38 -13
- data/donate.png +0 -0
- data/lib/savon/builder.rb +81 -15
- data/lib/savon/client.rb +6 -2
- data/lib/savon/core_ext/string.rb +0 -1
- data/lib/savon/header.rb +68 -17
- data/lib/savon/log_message.rb +7 -3
- data/lib/savon/message.rb +6 -7
- data/lib/savon/mock/expectation.rb +12 -2
- data/lib/savon/model.rb +4 -0
- data/lib/savon/operation.rb +45 -38
- data/lib/savon/options.rb +149 -22
- data/lib/savon/qualified_message.rb +31 -25
- data/lib/savon/request.rb +24 -4
- data/lib/savon/request_logger.rb +48 -0
- data/lib/savon/response.rb +35 -18
- data/lib/savon/soap_fault.rb +11 -11
- data/lib/savon/version.rb +1 -3
- data/savon.gemspec +12 -11
- data/spec/fixtures/response/empty_soap_fault.xml +13 -0
- data/spec/fixtures/response/f5.xml +39 -0
- data/spec/fixtures/response/no_body.xml +1 -0
- data/spec/fixtures/response/soap_fault_funky.xml +8 -0
- data/spec/fixtures/wsdl/brand.xml +624 -0
- data/spec/fixtures/wsdl/elements_in_types.xml +43 -0
- data/spec/fixtures/wsdl/no_message_tag.xml +1267 -0
- data/spec/fixtures/wsdl/vies.xml +176 -0
- data/spec/integration/centra_spec.rb +67 -0
- data/spec/integration/email_example_spec.rb +1 -1
- data/spec/integration/random_quote_spec.rb +23 -0
- data/spec/integration/stockquote_example_spec.rb +7 -1
- data/spec/integration/support/application.rb +1 -1
- data/spec/integration/zipcode_example_spec.rb +1 -1
- data/spec/savon/builder_spec.rb +50 -0
- data/spec/savon/client_spec.rb +78 -0
- data/spec/savon/core_ext/string_spec.rb +9 -9
- data/spec/savon/features/message_tag_spec.rb +5 -0
- data/spec/savon/http_error_spec.rb +2 -2
- data/spec/savon/log_message_spec.rb +18 -1
- data/spec/savon/message_spec.rb +70 -0
- data/spec/savon/mock_spec.rb +31 -0
- data/spec/savon/model_spec.rb +28 -0
- data/spec/savon/operation_spec.rb +69 -3
- data/spec/savon/options_spec.rb +515 -87
- data/spec/savon/qualified_message_spec.rb +101 -0
- data/spec/savon/request_logger_spec.rb +37 -0
- data/spec/savon/request_spec.rb +85 -10
- data/spec/savon/response_spec.rb +118 -27
- data/spec/savon/soap_fault_spec.rb +25 -5
- data/spec/savon/softlayer_spec.rb +27 -0
- data/spec/spec_helper.rb +5 -2
- data/spec/support/adapters.rb +48 -0
- data/spec/support/integration.rb +1 -1
- metadata +76 -93
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: adc5b65f9ac22024b164dae28b0198a4269b97ab14afac694b946e7cef896d7e
|
4
|
+
data.tar.gz: 13138a12de62757d551a9114b2741501accbbad169a2a00a9dee7f439ad48a78
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 11e3b779fc0376993c46d6ab595e96896a5b0a7ea6f478d3ce93918ebfbd93ff14c4c5ac44c0080ce527c4e30e8615d559b373900acf35b96d2d67b1661b0f28
|
7
|
+
data.tar.gz: 0a8b5bcacf019b33eaafee305aee4f33c1733c26455d446738c28ad14567d69288c0f1cc0226f2e9c5304687a5b49a7011397465c16350b03b31370626014292
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
# https://github.com/travis-ci/travis-ci/wiki/.travis.yml-options
|
2
2
|
language: "ruby"
|
3
|
+
|
3
4
|
script: "bundle exec rake --trace"
|
5
|
+
|
4
6
|
rvm:
|
5
|
-
-
|
6
|
-
-
|
7
|
-
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
- "2.5"
|
8
|
+
- "2.6"
|
9
|
+
- "2.7"
|
10
|
+
|
11
|
+
matrix:
|
12
|
+
include:
|
13
|
+
- name: "JRuby 9.2"
|
14
|
+
rvm: jruby-9.2.12.0
|
15
|
+
jdk: openjdk11
|
16
|
+
env: JAVA_OPTS="--add-opens java.base/java.security.cert=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED"
|
17
|
+
- name: Rubinius
|
18
|
+
rvm: rbx-4
|
19
|
+
dist: trusty
|
20
|
+
allow_failures:
|
21
|
+
- name: Rubinius
|
22
|
+
- name: "JRuby 9.2"
|
23
|
+
fast_finish: true
|
24
|
+
|
14
25
|
notifications:
|
15
26
|
irc: "irc.freenode.org#savon"
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,150 @@
|
|
1
|
+
|
2
|
+
## 2.12.1 (2020-07-05)
|
3
|
+
|
4
|
+
* Fix: [#917](https://github.com/savonrb/savon/pull/917) elementFormDefault="qualified" regression
|
5
|
+
* Fix: [#875](https://github.com/savonrb/savon/pull/875) Fix detecting Soap 1.1 Fault when faultcode and faultstring are empty
|
6
|
+
|
7
|
+
# 2.12.0 (2018-01-16)
|
8
|
+
|
9
|
+
* Drop support for ruby 2.1 and below.
|
10
|
+
* Fix: [#822](https://github.com/savonrb/savon/pull/822) Raise correct error when SOAP envelope only contains a string
|
11
|
+
* Fix: [#833](https://github.com/savonrb/savon/pull/833) Fixes boolean handling regression introduced in 2.11.2
|
12
|
+
* Feature: [#794](https://github.com/savonrb/savon/pull/794), add global option ssl_ciphers.
|
13
|
+
* Feature: [#753](https://github.com/savonrb/savon/pull/753) Add headers configuration to WSDLRequest#build
|
14
|
+
* Feature: [#812](https://github.com/savonrb/savon/pull/812) Allow `proxy` option to be `nil`.
|
15
|
+
* Feature: [#838](https://github.com/savonrb/savon/pull/838) Added ssl_ca_path and ssl_cert_store to globals
|
16
|
+
|
17
|
+
# 2.11.2 (2017-08-03)
|
18
|
+
* Fix: [#676](https://github.com/savonrb/savon/pull/676) Fixes handling of `content!` and `attributes!`
|
19
|
+
* Fix: [#800](https://github.com/savonrb/savon/pull/800) Fix exception calling `SOAPFault#to_s` when http.body is empty
|
20
|
+
* Fix: [#757](https://github.com/savonrb/savon/pull/757) Logging: Use filter without automatic pretty printing
|
21
|
+
* Fix: [#771](https://github.com/savonrb/savon/pull/771) Restore support for cookies when using custom headers
|
22
|
+
* Feature: [#744](https://github.com/savonrb/savon/pull/744) Add support for rpc encoded wsdl
|
23
|
+
* Feature: [#742](https://github.com/savonrb/savon/pull/742) Add support for local request headers
|
24
|
+
* Feature: [#704](https://github.com/savonrb/savon/pull/704) Add possibility to pass attribute delete_namespace_attributes to Nori
|
25
|
+
|
26
|
+
# 2.11.1 (2015-05-27)
|
27
|
+
|
28
|
+
* Replace dependency on [uuid](https://rubygems.org/gems/uuid), using SecureRandom.uuid instead.
|
29
|
+
|
30
|
+
# 2.11.0 (2015-03-31)
|
31
|
+
|
32
|
+
* Formally drop support for 1.8.7.
|
33
|
+
|
34
|
+
# 2.10.1 (2015-03-15)
|
35
|
+
|
36
|
+
* Feature: [#673](https://github.com/savonrb/savon/pull/673) Adds an :unwrap option that is passed to Gyoku.
|
37
|
+
|
38
|
+
# 2.10.0 (2015-03-02)
|
39
|
+
|
40
|
+
* Fix: This reverts a purported "fix" to operation names.
|
41
|
+
|
42
|
+
# 2.9.0 (2015-01-29)
|
43
|
+
|
44
|
+
* Feature: [#655] Wasabi exceptions should be rethrown as Savon errors. This should make it easier to catch errors thrown by Savon::Client.
|
45
|
+
* Feature: [#630] ServiceFaults are correctly identified as Soap Faults.
|
46
|
+
|
47
|
+
# 2.8.0 (2014-11-12)
|
48
|
+
|
49
|
+
* Feature : [#620](https://github.com/savonrb/savon/pull/620) add #build_request method that builds the actual XML request body, but does not submit it. Useful for debugging, possibly.
|
50
|
+
* Fix : Loosened dependencies on Gyoku, Nori, Akami, and other Savon-dependency gems
|
51
|
+
* Feature: [#636](https://github.com/savonrb/savon/pull/636) Set HTTPI.logger when Savon's logger is configured.
|
52
|
+
* Feature: [#639](https://github.com/savonrb/savon/issues/639) Allow setting any SSL version that OpenSSL provides. See [the relevant HTTPI issue](https://github.com/savonrb/httpi/pull/136) for more information.
|
53
|
+
|
54
|
+
# 2.7.2 (2014-09-23)
|
55
|
+
|
56
|
+
Fix : Preserve false values (https://github.com/savonrb/savon/issues/321)
|
57
|
+
|
58
|
+
# 2.7.1 (2014-09-23)
|
59
|
+
|
60
|
+
* Fix : Fix a crash in builder when request headers do not contain WSA headers
|
61
|
+
|
62
|
+
# 2.7.0 (2014-09-23)
|
63
|
+
|
64
|
+
* Feature: Signing requests. Added wsse_signature.
|
65
|
+
```ruby
|
66
|
+
client = Savon.client(wsdl: 'http://service.example.com?wsdl') do
|
67
|
+
wsse_signature Akami::WSSE::Signature.new(Akami::WSSE::Certs.new(:cert_file => 'c.pem', :private_key_file => 'p.pem'))
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
# 2.5.0 (2014-05-03)
|
72
|
+
|
73
|
+
* Feature: [#573](https://github.com/savonrb/savon/pull/573) Add an `all_operations` method to `Savon::Model` that automatically adds all available operations to the model.
|
74
|
+
|
75
|
+
* Feature: [#566](https://github.com/savonrb/savon/pull/566) Allow specifying HTTPI adapter per client.
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
curb_client = Savon.client(wsdl: "http://example.com/service.wsdl", adapter: :curb)
|
79
|
+
|
80
|
+
http_client = Savon.client(wsdl: "http://example.com/service.wsdl", adapter: :httpclient)
|
81
|
+
```
|
82
|
+
|
83
|
+
## 2.4.0 (2014-03-31)
|
84
|
+
|
85
|
+
* Logging is off by default. To enable this behavior, set the :log option to true
|
86
|
+
|
87
|
+
``` ruby
|
88
|
+
client = Savon.client(wsdl: "http://example.com/service.wsdl", log: true)
|
89
|
+
```
|
90
|
+
|
91
|
+
### 2.3.2 (2013-12-09)
|
92
|
+
|
93
|
+
* Fix: [#520](https://github.com/savonrb/savon/issues/520) Fixes a regression in message tags in requests and responses.
|
94
|
+
|
95
|
+
### 2.3.1 (2013-12-05)
|
96
|
+
|
97
|
+
* Removed dependency on Nokogiri <= 1.4 -- This improves support for ruby 1.9.3 and 2.0.0 and officially begins the end of support for ruby 1.8.7
|
98
|
+
See [issue #487](https://github.com/savonrb/savon/issues/487)
|
99
|
+
|
100
|
+
### 2.3.0 (2013-07-27)
|
101
|
+
|
102
|
+
Combined release ticket: [#481](https://github.com/savonrb/savon/issues/481)
|
103
|
+
|
104
|
+
* Feature: [#405](https://github.com/savonrb/savon/issues/405) Improved NTLM support based on HTTPI v2.1.0.
|
105
|
+
|
106
|
+
* Feature: [#424](https://github.com/savonrb/savon/issues/424) Adds support for multipart responses
|
107
|
+
through the updated [savon-multipart](https://github.com/savonrb/savon-multipart) gem. You can now
|
108
|
+
specify `multipart: true` either as a global or local option. Please make sure you have the
|
109
|
+
updated `savon-multipart` gem installed and loaded, as it is not a direct dependency of Savon.
|
110
|
+
|
111
|
+
``` ruby
|
112
|
+
require 'savon'
|
113
|
+
require 'savon-multipart'
|
114
|
+
|
115
|
+
# expect multipart responses for every operation
|
116
|
+
client = Savon.client(wsdl: wsdl, multipart: true)
|
117
|
+
|
118
|
+
# only expect a multipart response for this operation
|
119
|
+
client.call(:my_operation, multipart: true)
|
120
|
+
```
|
121
|
+
|
122
|
+
* Feature: [#470](https://github.com/savonrb/savon/issues/470) Added a local `:soap_header` option
|
123
|
+
to allow setting the SOAP header per request.
|
124
|
+
|
125
|
+
* Feature: [#402](https://github.com/savonrb/savon/issues/402) Makes it possible to create mocks
|
126
|
+
that don't care about the message sent by using `:any` for the `:message` option.
|
127
|
+
|
128
|
+
``` ruby
|
129
|
+
savon.expects(:authenticate).with(message: :any)
|
130
|
+
```
|
131
|
+
|
132
|
+
* Fix: [#450](https://github.com/savonrb/savon/pull/450) Added `Savon::Response#soap_fault`
|
133
|
+
and `Savon::Response#http_error` which were present in version 1.
|
134
|
+
|
135
|
+
* Fix: [#474](https://github.com/savonrb/savon/issues/474) Changed `Savon::Response#header` and
|
136
|
+
`Savon::Response#body` to respect the global `:convert_response_tags_to` and `:strip_namespaces`
|
137
|
+
options and return the expected result instead of raising a `Savon::InvalidResponseError`.
|
138
|
+
|
139
|
+
* Fix: [#461](https://github.com/savonrb/savon/issues/461) Fixed two problems related to namespace
|
140
|
+
qualified messages and the element `:order!`.
|
141
|
+
|
142
|
+
* Fix: [#476](https://github.com/savonrb/savon/issues/476) fixes a problem where the namespace
|
143
|
+
for the message tag was not correctly determined from the WSDL.
|
144
|
+
|
145
|
+
* Fix: [#468](https://github.com/savonrb/savon/issues/468) Changed the dependency on Nokogiri
|
146
|
+
to < 1.6, because Nokogiri 1.6 dropped support for Ruby 1.8.
|
147
|
+
|
1
148
|
### 2.2.0 (2013-04-21)
|
2
149
|
|
3
150
|
* Feature: [#416](https://github.com/savonrb/savon/pull/416) The global `namespace_identifier`
|
@@ -10,14 +157,14 @@
|
|
10
157
|
This is because regardless of whether you're using the Hash or block syntax to pass global
|
11
158
|
or local options, both are just method calls on some options object.
|
12
159
|
|
13
|
-
```
|
160
|
+
``` ruby
|
14
161
|
NoMethodError: undefined method 'wsdk' for #<Savon::GlobalOptions:0x007fed95a55228>
|
15
162
|
```
|
16
163
|
|
17
164
|
As of this change, Savon now catches those errors and raise a `Savon::UnknownOptionError`
|
18
165
|
with a slightly more helpful error message instead.
|
19
166
|
|
20
|
-
```
|
167
|
+
``` ruby
|
21
168
|
Savon::UnknownOptionError:
|
22
169
|
Unknown global option: :wsdk
|
23
170
|
```
|
@@ -192,10 +339,10 @@
|
|
192
339
|
in the document:
|
193
340
|
|
194
341
|
``` xml
|
195
|
-
<env:Envelope
|
196
|
-
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
197
|
-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
198
|
-
xmlns:tns="http://v1_0.ws.auth.order.example.com/"
|
342
|
+
<env:Envelope
|
343
|
+
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
344
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
345
|
+
xmlns:tns="http://v1_0.ws.auth.order.example.com/"
|
199
346
|
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
|
200
347
|
|
201
348
|
<tns:authenticate>
|
@@ -213,7 +360,7 @@
|
|
213
360
|
The global config is cloned when a new client is initialized and gets used instead of the global one.
|
214
361
|
In addition, for `Savon::Model` classes, the config is cloned per class.
|
215
362
|
|
216
|
-
Closes [#84](https://github.com/savonrb/savon/issues/84) by allowing one logger per client and
|
363
|
+
Closes [#84](https://github.com/savonrb/savon/issues/84) by allowing one logger per client and
|
217
364
|
[#270](https://github.com/savonrb/savon/issues/270) by allowing to specify error handling per client.
|
218
365
|
|
219
366
|
* Feature: Added an option to pretty print XML in log messages. Closes [#256](https://github.com/savonrb/savon/issues/256)
|
@@ -903,7 +1050,7 @@ Pay attention to the following list and read the updated Wiki: http://wiki.githu
|
|
903
1050
|
|
904
1051
|
```
|
905
1052
|
Benchmarks (1000 SOAP calls):
|
906
|
-
|
1053
|
+
|
907
1054
|
user system total real
|
908
1055
|
0.6.4 72.180000 8.280000 80.460000 (750.799011)
|
909
1056
|
0.6.3 192.900000 19.630000 212.530000 (914.031865)
|
@@ -917,7 +1064,7 @@ Pay attention to the following list and read the updated Wiki: http://wiki.githu
|
|
917
1064
|
|
918
1065
|
```
|
919
1066
|
Benchmarks (1000 SOAP calls):
|
920
|
-
|
1067
|
+
|
921
1068
|
user system total real
|
922
1069
|
WSDL 192.900000 19.630000 212.530000 (914.031865)
|
923
1070
|
disabled WSDL 5.680000 1.340000 7.020000 (298.265318)
|
@@ -927,7 +1074,7 @@ Pay attention to the following list and read the updated Wiki: http://wiki.githu
|
|
927
1074
|
|
928
1075
|
```
|
929
1076
|
Benchmarks (1000 SOAP calls):
|
930
|
-
|
1077
|
+
|
931
1078
|
user system total real
|
932
1079
|
0.6.3 192.900000 19.630000 212.530000 (914.031865)
|
933
1080
|
0.6.2 574.720000 78.380000 653.100000 (1387.778539)
|
data/CONTRIBUTING.md
CHANGED
@@ -14,7 +14,7 @@ problems and make sure they don't come back.
|
|
14
14
|
|
15
15
|
So if you can reproduce your problem in a spec, that would be awesome! If you can't, please
|
16
16
|
let us know how we could make this easier for you. Also, provide code and the WSDL of the
|
17
|
-
service
|
17
|
+
service you're working with so others can try to come up with a spec for your problem.
|
18
18
|
|
19
19
|
After we have a failing spec, it obviously needs to be fixed. Make sure your new spec is the
|
20
20
|
only failing one under the `spec` directory. Travis only runs the "unit tests" at `spec/savon`,
|
data/Gemfile
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
gem "httpclient", "~> 2.
|
5
|
-
|
4
|
+
gem "httpclient", "~> 2.7.1"
|
5
|
+
|
6
|
+
gem "simplecov", :require => false
|
7
|
+
gem "coveralls", :require => false
|
8
|
+
|
9
|
+
platform :rbx do
|
10
|
+
gem 'racc'
|
11
|
+
gem 'rubysl'
|
12
|
+
gem 'rubinius-coverage'
|
13
|
+
end
|
data/README.md
CHANGED
@@ -5,14 +5,15 @@ Heavy metal SOAP client
|
|
5
5
|
[Documentation](http://savonrb.com) | [RDoc](http://rubydoc.info/gems/savon) |
|
6
6
|
[Mailing list](https://groups.google.com/forum/#!forum/savonrb) | [Twitter](http://twitter.com/savonrb)
|
7
7
|
|
8
|
-
[](http://travis-ci.org/savonrb/savon)
|
9
|
+
[](http://badge.fury.io/rb/savon)
|
10
|
+
[](https://codeclimate.com/github/savonrb/savon)
|
11
|
+
[](https://coveralls.io/r/savonrb/savon)
|
11
12
|
|
12
13
|
|
13
|
-
##
|
14
|
+
## Version 2
|
14
15
|
|
15
|
-
Savon is available through [Rubygems](http://rubygems.org/gems/savon) and can be installed via:
|
16
|
+
Savon version 2 is available through [Rubygems](http://rubygems.org/gems/savon) and can be installed via:
|
16
17
|
|
17
18
|
```
|
18
19
|
$ gem install savon
|
@@ -21,10 +22,9 @@ $ gem install savon
|
|
21
22
|
or add it to your Gemfile like this:
|
22
23
|
|
23
24
|
```
|
24
|
-
gem 'savon', '~> 2.
|
25
|
+
gem 'savon', '~> 2.12.0'
|
25
26
|
```
|
26
27
|
|
27
|
-
|
28
28
|
## Usage example
|
29
29
|
|
30
30
|
``` ruby
|
@@ -43,15 +43,40 @@ response.body
|
|
43
43
|
# => { find_user_response: { id: 42, name: 'Hoff' } }
|
44
44
|
```
|
45
45
|
|
46
|
-
For more examples, you should check out the
|
46
|
+
For more examples, you should check out the
|
47
|
+
[integration tests](https://github.com/savonrb/savon/tree/version2/spec/integration).
|
47
48
|
|
49
|
+
## Ruby version support
|
50
|
+
* 2.12.x - MRI 2.2, 2.3, 2.4
|
51
|
+
* 2.11.x - MRI 2.0, 2.1, 2.2, and 2.3
|
48
52
|
|
49
|
-
|
53
|
+
If you are running MRI 1.8.7, try the 2.6.x branch.
|
54
|
+
|
55
|
+
## Running tests
|
56
|
+
|
57
|
+
```bash
|
58
|
+
$ bundle install
|
59
|
+
$ bundle exec rspec
|
60
|
+
```
|
61
|
+
|
62
|
+
## FAQ
|
63
|
+
|
64
|
+
* URI::InvalidURIError -- if you see this error, then it is likely that the http client you are using cannot parse the URI for your WSDL. Try `gem install httpclient` or add it to your `Gemfile`.
|
65
|
+
- See https://github.com/savonrb/savon/issues/488 for more info
|
50
66
|
|
51
|
-
|
67
|
+
## Give back
|
52
68
|
|
53
|
-
|
54
|
-
|
69
|
+
If you're using Savon and you or your company is making money from it, then please consider
|
70
|
+
donating via [Gittip](https://www.gittip.com/tjarratt/) so that I can continue to improve it.
|
55
71
|
|
56
|
-
|
72
|
+
[](https://www.gittip.com/tjarratt/)
|
73
|
+
|
74
|
+
|
75
|
+
## Documentation
|
76
|
+
|
77
|
+
Please make sure to [read the documentation](http://savonrb.com/version2/).
|
78
|
+
|
79
|
+
And if you find any problems with it or if you think something's missing,
|
57
80
|
feel free to [help out and improve the documentation](https://github.com/savonrb/savonrb.com).
|
81
|
+
|
82
|
+
Donate icon from the [Noun Project](http://thenounproject.com/noun/donate/#icon-No285).
|
data/donate.png
ADDED
Binary file
|
data/lib/savon/builder.rb
CHANGED
@@ -17,12 +17,15 @@ module Savon
|
|
17
17
|
2 => "http://www.w3.org/2003/05/soap-envelope"
|
18
18
|
}
|
19
19
|
|
20
|
+
WSA_NAMESPACE = "http://www.w3.org/2005/08/addressing"
|
21
|
+
|
20
22
|
def initialize(operation_name, wsdl, globals, locals)
|
21
23
|
@operation_name = operation_name
|
22
24
|
|
23
|
-
@wsdl
|
24
|
-
@globals
|
25
|
-
@locals
|
25
|
+
@wsdl = wsdl
|
26
|
+
@globals = globals
|
27
|
+
@locals = locals
|
28
|
+
@signature = @locals[:wsse_signature] || @globals[:wsse_signature]
|
26
29
|
|
27
30
|
@types = convert_type_definitions_to_hash
|
28
31
|
@used_namespaces = convert_type_namespaces_to_hash
|
@@ -32,13 +35,49 @@ module Savon
|
|
32
35
|
Nokogiri.XML(to_s).to_xml(:indent => 2)
|
33
36
|
end
|
34
37
|
|
35
|
-
def
|
36
|
-
|
38
|
+
def build_document
|
39
|
+
xml_result = tag(builder, :Envelope, namespaces_with_globals) do |xml|
|
40
|
+
tag(xml, :Header, header_attributes) { xml << header.to_s } unless header.empty?
|
41
|
+
if @globals[:no_message_tag]
|
42
|
+
tag(xml, :Body, body_attributes) { xml << message.to_s }
|
43
|
+
else
|
44
|
+
tag(xml, :Body, body_attributes) { xml.tag!(*namespaced_message_tag) { xml << body_message } }
|
45
|
+
end
|
46
|
+
end
|
37
47
|
|
38
|
-
|
39
|
-
|
40
|
-
|
48
|
+
# if we have a signature sign the document
|
49
|
+
if @signature
|
50
|
+
@signature.document = xml_result
|
51
|
+
|
52
|
+
2.times do
|
53
|
+
@header = nil
|
54
|
+
@signature.document = tag(builder, :Envelope, namespaces_with_globals) do |xml|
|
55
|
+
tag(xml, :Header, header_attributes) { xml << header.to_s } unless header.empty?
|
56
|
+
if @globals[:no_message_tag]
|
57
|
+
tag(xml, :Body, body_attributes) { xml << message.to_s }
|
58
|
+
else
|
59
|
+
tag(xml, :Body, body_attributes) { xml.tag!(*namespaced_message_tag) { xml << message.to_s } }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
xml_result = @signature.document
|
41
65
|
end
|
66
|
+
|
67
|
+
xml_result
|
68
|
+
end
|
69
|
+
|
70
|
+
def header_attributes
|
71
|
+
@globals[:use_wsa_headers] ? { 'xmlns:wsa' => WSA_NAMESPACE } : {}
|
72
|
+
end
|
73
|
+
|
74
|
+
def body_attributes
|
75
|
+
@body_attributes ||= @signature.nil? ? {} : @signature.body_attributes
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_s
|
79
|
+
return @locals[:xml] if @locals.include? :xml
|
80
|
+
build_document
|
42
81
|
end
|
43
82
|
|
44
83
|
private
|
@@ -101,17 +140,36 @@ module Savon
|
|
101
140
|
end
|
102
141
|
|
103
142
|
def namespaced_message_tag
|
143
|
+
tag_name = message_tag
|
144
|
+
return [tag_name] if @wsdl.document? and @wsdl.soap_input(@operation_name.to_sym).is_a?(Hash)
|
104
145
|
if namespace_identifier == nil
|
105
|
-
[
|
106
|
-
elsif @used_namespaces[[
|
107
|
-
[@used_namespaces[[
|
146
|
+
[tag_name, message_attributes]
|
147
|
+
elsif @used_namespaces[[tag_name.to_s]]
|
148
|
+
[@used_namespaces[[tag_name.to_s]], tag_name, message_attributes]
|
108
149
|
else
|
109
|
-
[namespace_identifier,
|
150
|
+
[namespace_identifier, tag_name, message_attributes]
|
110
151
|
end
|
111
152
|
end
|
112
153
|
|
154
|
+
def serialized_message_tag
|
155
|
+
[:wsdl, @wsdl.soap_input(@operation_name.to_sym).keys.first, {}]
|
156
|
+
end
|
157
|
+
|
158
|
+
def serialized_messages
|
159
|
+
messages = ""
|
160
|
+
message_tag = serialized_message_tag[1]
|
161
|
+
@wsdl.soap_input(@operation_name.to_sym)[message_tag].each_pair do |message, type|
|
162
|
+
break if @locals[:message].nil?
|
163
|
+
message_locals = @locals[:message][message.snakecase.to_sym]
|
164
|
+
message_content = Message.new(message_tag, namespace_identifier, @types, @used_namespaces, message_locals, :unqualified, @globals[:convert_request_keys_to], @globals[:unwrap]).to_s
|
165
|
+
messages << "<#{message} xsi:type=\"#{type.join(':')}\">#{message_content}</#{message}>"
|
166
|
+
end
|
167
|
+
messages
|
168
|
+
end
|
169
|
+
|
113
170
|
def message_tag
|
114
|
-
message_tag = @
|
171
|
+
message_tag = @wsdl.soap_input(@operation_name.to_sym).keys.first if @wsdl.document? and @wsdl.soap_input(@operation_name.to_sym).is_a?(Hash)
|
172
|
+
message_tag ||= @locals[:message_tag]
|
115
173
|
message_tag ||= @wsdl.soap_input(@operation_name.to_sym) if @wsdl.document?
|
116
174
|
message_tag ||= Gyoku.xml_tag(@operation_name, :key_converter => @globals[:convert_request_keys_to])
|
117
175
|
|
@@ -122,11 +180,19 @@ module Savon
|
|
122
180
|
@locals[:attributes] || {}
|
123
181
|
end
|
124
182
|
|
183
|
+
def body_message
|
184
|
+
if @wsdl.document? and @wsdl.soap_input(@operation_name.to_sym).is_a?(Hash)
|
185
|
+
serialized_messages
|
186
|
+
else
|
187
|
+
message.to_s
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
125
191
|
def message
|
126
192
|
element_form_default = @globals[:element_form_default] || @wsdl.element_form_default
|
127
193
|
# TODO: clean this up! [dh, 2012-12-17]
|
128
|
-
Message.new(
|
129
|
-
element_form_default, @globals[:convert_request_keys_to])
|
194
|
+
Message.new(message_tag, namespace_identifier, @types, @used_namespaces, @locals[:message],
|
195
|
+
element_form_default, @globals[:convert_request_keys_to], @globals[:unwrap])
|
130
196
|
end
|
131
197
|
|
132
198
|
def namespace_identifier
|