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