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
@@ -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
|