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
@@ -51,9 +51,7 @@ class Object
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def [](qname)
|
54
|
-
|
55
|
-
qname = XSD::QName.new(nil, qname)
|
56
|
-
end
|
54
|
+
qname = Mapping.to_qname(qname)
|
57
55
|
@__xmlele.each do |k, v|
|
58
56
|
return v if k == qname
|
59
57
|
end
|
@@ -65,9 +63,7 @@ class Object
|
|
65
63
|
end
|
66
64
|
|
67
65
|
def []=(qname, value)
|
68
|
-
|
69
|
-
qname = XSD::QName.new(nil, qname)
|
70
|
-
end
|
66
|
+
qname = Mapping.to_qname(qname)
|
71
67
|
found = false
|
72
68
|
@__xmlele.each do |pair|
|
73
69
|
if pair[0] == qname
|
@@ -110,7 +106,7 @@ private
|
|
110
106
|
# much memory for each singleton Object. just instance_eval instead of it.
|
111
107
|
def __define_attr_accessor(qname)
|
112
108
|
# untaint depends GenSupport.safemethodname
|
113
|
-
name =
|
109
|
+
name = Mapping.safemethodname(qname.name).untaint
|
114
110
|
# untaint depends on QName#dump
|
115
111
|
qnamedump = qname.dump.untaint
|
116
112
|
singleton = false
|
@@ -178,6 +174,7 @@ module RegistrySupport
|
|
178
174
|
def initialize
|
179
175
|
super()
|
180
176
|
@class_schema_definition = {}
|
177
|
+
@class_elename_schema_definition = {}
|
181
178
|
@elename_schema_definition = {}
|
182
179
|
@type_schema_definition = {}
|
183
180
|
end
|
@@ -189,7 +186,8 @@ module RegistrySupport
|
|
189
186
|
if !@class_schema_definition[obj_class] or definition.type
|
190
187
|
@class_schema_definition[obj_class] = definition
|
191
188
|
end
|
192
|
-
if definition.elename
|
189
|
+
if definition.elename and !definition.is_anonymous?
|
190
|
+
@class_elename_schema_definition[obj_class] = definition
|
193
191
|
@elename_schema_definition[definition.elename] = definition
|
194
192
|
end
|
195
193
|
if definition.type
|
@@ -201,6 +199,10 @@ module RegistrySupport
|
|
201
199
|
@class_schema_definition[klass] || Mapping.schema_definition_classdef(klass)
|
202
200
|
end
|
203
201
|
|
202
|
+
def elename_schema_definition_from_class(klass)
|
203
|
+
@class_elename_schema_definition[klass]
|
204
|
+
end
|
205
|
+
|
204
206
|
def schema_definition_from_elename(qname)
|
205
207
|
@elename_schema_definition[qname]
|
206
208
|
end
|
@@ -218,7 +220,7 @@ module RegistrySupport
|
|
218
220
|
|
219
221
|
def find_schema_definition(name)
|
220
222
|
return nil unless name
|
221
|
-
typestr =
|
223
|
+
typestr = Mapping.safeconstname(name)
|
222
224
|
obj_class = Mapping.class_from_name(typestr)
|
223
225
|
if obj_class
|
224
226
|
schema_definition_from_class(obj_class)
|
@@ -226,12 +228,8 @@ module RegistrySupport
|
|
226
228
|
end
|
227
229
|
|
228
230
|
def add_attributes2soap(obj, ele)
|
229
|
-
definition = Mapping.schema_definition_classdef(obj.class)
|
230
|
-
|
231
|
-
attributes.each do |qname, param|
|
232
|
-
at = Mapping.get_attribute(obj, XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name))
|
233
|
-
ele.extraattr[qname] = at
|
234
|
-
end
|
231
|
+
if definition = Mapping.schema_definition_classdef(obj.class)
|
232
|
+
add_definedattributes2soap(obj, ele, definition)
|
235
233
|
elsif obj.respond_to?(:__xmlattr)
|
236
234
|
obj.__xmlattr.each do |key, value|
|
237
235
|
ele.extraattr[key] = value
|
@@ -239,12 +237,30 @@ module RegistrySupport
|
|
239
237
|
end
|
240
238
|
end
|
241
239
|
|
240
|
+
def add_definedattributes2soap(obj, ele, typedef)
|
241
|
+
if typedef.attributes
|
242
|
+
typedef.attributes.each do |qname, param|
|
243
|
+
value = get_xmlattr_value(obj, qname)
|
244
|
+
ele.extraattr[qname] = value unless value.nil?
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
def get_xmlattr_value(obj, qname)
|
250
|
+
attrname = 'xmlattr_' + qname.name
|
251
|
+
value = Mapping.get_attribute(obj, attrname)
|
252
|
+
if value.nil?
|
253
|
+
attrname = Mapping.safemethodname('xmlattr_' + qname.name)
|
254
|
+
value = Mapping.get_attribute(obj, attrname)
|
255
|
+
end
|
256
|
+
value
|
257
|
+
end
|
258
|
+
|
242
259
|
def base2soap(obj, type, qualified = nil)
|
243
260
|
return SOAPNil.new if obj.nil?
|
244
261
|
soap_obj = nil
|
245
262
|
if type <= XSD::XSDString
|
246
|
-
str = XSD::Charset.encoding_conv(obj.to_s,
|
247
|
-
Thread.current[:SOAPMapping][:ExternalCES],
|
263
|
+
str = XSD::Charset.encoding_conv(obj.to_s, Mapping.external_ces,
|
248
264
|
XSD::Charset.encoding)
|
249
265
|
soap_obj = type.new(str)
|
250
266
|
else
|
@@ -265,7 +281,7 @@ module RegistrySupport
|
|
265
281
|
if value.is_a?(klass)
|
266
282
|
v
|
267
283
|
else
|
268
|
-
klass.
|
284
|
+
klass.to_data(v)
|
269
285
|
end
|
270
286
|
end
|
271
287
|
|
@@ -141,18 +141,25 @@ class SchemaDefinition
|
|
141
141
|
attr_reader :class_for
|
142
142
|
attr_reader :elename, :type
|
143
143
|
attr_reader :qualified
|
144
|
+
attr_accessor :basetype
|
144
145
|
attr_accessor :attributes
|
145
146
|
attr_accessor :elements
|
146
147
|
|
147
|
-
def initialize(class_for, elename, type, qualified)
|
148
|
+
def initialize(class_for, elename, type, anonymous, qualified)
|
148
149
|
@class_for = class_for
|
149
150
|
@elename = elename
|
150
151
|
@type = type
|
152
|
+
@anonymous = anonymous
|
151
153
|
@qualified = qualified
|
154
|
+
@basetype = nil
|
152
155
|
@elements = EMPTY
|
153
156
|
@attributes = nil
|
154
157
|
end
|
155
158
|
|
159
|
+
def is_anonymous?
|
160
|
+
@anonymous
|
161
|
+
end
|
162
|
+
|
156
163
|
def choice?
|
157
164
|
@elements.choice?
|
158
165
|
end
|
data/lib/soap/mapping/typeMap.rb
CHANGED
@@ -16,6 +16,15 @@ TypeMap = {
|
|
16
16
|
XSD::XSDNormalizedString::Type => SOAPNormalizedString,
|
17
17
|
XSD::XSDToken::Type => SOAPToken,
|
18
18
|
XSD::XSDLanguage::Type => SOAPLanguage,
|
19
|
+
XSD::XSDNMTOKEN::Type => SOAPNMTOKEN,
|
20
|
+
XSD::XSDNMTOKENS::Type => SOAPNMTOKENS,
|
21
|
+
XSD::XSDName::Type => SOAPName,
|
22
|
+
XSD::XSDNCName::Type => SOAPNCName,
|
23
|
+
XSD::XSDID::Type => SOAPID,
|
24
|
+
XSD::XSDIDREF::Type => SOAPIDREF,
|
25
|
+
XSD::XSDIDREFS::Type => SOAPIDREFS,
|
26
|
+
XSD::XSDENTITY::Type => SOAPENTITY,
|
27
|
+
XSD::XSDENTITIES::Type => SOAPENTITIES,
|
19
28
|
XSD::XSDBoolean::Type => SOAPBoolean,
|
20
29
|
XSD::XSDDecimal::Type => SOAPDecimal,
|
21
30
|
XSD::XSDFloat::Type => SOAPFloat,
|
@@ -52,6 +61,15 @@ TypeMap = {
|
|
52
61
|
SOAP::SOAPNormalizedString::Type => SOAPNormalizedString,
|
53
62
|
SOAP::SOAPToken::Type => SOAPToken,
|
54
63
|
SOAP::SOAPLanguage::Type => SOAPLanguage,
|
64
|
+
SOAP::SOAPNMTOKEN::Type => SOAPNMTOKEN,
|
65
|
+
SOAP::SOAPNMTOKENS::Type => SOAPNMTOKENS,
|
66
|
+
SOAP::SOAPName::Type => SOAPName,
|
67
|
+
SOAP::SOAPNCName::Type => SOAPNCName,
|
68
|
+
SOAP::SOAPID::Type => SOAPID,
|
69
|
+
SOAP::SOAPIDREF::Type => SOAPIDREF,
|
70
|
+
SOAP::SOAPIDREFS::Type => SOAPIDREFS,
|
71
|
+
SOAP::SOAPENTITY::Type => SOAPENTITY,
|
72
|
+
SOAP::SOAPENTITIES::Type => SOAPENTITIES,
|
55
73
|
SOAP::SOAPBoolean::SOAPENCType => SOAPBoolean,
|
56
74
|
SOAP::SOAPDecimal::SOAPENCType => SOAPDecimal,
|
57
75
|
SOAP::SOAPFloat::SOAPENCType => SOAPFloat,
|
@@ -55,9 +55,15 @@ class WSDLEncodedRegistry < EncodedRegistry
|
|
55
55
|
|
56
56
|
# map anything for now: must refer WSDL while mapping. [ToDo]
|
57
57
|
def soap2obj(node, obj_class = nil)
|
58
|
+
cause = nil
|
58
59
|
begin
|
59
|
-
|
60
|
+
unless obj_class
|
61
|
+
typestr = Mapping.safeconstname(node.elename.name)
|
62
|
+
obj_class = Mapping.class_from_name(typestr)
|
63
|
+
end
|
64
|
+
return Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class)
|
60
65
|
rescue MappingError
|
66
|
+
cause = $!
|
61
67
|
end
|
62
68
|
if @excn_handler_soap2obj
|
63
69
|
begin
|
@@ -67,7 +73,7 @@ class WSDLEncodedRegistry < EncodedRegistry
|
|
67
73
|
rescue Exception
|
68
74
|
end
|
69
75
|
end
|
70
|
-
raise MappingError.new("cannot map #{node.type.name} to Ruby object")
|
76
|
+
raise MappingError.new("cannot map #{node.type.name} to Ruby object", cause)
|
71
77
|
end
|
72
78
|
|
73
79
|
private
|
@@ -198,54 +204,6 @@ private
|
|
198
204
|
Mapping._obj2soap(child_obj, self, element.type || element.name))
|
199
205
|
end
|
200
206
|
end
|
201
|
-
|
202
|
-
def any2obj(node, obj_class)
|
203
|
-
unless obj_class
|
204
|
-
typestr = XSD::CodeGen::GenSupport.safeconstname(node.elename.name)
|
205
|
-
obj_class = Mapping.class_from_name(typestr)
|
206
|
-
end
|
207
|
-
if obj_class and obj_class.class_variables.include?('@@schema_element')
|
208
|
-
soap2stubobj(node, obj_class)
|
209
|
-
else
|
210
|
-
Mapping._soap2obj(node, Mapping::DefaultRegistry, obj_class)
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
def soap2stubobj(node, obj_class)
|
215
|
-
obj = Mapping.create_empty_object(obj_class)
|
216
|
-
unless node.is_a?(SOAPNil)
|
217
|
-
add_elements2stubobj(node, obj)
|
218
|
-
end
|
219
|
-
obj
|
220
|
-
end
|
221
|
-
|
222
|
-
def add_elements2stubobj(node, obj)
|
223
|
-
definition = Mapping.schema_definition_classdef(obj.class)
|
224
|
-
vars = {}
|
225
|
-
node.each do |name, value|
|
226
|
-
item = definition.elements.find { |k, v| k.elename == value.elename }
|
227
|
-
if item and item.mapped_class
|
228
|
-
# klass must be a SOAPBasetype or a class
|
229
|
-
if item.mapped_class.include?(::SOAP::SOAPBasetype)
|
230
|
-
if value.respond_to?(:data)
|
231
|
-
child = item.mapped_class.new(value.data).data
|
232
|
-
else
|
233
|
-
child = item.mapped_class.new(nil).data
|
234
|
-
end
|
235
|
-
else
|
236
|
-
child = Mapping._soap2obj(value, self, item.mapped_class)
|
237
|
-
end
|
238
|
-
else # untyped element is treated as anyType.
|
239
|
-
child = Mapping._soap2obj(value, self)
|
240
|
-
end
|
241
|
-
if item and item.as_array?
|
242
|
-
(vars[name] ||= []) << child
|
243
|
-
else
|
244
|
-
vars[name] = child
|
245
|
-
end
|
246
|
-
end
|
247
|
-
Mapping.set_attributes(obj, vars)
|
248
|
-
end
|
249
207
|
end
|
250
208
|
|
251
209
|
|
@@ -52,10 +52,11 @@ class WSDLLiteralRegistry < LiteralRegistry
|
|
52
52
|
|
53
53
|
# node should be a SOAPElement
|
54
54
|
def soap2obj(node, obj_class = nil)
|
55
|
-
|
55
|
+
cause = nil
|
56
56
|
begin
|
57
57
|
return any2obj(node, obj_class)
|
58
58
|
rescue MappingError
|
59
|
+
cause = $!
|
59
60
|
end
|
60
61
|
if @excn_handler_soap2obj
|
61
62
|
begin
|
@@ -66,9 +67,9 @@ class WSDLLiteralRegistry < LiteralRegistry
|
|
66
67
|
end
|
67
68
|
end
|
68
69
|
if node.respond_to?(:type)
|
69
|
-
raise MappingError.new("cannot map #{node.type.name} to Ruby object")
|
70
|
+
raise MappingError.new("cannot map #{node.type.name} to Ruby object", cause)
|
70
71
|
else
|
71
|
-
raise MappingError.new("cannot map #{node.elename.name} to Ruby object")
|
72
|
+
raise MappingError.new("cannot map #{node.elename.name} to Ruby object", cause)
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
@@ -103,12 +104,14 @@ private
|
|
103
104
|
ele = nil
|
104
105
|
if type.is_a?(::WSDL::XMLSchema::SimpleType)
|
105
106
|
ele = simpleobj2soap(obj, type)
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
else # complexType
|
108
|
+
if type.simplecontent
|
109
|
+
ele = simpleobj2soap(obj, type.simplecontent)
|
110
|
+
else
|
111
|
+
ele = complexobj2soap(obj, type)
|
112
|
+
end
|
113
|
+
add_definedattributes2soap(obj, ele, type)
|
110
114
|
end
|
111
|
-
add_attributes2soap(obj, ele)
|
112
115
|
ele
|
113
116
|
end
|
114
117
|
|
@@ -128,58 +131,52 @@ private
|
|
128
131
|
|
129
132
|
def complexobj2soap(obj, type)
|
130
133
|
ele = SOAPElement.new(type.name)
|
131
|
-
|
132
|
-
|
133
|
-
else
|
134
|
-
complexobj2sequencesoap(obj, ele, type)
|
135
|
-
end
|
134
|
+
complexobj2sequencesoap(obj, ele, type, type.choice?, type.choice?)
|
135
|
+
ele
|
136
136
|
end
|
137
137
|
|
138
|
-
def complexobj2sequencesoap(obj,
|
138
|
+
def complexobj2sequencesoap(obj, soap, type, nillable, is_choice)
|
139
|
+
added = false
|
139
140
|
type.elements.each do |child_ele|
|
140
141
|
case child_ele
|
141
142
|
when WSDL::XMLSchema::Any
|
142
143
|
any = Mapping.get_attributes_for_any(obj)
|
143
144
|
SOAPElement.from_objs(any).each do |child|
|
144
|
-
|
145
|
+
soap.add(child)
|
145
146
|
end
|
147
|
+
ele_added = true
|
146
148
|
when WSDL::XMLSchema::Element
|
147
|
-
complexobj2soapchildren(obj,
|
149
|
+
ele_added = complexobj2soapchildren(obj, soap, child_ele, nillable)
|
148
150
|
when WSDL::XMLSchema::Sequence
|
149
|
-
complexobj2sequencesoap(obj, child_ele,
|
151
|
+
ele_added = complexobj2sequencesoap(obj, soap, child_ele, nillable, false)
|
150
152
|
when WSDL::XMLSchema::Choice
|
151
|
-
|
153
|
+
ele_added = complexobj2sequencesoap(obj, soap, child_ele, true, true)
|
152
154
|
else
|
153
155
|
raise MappingError.new("unknown type: #{child_ele}")
|
154
156
|
end
|
157
|
+
added = true if ele_added
|
158
|
+
break if is_choice and ele_added
|
155
159
|
end
|
156
|
-
|
157
|
-
end
|
158
|
-
|
159
|
-
def complexobj2choicesoap(obj, ele, type)
|
160
|
-
type.elements.each do |child_ele|
|
161
|
-
break if complexobj2soapchildren(obj, ele, child_ele, true)
|
162
|
-
end
|
163
|
-
ele
|
160
|
+
added
|
164
161
|
end
|
165
162
|
|
166
|
-
def complexobj2soapchildren(obj,
|
163
|
+
def complexobj2soapchildren(obj, soap, child_ele, nillable = false)
|
167
164
|
if child_ele.map_as_array?
|
168
|
-
complexobj2soapchildren_array(obj,
|
165
|
+
complexobj2soapchildren_array(obj, soap, child_ele, nillable)
|
169
166
|
else
|
170
|
-
complexobj2soapchildren_single(obj,
|
167
|
+
complexobj2soapchildren_single(obj, soap, child_ele, nillable)
|
171
168
|
end
|
172
169
|
end
|
173
170
|
|
174
|
-
def complexobj2soapchildren_array(obj,
|
171
|
+
def complexobj2soapchildren_array(obj, soap, child_ele, nillable)
|
175
172
|
child = Mapping.get_attribute(obj, child_ele.name.name)
|
176
173
|
if child.nil? and obj.is_a?(::Array)
|
177
174
|
child = obj
|
178
175
|
end
|
179
176
|
if child.nil?
|
180
|
-
return false if
|
177
|
+
return false if nillable
|
181
178
|
if child_soap = nil2soap(child_ele)
|
182
|
-
|
179
|
+
soap.add(child_soap)
|
183
180
|
return true
|
184
181
|
else
|
185
182
|
return false
|
@@ -190,32 +187,32 @@ private
|
|
190
187
|
end
|
191
188
|
child.each do |item|
|
192
189
|
if item.is_a?(SOAPElement)
|
193
|
-
|
190
|
+
soap.add(item)
|
194
191
|
else
|
195
192
|
child_soap = obj2elesoap(item, child_ele)
|
196
|
-
|
193
|
+
soap.add(child_soap)
|
197
194
|
end
|
198
195
|
end
|
199
196
|
true
|
200
197
|
end
|
201
198
|
|
202
|
-
def complexobj2soapchildren_single(obj,
|
199
|
+
def complexobj2soapchildren_single(obj, soap, child_ele, nillable)
|
203
200
|
child = Mapping.get_attribute(obj, child_ele.name.name)
|
204
201
|
case child
|
205
202
|
when NilClass
|
206
|
-
return false if
|
203
|
+
return false if nillable
|
207
204
|
if child_soap = nil2soap(child_ele)
|
208
|
-
|
205
|
+
soap.add(child_soap)
|
209
206
|
true
|
210
207
|
else
|
211
208
|
false
|
212
209
|
end
|
213
210
|
when SOAPElement
|
214
|
-
|
211
|
+
soap.add(child)
|
215
212
|
true
|
216
213
|
else
|
217
214
|
child_soap = obj2elesoap(child, child_ele)
|
218
|
-
|
215
|
+
soap.add(child_soap)
|
219
216
|
true
|
220
217
|
end
|
221
218
|
end
|
@@ -230,6 +227,15 @@ private
|
|
230
227
|
nil
|
231
228
|
end
|
232
229
|
end
|
230
|
+
|
231
|
+
def add_definedattributes2soap(obj, ele, typedef)
|
232
|
+
if typedef.attributes
|
233
|
+
typedef.attributes.each do |at|
|
234
|
+
value = get_xmlattr_value(obj, at.name)
|
235
|
+
ele.extraattr[at.name] = value unless value.nil?
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
233
239
|
end
|
234
240
|
|
235
241
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# SOAP4R - Nested exception implementation
|
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
|
+
module SOAP
|
10
|
+
|
11
|
+
|
12
|
+
module NestedException
|
13
|
+
attr_reader :cause
|
14
|
+
attr_reader :original_backtraace
|
15
|
+
|
16
|
+
def initialize(msg = nil, cause = nil)
|
17
|
+
super(msg)
|
18
|
+
@cause = cause
|
19
|
+
@original_backtrace = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_backtrace(backtrace)
|
23
|
+
if @cause and @cause.respond_to?(:backtrace)
|
24
|
+
@original_backtrace = backtrace
|
25
|
+
=begin
|
26
|
+
# for agressive backtrace abstraction: 'here' only should not be good
|
27
|
+
here = @original_backtrace[0]
|
28
|
+
backtrace = Array[*@cause.backtrace]
|
29
|
+
backtrace[0] = "#{backtrace[0]}: #{@cause} (#{@cause.class})"
|
30
|
+
backtrace.unshift(here)
|
31
|
+
=end
|
32
|
+
# just join the nested backtrace at the tail of backtrace
|
33
|
+
caused = Array[*@cause.backtrace]
|
34
|
+
caused[0] = "#{caused[0]}: #{@cause} (#{@cause.class}) [NESTED]"
|
35
|
+
backtrace += caused
|
36
|
+
end
|
37
|
+
super(backtrace)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|