soap4r 1.5.7 → 1.5.8
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.
- data/bin/wsdl2ruby.rb +8 -2
- data/lib/soap/baseData.rb +93 -43
- data/lib/soap/element.rb +11 -8
- data/lib/soap/encodingstyle/handler.rb +15 -4
- data/lib/soap/encodingstyle/literalHandler.rb +18 -24
- data/lib/soap/encodingstyle/soapHandler.rb +34 -77
- data/lib/soap/generator.rb +74 -48
- data/lib/soap/header/handler.rb +1 -1
- data/lib/soap/header/mappinghandler.rb +47 -0
- data/lib/soap/mapping/encodedregistry.rb +19 -13
- data/lib/soap/mapping/factory.rb +19 -3
- data/lib/soap/mapping/literalregistry.rb +47 -35
- data/lib/soap/mapping/mapping.rb +92 -24
- data/lib/soap/mapping/registry.rb +34 -18
- data/lib/soap/mapping/schemadefinition.rb +8 -1
- data/lib/soap/mapping/typeMap.rb +18 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +8 -50
- data/lib/soap/mapping/wsdlliteralregistry.rb +45 -39
- data/lib/soap/nestedexception.rb +42 -0
- data/lib/soap/netHttpClient.rb +1 -0
- data/lib/soap/ns.rb +34 -0
- data/lib/soap/parser.rb +32 -29
- data/lib/soap/processor.rb +1 -1
- data/lib/soap/rpc/driver.rb +1 -0
- data/lib/soap/rpc/element.rb +18 -6
- data/lib/soap/rpc/httpserver.rb +38 -24
- data/lib/soap/rpc/proxy.rb +14 -11
- data/lib/soap/rpc/router.rb +4 -1
- data/lib/soap/soap.rb +7 -6
- data/lib/soap/wsdlDriver.rb +29 -8
- data/lib/tags +5690 -0
- data/lib/wsdl/definitions.rb +26 -40
- data/lib/wsdl/info.rb +11 -0
- data/lib/wsdl/parser.rb +2 -2
- data/lib/wsdl/soap/cgiStubCreator.rb +10 -5
- data/lib/wsdl/soap/classDefCreator.rb +140 -113
- data/lib/wsdl/soap/classDefCreatorSupport.rb +94 -12
- data/lib/wsdl/soap/classNameCreator.rb +54 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +6 -5
- data/lib/wsdl/soap/complexType.rb +10 -1
- data/lib/wsdl/soap/definitions.rb +4 -0
- data/lib/wsdl/soap/driverCreator.rb +14 -6
- data/lib/wsdl/soap/element.rb +4 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +11 -55
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +28 -126
- data/lib/wsdl/soap/mappingRegistryCreator.rb +9 -3
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +209 -94
- data/lib/wsdl/soap/methodDefCreator.rb +12 -16
- data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
- data/lib/wsdl/soap/servletStubCreator.rb +107 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +10 -5
- data/lib/wsdl/soap/wsdl2ruby.rb +28 -13
- data/lib/wsdl/wsdl.rb +2 -1
- data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +86 -0
- data/lib/wsdl/xmlSchema/choice.rb +4 -1
- data/lib/wsdl/xmlSchema/complexContent.rb +1 -1
- data/lib/wsdl/xmlSchema/complexExtension.rb +9 -1
- data/lib/wsdl/xmlSchema/complexRestriction.rb +8 -0
- data/lib/wsdl/xmlSchema/complexType.rb +38 -5
- data/lib/wsdl/xmlSchema/data.rb +30 -7
- data/lib/wsdl/xmlSchema/element.rb +10 -2
- data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
- data/lib/wsdl/xmlSchema/group.rb +118 -0
- data/lib/wsdl/xmlSchema/import.rb +11 -23
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/include.rb +11 -17
- data/lib/wsdl/xmlSchema/length.rb +3 -1
- data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +3 -1
- data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
- data/lib/wsdl/xmlSchema/minlength.rb +3 -1
- data/lib/wsdl/xmlSchema/schema.rb +34 -0
- data/lib/wsdl/xmlSchema/sequence.rb +4 -1
- data/lib/wsdl/xmlSchema/simpleExtension.rb +8 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +49 -8
- data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +13 -4
- data/lib/xsd/charset.rb +8 -6
- data/lib/xsd/codegen/classdef.rb +5 -0
- data/lib/xsd/codegen/moduledef.rb +17 -0
- data/lib/xsd/datatypes.rb +165 -20
- data/lib/xsd/mapping.rb +13 -5
- data/lib/xsd/namedelements.rb +8 -0
- data/lib/xsd/ns.rb +50 -14
- data/lib/xsd/qname.rb +3 -2
- data/lib/xsd/xmlparser.rb +4 -3
- data/test/soap/asp.net/test_aspdotnet.rb +1 -1
- data/test/soap/auth/test_basic.rb +4 -3
- data/test/soap/auth/test_digest.rb +4 -3
- data/test/soap/calc/test_calc.rb +6 -4
- data/test/soap/calc/test_calc2.rb +6 -4
- data/test/soap/calc/test_calc_cgi.rb +6 -4
- data/test/soap/fault/test_customfault.rb +6 -4
- data/test/soap/fault/test_soaparray.rb +35 -0
- data/test/soap/filter/test_filter.rb +2 -2
- data/test/soap/header/test_authheader.rb +2 -2
- data/test/soap/header/test_authheader_cgi.rb +3 -3
- data/test/soap/header/test_simplehandler.rb +2 -2
- data/test/soap/helloworld/test_helloworld.rb +6 -4
- data/test/soap/ssl/test_ssl.rb +1 -1
- data/test/soap/struct/test_struct.rb +2 -2
- data/test/soap/swa/test_file.rb +6 -4
- data/test/soap/test_basetype.rb +4 -4
- data/test/soap/test_cookie.rb +2 -2
- data/test/soap/test_custom_ns.rb +50 -8
- data/test/soap/test_custommap.rb +6 -4
- data/test/soap/test_empty.rb +6 -4
- data/test/soap/test_envelopenamespace.rb +2 -2
- data/test/soap/test_extraattr.rb +6 -7
- data/test/soap/test_generator.rb +27 -0
- data/test/soap/test_mapping.rb +10 -0
- data/test/soap/test_nestedexception.rb +56 -0
- data/test/soap/test_nil.rb +6 -4
- data/test/soap/test_no_indent.rb +6 -4
- data/test/soap/test_response_as_xml.rb +2 -2
- data/test/soap/test_streamhandler.rb +6 -3
- data/test/soap/test_styleuse.rb +2 -2
- data/test/soap/wsdlDriver/test_calc.rb +2 -2
- data/test/soap/wsdlDriver/test_document.rb +2 -2
- data/test/soap/wsdlDriver/test_simpletype.rb +2 -2
- data/test/wsdl/abstract/test_abstract.rb +1 -1
- data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
- data/test/wsdl/anonymous/expectedDriver.rb +59 -0
- data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
- data/test/wsdl/anonymous/lp.wsdl +147 -0
- data/test/wsdl/anonymous/test_anonymous.rb +130 -0
- data/test/wsdl/any/expectedDriver.rb +3 -2
- data/test/wsdl/any/expectedEcho.rb +22 -2
- data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
- data/test/wsdl/any/expectedService.rb +3 -1
- data/test/wsdl/any/test_any.rb +2 -7
- data/test/wsdl/axisArray/axisArray.wsdl +31 -4
- data/test/wsdl/axisArray/test_axisarray.rb +58 -3
- data/test/wsdl/choice/choice.wsdl +39 -0
- data/test/wsdl/choice/test_choice.rb +134 -7
- data/test/wsdl/complexcontent/test_echo.rb +1 -1
- data/test/wsdl/datetime/test_datetime.rb +2 -2
- data/test/wsdl/document/array/double.wsdl +45 -6
- data/test/wsdl/document/array/test_array.rb +68 -1
- data/test/wsdl/document/document.wsdl +2 -0
- data/test/wsdl/document/test_nosoapaction.rb +1 -1
- data/test/wsdl/document/test_number.rb +1 -1
- data/test/wsdl/document/test_rpc.rb +78 -9
- data/test/wsdl/fault/test_fault.rb +1 -1
- data/test/wsdl/fault/test_multifault.rb +1 -1
- data/test/wsdl/group/expectedClassdef.rb +58 -0
- data/test/wsdl/group/expectedDriver.rb +51 -0
- data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
- data/test/wsdl/group/group.wsdl +88 -0
- data/test/wsdl/group/test_rpc.rb +145 -0
- data/test/wsdl/list/test_list.rb +1 -1
- data/test/wsdl/map/test_map.rb +2 -2
- data/test/wsdl/marshal/person_org.rb +5 -0
- data/test/wsdl/multiplefault.wsdl +11 -4
- data/test/wsdl/oneway/test_oneway.rb +1 -1
- data/test/wsdl/overload/test_overload.rb +1 -1
- data/test/wsdl/qualified/test_qualified.rb +1 -1
- data/test/wsdl/qualified/test_unqualified.rb +1 -1
- data/test/wsdl/raa/RAAService.rb +62 -57
- data/test/wsdl/raa/expectedClassDef.rb +100 -0
- data/test/wsdl/raa/expectedDriver.rb +96 -0
- data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
- data/test/wsdl/raa/test_raa.rb +54 -19
- data/test/wsdl/ref/expectedDriver.rb +1 -1
- data/test/wsdl/ref/expectedProduct.rb +101 -16
- data/test/wsdl/ref/test_ref.rb +2 -1
- data/test/wsdl/rpc/test_rpc.rb +1 -2
- data/test/wsdl/rpc/test_rpc_lit.rb +13 -13
- data/test/wsdl/simplecontent/test_simplecontent.rb +5 -5
- data/test/wsdl/simpletype/rpc/expectedDriver.rb +3 -2
- data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +2 -0
- data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +10 -17
- data/test/wsdl/simpletype/rpc/expectedService.rb +4 -2
- data/test/wsdl/simpletype/test_simpletype.rb +2 -2
- data/test/wsdl/soap/test_soapbodyparts.rb +2 -2
- data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +2 -0
- data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +3 -2
- data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +5 -9
- data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +4 -2
- data/test/wsdl/soap/wsdl2ruby/expectedService.rb +4 -2
- data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +6 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +1 -1
- data/test/wsdl/soaptype/test_soaptype.rb +1 -1
- data/test/wsdl/test_multiplefault.rb +3 -1
- data/test/xsd/codegen/test_classdef.rb +30 -0
- data/test/xsd/test_ns.rb +21 -0
- data/test/xsd/test_xsd.rb +5 -4
- data/test/xsd/xsd2ruby/expected_mysample.rb +13 -2
- data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +5 -11
- data/test/xsd/xsd2ruby/section.xsd +8 -0
- metadata +40 -8
- data/test/wsdl/axisArray/itemList.rb +0 -14
- data/test/wsdl/raa/RAA.rb +0 -120
- data/test/wsdl/raa/RAAServant.rb +0 -107
- data/test/wsdl/raa/server.rb +0 -103
data/lib/soap/netHttpClient.rb
CHANGED
data/lib/soap/ns.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# SOAP4R - SOAP Namespace library
|
2
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'xsd/datatypes'
|
10
|
+
require 'xsd/ns'
|
11
|
+
require 'soap/soap'
|
12
|
+
|
13
|
+
|
14
|
+
module SOAP
|
15
|
+
|
16
|
+
|
17
|
+
class NS < XSD::NS
|
18
|
+
KNOWN_TAG = XSD::NS::KNOWN_TAG.dup.update(
|
19
|
+
SOAP::EnvelopeNamespace => 'env'
|
20
|
+
)
|
21
|
+
|
22
|
+
def initialize(tag2ns = nil)
|
23
|
+
super(tag2ns)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def default_known_tag
|
29
|
+
KNOWN_TAG
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
end
|
data/lib/soap/parser.rb
CHANGED
@@ -6,9 +6,9 @@
|
|
6
6
|
# either the dual license version in 2003, or any later version.
|
7
7
|
|
8
8
|
|
9
|
-
require 'xsd/ns'
|
10
9
|
require 'xsd/xmlparser'
|
11
10
|
require 'soap/soap'
|
11
|
+
require 'soap/ns'
|
12
12
|
require 'soap/baseData'
|
13
13
|
require 'soap/encodingstyle/handler'
|
14
14
|
|
@@ -112,7 +112,7 @@ public
|
|
112
112
|
@lastnode
|
113
113
|
end
|
114
114
|
|
115
|
-
def start_element(name,
|
115
|
+
def start_element(name, raw_attrs)
|
116
116
|
lastframe = @parsestack.last
|
117
117
|
ns = parent = parent_encodingstyle = nil
|
118
118
|
if lastframe
|
@@ -120,13 +120,14 @@ public
|
|
120
120
|
parent = lastframe.node
|
121
121
|
parent_encodingstyle = lastframe.encodingstyle
|
122
122
|
else
|
123
|
-
ns =
|
123
|
+
ns = SOAP::NS.new
|
124
124
|
parent = ParseFrame::NodeContainer.new(nil)
|
125
125
|
parent_encodingstyle = nil
|
126
126
|
end
|
127
127
|
# ns might be the same
|
128
|
-
ns,
|
129
|
-
|
128
|
+
ns, raw_attrs = XSD::XMLParser.filter_ns(ns, raw_attrs)
|
129
|
+
attrs = decode_attrs(ns, raw_attrs)
|
130
|
+
encodingstyle = attrs[AttrEncodingStyleName]
|
130
131
|
# Children's encodingstyle is derived from its parent.
|
131
132
|
if encodingstyle.nil?
|
132
133
|
if parent.node.is_a?(SOAPHeader)
|
@@ -149,13 +150,10 @@ public
|
|
149
150
|
end
|
150
151
|
|
151
152
|
def characters(text)
|
152
|
-
|
153
|
-
if lastframe
|
153
|
+
# Ignore Text outside of SOAP Envelope.
|
154
|
+
if lastframe = @parsestack.last
|
154
155
|
# Need not to be cloned because character does not have attr.
|
155
156
|
decode_text(lastframe.ns, text, lastframe.handler)
|
156
|
-
else
|
157
|
-
# Ignore Text outside of SOAP Envelope.
|
158
|
-
p text if $DEBUG
|
159
157
|
end
|
160
158
|
end
|
161
159
|
|
@@ -171,15 +169,6 @@ public
|
|
171
169
|
|
172
170
|
private
|
173
171
|
|
174
|
-
def find_encodingstyle(ns, attrs)
|
175
|
-
attrs.each do |key, value|
|
176
|
-
if (ns.compare(@envelopenamespace, AttrEncodingStyle, key))
|
177
|
-
return value
|
178
|
-
end
|
179
|
-
end
|
180
|
-
nil
|
181
|
-
end
|
182
|
-
|
183
172
|
def decode_tag(ns, name, attrs, parent, handler)
|
184
173
|
ele = ns.parse(name)
|
185
174
|
# Envelope based parsing.
|
@@ -196,6 +185,15 @@ private
|
|
196
185
|
return handler.decode_tag_end(ns, node)
|
197
186
|
end
|
198
187
|
|
188
|
+
def decode_attrs(ns, attrs)
|
189
|
+
extraattr = {}
|
190
|
+
attrs.each do |key, value|
|
191
|
+
qname = ns.parse_local(key)
|
192
|
+
extraattr[qname] = value
|
193
|
+
end
|
194
|
+
extraattr
|
195
|
+
end
|
196
|
+
|
199
197
|
def decode_text(ns, text, handler)
|
200
198
|
handler.decode_text(ns, text)
|
201
199
|
end
|
@@ -210,23 +208,28 @@ private
|
|
210
208
|
end
|
211
209
|
end
|
212
210
|
elsif ele.name == EleHeader
|
213
|
-
unless parent.node.is_a?(SOAPEnvelope)
|
214
|
-
raise FormatDecodeError.new("Header should be a child of Envelope.")
|
215
|
-
end
|
211
|
+
return nil unless parent.node.is_a?(SOAPEnvelope)
|
216
212
|
o = SOAPHeader.new
|
217
213
|
parent.node.header = o
|
218
214
|
elsif ele.name == EleBody
|
219
|
-
unless parent.node.is_a?(SOAPEnvelope)
|
220
|
-
raise FormatDecodeError.new("Body should be a child of Envelope.")
|
221
|
-
end
|
215
|
+
return nil unless parent.node.is_a?(SOAPEnvelope)
|
222
216
|
o = SOAPBody.new
|
223
217
|
parent.node.body = o
|
224
218
|
elsif ele.name == EleFault
|
225
|
-
|
226
|
-
|
219
|
+
if parent.node.is_a?(SOAPBody)
|
220
|
+
o = SOAPFault.new
|
221
|
+
parent.node.fault = o
|
222
|
+
elsif parent.node.is_a?(SOAPEnvelope)
|
223
|
+
# live.com server returns SOAPFault as a direct child of SOAPEnvelope.
|
224
|
+
# support it even if it's not spec compliant.
|
225
|
+
warn("Fault must be a child of Body.")
|
226
|
+
body = SOAPBody.new
|
227
|
+
parent.node.body = body
|
228
|
+
o = SOAPFault.new
|
229
|
+
body.fault = o
|
230
|
+
else
|
231
|
+
return nil
|
227
232
|
end
|
228
|
-
o = SOAPFault.new
|
229
|
-
parent.node.fault = o
|
230
233
|
end
|
231
234
|
o.extraattr.update(attrs) if o
|
232
235
|
o
|
data/lib/soap/processor.rb
CHANGED
data/lib/soap/rpc/driver.rb
CHANGED
@@ -60,6 +60,7 @@ class Driver
|
|
60
60
|
__attr_proxy :allow_unqualified_element, true
|
61
61
|
__attr_proxy :default_encodingstyle, true
|
62
62
|
__attr_proxy :generate_explicit_type, true
|
63
|
+
__attr_proxy :use_default_namespace, true
|
63
64
|
__attr_proxy :return_response_as_xml, true
|
64
65
|
__attr_proxy :headerhandler
|
65
66
|
__attr_proxy :filterchain
|
data/lib/soap/rpc/element.rb
CHANGED
@@ -56,7 +56,7 @@ class SOAPBody < SOAPStruct
|
|
56
56
|
|
57
57
|
def fault=(fault)
|
58
58
|
@is_fault = true
|
59
|
-
|
59
|
+
add('fault', fault)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -219,10 +219,7 @@ private
|
|
219
219
|
|
220
220
|
def init_param(param_def)
|
221
221
|
param_def.each do |io_type, name, param_type|
|
222
|
-
mapped_class, nsdef, namedef = param_type
|
223
|
-
if mapped_class.is_a?(String)
|
224
|
-
mapped_class = Mapping.class_from_name(mapped_class)
|
225
|
-
end
|
222
|
+
mapped_class, nsdef, namedef = SOAPMethod.parse_param_type(param_type)
|
226
223
|
if nsdef && namedef
|
227
224
|
type_qname = XSD::QName.new(nsdef, namedef)
|
228
225
|
elsif mapped_class
|
@@ -243,13 +240,28 @@ private
|
|
243
240
|
raise MethodDefinitionError.new('duplicated retval')
|
244
241
|
end
|
245
242
|
@retval_name = name
|
246
|
-
@retval_class_name = nil
|
247
243
|
@retval_class_name = mapped_class
|
248
244
|
else
|
249
245
|
raise MethodDefinitionError.new("unknown type: #{io_type}")
|
250
246
|
end
|
251
247
|
end
|
252
248
|
end
|
249
|
+
|
250
|
+
def self.parse_param_type(param_type)
|
251
|
+
mapped_class, nsdef, namedef = param_type
|
252
|
+
# the first element of typedef in param_def can be a String like
|
253
|
+
# "::SOAP::SOAPStruct" or "CustomClass[]". turn this String to a class if
|
254
|
+
# we can.
|
255
|
+
if mapped_class.is_a?(String)
|
256
|
+
if /\[\]\Z/ =~ mapped_class
|
257
|
+
# when '[]' is added, ignore this.
|
258
|
+
mapped_class = nil
|
259
|
+
else
|
260
|
+
mapped_class = Mapping.class_from_name(mapped_class)
|
261
|
+
end
|
262
|
+
end
|
263
|
+
[mapped_class, nsdef, namedef]
|
264
|
+
end
|
253
265
|
end
|
254
266
|
|
255
267
|
|
data/lib/soap/rpc/httpserver.rb
CHANGED
@@ -20,6 +20,44 @@ class HTTPServer < Logger::Application
|
|
20
20
|
attr_reader :server
|
21
21
|
attr_accessor :default_namespace
|
22
22
|
|
23
|
+
class << self
|
24
|
+
if RUBY_VERSION >= "1.7.0"
|
25
|
+
def __attr_proxy(symbol, assignable = false)
|
26
|
+
name = symbol.to_s
|
27
|
+
define_method(name) {
|
28
|
+
@router.__send__(name)
|
29
|
+
}
|
30
|
+
if assignable
|
31
|
+
aname = name + '='
|
32
|
+
define_method(aname) { |rhs|
|
33
|
+
@router.__send__(aname, rhs)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
else
|
38
|
+
def __attr_proxy(symbol, assignable = false)
|
39
|
+
name = symbol.to_s
|
40
|
+
module_eval <<-EOS
|
41
|
+
def #{name}
|
42
|
+
@router.#{name}
|
43
|
+
end
|
44
|
+
EOS
|
45
|
+
if assignable
|
46
|
+
module_eval <<-EOS
|
47
|
+
def #{name}=(value)
|
48
|
+
@router.#{name} = value
|
49
|
+
end
|
50
|
+
EOS
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
__attr_proxy :mapping_registry, true
|
57
|
+
__attr_proxy :literal_mapping_registry, true
|
58
|
+
__attr_proxy :generate_explicit_type, true
|
59
|
+
__attr_proxy :use_default_namespace, true
|
60
|
+
|
23
61
|
def initialize(config)
|
24
62
|
actor = config[:SOAPHTTPServerApplicationName] || self.class.name
|
25
63
|
super(actor)
|
@@ -60,30 +98,6 @@ class HTTPServer < Logger::Application
|
|
60
98
|
@soaplet.authenticator = authenticator
|
61
99
|
end
|
62
100
|
|
63
|
-
def mapping_registry
|
64
|
-
@router.mapping_registry
|
65
|
-
end
|
66
|
-
|
67
|
-
def mapping_registry=(mapping_registry)
|
68
|
-
@router.mapping_registry = mapping_registry
|
69
|
-
end
|
70
|
-
|
71
|
-
def literal_mapping_registry
|
72
|
-
@router.literal_mapping_registry
|
73
|
-
end
|
74
|
-
|
75
|
-
def literal_mapping_registry=(literal_mapping_registry)
|
76
|
-
@router.literal_mapping_registry = literal_mapping_registry
|
77
|
-
end
|
78
|
-
|
79
|
-
def generate_explicit_type
|
80
|
-
@router.generate_explicit_type
|
81
|
-
end
|
82
|
-
|
83
|
-
def generate_explicit_type=(generate_explicit_type)
|
84
|
-
@router.generate_explicit_type = generate_explicit_type
|
85
|
-
end
|
86
|
-
|
87
101
|
# servant entry interface
|
88
102
|
|
89
103
|
def add_rpc_request_servant(factory, namespace = @default_namespace)
|
data/lib/soap/rpc/proxy.rb
CHANGED
@@ -32,6 +32,7 @@ public
|
|
32
32
|
attr_accessor :allow_unqualified_element
|
33
33
|
attr_accessor :default_encodingstyle
|
34
34
|
attr_accessor :generate_explicit_type
|
35
|
+
attr_accessor :use_default_namespace
|
35
36
|
attr_accessor :return_response_as_xml
|
36
37
|
attr_reader :headerhandler
|
37
38
|
attr_reader :filterchain
|
@@ -52,9 +53,11 @@ public
|
|
52
53
|
@operation_by_qname = {}
|
53
54
|
@operation_by_soapaction = {}
|
54
55
|
@mandatorycharset = nil
|
56
|
+
# TODO: set to false by default or drop thie option in 1.6.0
|
55
57
|
@allow_unqualified_element = true
|
56
58
|
@default_encodingstyle = nil
|
57
59
|
@generate_explicit_type = true
|
60
|
+
@use_default_namespace = false
|
58
61
|
@return_response_as_xml = false
|
59
62
|
@headerhandler = Header::HandlerSet.new
|
60
63
|
@filterchain = Filter::FilterChain.new
|
@@ -129,15 +132,13 @@ public
|
|
129
132
|
:envelopenamespace => @options["soap.envelope.requestnamespace"],
|
130
133
|
:default_encodingstyle =>
|
131
134
|
@default_encodingstyle || op_info.request_default_encodingstyle,
|
132
|
-
:
|
133
|
-
|
135
|
+
:use_default_namespace =>
|
136
|
+
op_info.use_default_namespace || @use_default_namespace
|
134
137
|
)
|
135
138
|
resopt = create_encoding_opt(
|
136
139
|
:envelopenamespace => @options["soap.envelope.responsenamespace"],
|
137
140
|
:default_encodingstyle =>
|
138
|
-
@default_encodingstyle || op_info.response_default_encodingstyle
|
139
|
-
:elementformdefault => op_info.elementformdefault,
|
140
|
-
:attributeformdefault => op_info.attributeformdefault
|
141
|
+
@default_encodingstyle || op_info.response_default_encodingstyle
|
141
142
|
)
|
142
143
|
env = route(req_header, req_body, reqopt, resopt)
|
143
144
|
if op_info.response_use.nil?
|
@@ -350,8 +351,7 @@ private
|
|
350
351
|
attr_reader :response_style
|
351
352
|
attr_reader :request_use
|
352
353
|
attr_reader :response_use
|
353
|
-
attr_reader :
|
354
|
-
attr_reader :attributeformdefault
|
354
|
+
attr_reader :use_default_namespace
|
355
355
|
|
356
356
|
def initialize(soapaction, param_def, opt)
|
357
357
|
@soapaction = soapaction
|
@@ -359,9 +359,11 @@ private
|
|
359
359
|
@response_style = opt[:response_style]
|
360
360
|
@request_use = opt[:request_use]
|
361
361
|
@response_use = opt[:response_use]
|
362
|
-
|
363
|
-
|
364
|
-
|
362
|
+
@use_default_namespace =
|
363
|
+
opt[:use_default_namespace] || opt[:elementformdefault]
|
364
|
+
if opt.key?(:elementformdefault)
|
365
|
+
warn("option :elementformdefault is deprecated. use :use_default_namespace instead")
|
366
|
+
end
|
365
367
|
check_style(@request_style)
|
366
368
|
check_style(@response_style)
|
367
369
|
check_use(@request_use)
|
@@ -489,7 +491,8 @@ private
|
|
489
491
|
idx = 0
|
490
492
|
names.each do |name|
|
491
493
|
params[name] = Mapping.obj2soap(values[idx], mapping_registry,
|
492
|
-
types[idx]
|
494
|
+
types[idx], opt)
|
495
|
+
params[name].elename = XSD::QName.new(nil, name)
|
493
496
|
idx += 1
|
494
497
|
end
|
495
498
|
method.set_param(params)
|
data/lib/soap/rpc/router.rb
CHANGED
@@ -30,6 +30,7 @@ class Router
|
|
30
30
|
attr_accessor :mapping_registry
|
31
31
|
attr_accessor :literal_mapping_registry
|
32
32
|
attr_accessor :generate_explicit_type
|
33
|
+
attr_accessor :use_default_namespace
|
33
34
|
attr_accessor :external_ces
|
34
35
|
attr_reader :filterchain
|
35
36
|
|
@@ -39,6 +40,7 @@ class Router
|
|
39
40
|
@headerhandler = Header::HandlerSet.new
|
40
41
|
@literal_mapping_registry = ::SOAP::Mapping::LiteralRegistry.new
|
41
42
|
@generate_explicit_type = true
|
43
|
+
@use_default_namespace = false
|
42
44
|
@external_ces = nil
|
43
45
|
@operation_by_soapaction = {}
|
44
46
|
@operation_by_qname = {}
|
@@ -322,6 +324,7 @@ private
|
|
322
324
|
opt[:external_content] = nil
|
323
325
|
opt[:default_encodingstyle] = default_encodingstyle
|
324
326
|
opt[:generate_explicit_type] = @generate_explicit_type
|
327
|
+
opt[:use_default_namespace] = @use_default_namespace
|
325
328
|
@filterchain.reverse_each do |filter|
|
326
329
|
env = filter.on_outbound(env, opt)
|
327
330
|
break unless env
|
@@ -476,7 +479,7 @@ private
|
|
476
479
|
|
477
480
|
def request_rpc(body, mapping_registry, literal_mapping_registry, opt)
|
478
481
|
request = body.request
|
479
|
-
unless request.is_a?(
|
482
|
+
unless request.is_a?(SOAPNameAccessible)
|
480
483
|
if request.is_a?(SOAPNil)
|
481
484
|
# SOAP::Lite/0.69 seems to send xsi:nil="true" element as a request.
|
482
485
|
request = SOAPStruct.new(request.elename)
|
data/lib/soap/soap.rb
CHANGED
@@ -8,12 +8,13 @@
|
|
8
8
|
|
9
9
|
require 'xsd/qname'
|
10
10
|
require 'xsd/charset'
|
11
|
+
require 'soap/nestedexception'
|
11
12
|
|
12
13
|
|
13
14
|
module SOAP
|
14
15
|
|
15
16
|
|
16
|
-
VERSION = Version = '1.5.
|
17
|
+
VERSION = Version = '1.5.8'
|
17
18
|
PropertyName = 'soap/property'
|
18
19
|
|
19
20
|
EnvelopeNamespace = 'http://schemas.xmlsoap.org/soap/envelope/'
|
@@ -38,6 +39,8 @@ AttrRoot = 'root'
|
|
38
39
|
AttrArrayType = 'arrayType'
|
39
40
|
AttrOffset = 'offset'
|
40
41
|
AttrPosition = 'position'
|
42
|
+
AttrHref = 'href'
|
43
|
+
AttrId = 'id'
|
41
44
|
ValueArray = 'Array'
|
42
45
|
|
43
46
|
EleEnvelopeName = XSD::QName.new(EnvelopeNamespace, EleEnvelope).freeze
|
@@ -55,17 +58,15 @@ AttrRootName = XSD::QName.new(EncodingNamespace, AttrRoot).freeze
|
|
55
58
|
AttrArrayTypeName = XSD::QName.new(EncodingNamespace, AttrArrayType).freeze
|
56
59
|
AttrOffsetName = XSD::QName.new(EncodingNamespace, AttrOffset).freeze
|
57
60
|
AttrPositionName = XSD::QName.new(EncodingNamespace, AttrPosition).freeze
|
61
|
+
AttrHrefName = XSD::QName.new(nil, AttrHref).freeze
|
62
|
+
AttrIdName = XSD::QName.new(nil, AttrId).freeze
|
58
63
|
ValueArrayName = XSD::QName.new(EncodingNamespace, ValueArray).freeze
|
59
64
|
|
60
65
|
Base64Literal = 'base64'
|
61
66
|
|
62
|
-
SOAPNamespaceTag = 'env'
|
63
|
-
XSDNamespaceTag = 'xsd'
|
64
|
-
XSINamespaceTag = 'xsi'
|
65
|
-
|
66
67
|
MediaType = 'text/xml'
|
67
68
|
|
68
|
-
class Error < StandardError; end
|
69
|
+
class Error < StandardError; include NestedException; end
|
69
70
|
|
70
71
|
class StreamError < Error; end
|
71
72
|
class HTTPStreamError < StreamError; end
|