soap4r_es 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/wsdl2ruby.rb +140 -0
- data/bin/wsdl2ruby_rails.rb +140 -0
- data/bin/xsd2ruby.rb +92 -0
- data/lib/soap/attachment.rb +109 -0
- data/lib/soap/attrproxy.rb +35 -0
- data/lib/soap/baseData.rb +1095 -0
- data/lib/soap/element.rb +278 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
- data/lib/soap/encodingstyle/handler.rb +121 -0
- data/lib/soap/encodingstyle/literalHandler.rb +196 -0
- data/lib/soap/encodingstyle/soapHandler.rb +560 -0
- data/lib/soap/filter/filterchain.rb +52 -0
- data/lib/soap/filter/handler.rb +32 -0
- data/lib/soap/filter/streamhandler.rb +30 -0
- data/lib/soap/filter.rb +14 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +64 -0
- data/lib/soap/header/handlerset.rb +78 -0
- data/lib/soap/header/mappinghandler.rb +48 -0
- data/lib/soap/header/simplehandler.rb +45 -0
- data/lib/soap/httpconfigloader.rb +140 -0
- data/lib/soap/mapping/encodedregistry.rb +541 -0
- data/lib/soap/mapping/factory.rb +389 -0
- data/lib/soap/mapping/literalregistry.rb +392 -0
- data/lib/soap/mapping/mapping.rb +577 -0
- data/lib/soap/mapping/registry.rb +297 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +171 -0
- data/lib/soap/mapping/typeMap.rb +107 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/lib/soap/mapping.rb +13 -0
- data/lib/soap/marshal.rb +60 -0
- data/lib/soap/mimemessage.rb +243 -0
- data/lib/soap/nestedexception.rb +43 -0
- data/lib/soap/netHttpClient.rb +242 -0
- data/lib/soap/ns.rb +39 -0
- data/lib/soap/parser.rb +253 -0
- data/lib/soap/processor.rb +67 -0
- data/lib/soap/property.rb +330 -0
- data/lib/soap/proxy.rb +15 -0
- data/lib/soap/rpc/cgistub.rb +249 -0
- data/lib/soap/rpc/driver.rb +222 -0
- data/lib/soap/rpc/element.rb +375 -0
- data/lib/soap/rpc/httpserver.rb +144 -0
- data/lib/soap/rpc/methodDef.rb +69 -0
- data/lib/soap/rpc/proxy.rb +573 -0
- data/lib/soap/rpc/router.rb +672 -0
- data/lib/soap/rpc/rpc.rb +26 -0
- data/lib/soap/rpc/soaplet.rb +201 -0
- data/lib/soap/rpc/standaloneServer.rb +44 -0
- data/lib/soap/soap.rb +163 -0
- data/lib/soap/streamHandler.rb +302 -0
- data/lib/soap/version.rb +12 -0
- data/lib/soap/wsdlDriver.rb +165 -0
- data/lib/wsdl/binding.rb +66 -0
- data/lib/wsdl/data.rb +65 -0
- data/lib/wsdl/definitions.rb +237 -0
- data/lib/wsdl/documentation.rb +33 -0
- data/lib/wsdl/import.rb +81 -0
- data/lib/wsdl/importer.rb +39 -0
- data/lib/wsdl/info.rb +51 -0
- data/lib/wsdl/message.rb +55 -0
- data/lib/wsdl/operation.rb +152 -0
- data/lib/wsdl/operationBinding.rb +241 -0
- data/lib/wsdl/param.rb +94 -0
- data/lib/wsdl/parser.rb +180 -0
- data/lib/wsdl/part.rb +53 -0
- data/lib/wsdl/port.rb +67 -0
- data/lib/wsdl/portType.rb +76 -0
- data/lib/wsdl/service.rb +62 -0
- data/lib/wsdl/soap/address.rb +41 -0
- data/lib/wsdl/soap/binding.rb +50 -0
- data/lib/wsdl/soap/body.rb +59 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
- data/lib/wsdl/soap/classDefCreator.rb +529 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +242 -0
- data/lib/wsdl/soap/classNameCreator.rb +57 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
- data/lib/wsdl/soap/complexType.rb +174 -0
- data/lib/wsdl/soap/data.rb +43 -0
- data/lib/wsdl/soap/definitions.rb +201 -0
- data/lib/wsdl/soap/driverCreator.rb +121 -0
- data/lib/wsdl/soap/element.rb +34 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
- data/lib/wsdl/soap/fault.rb +57 -0
- data/lib/wsdl/soap/header.rb +87 -0
- data/lib/wsdl/soap/headerfault.rb +57 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +380 -0
- data/lib/wsdl/soap/methodDefCreator.rb +200 -0
- data/lib/wsdl/soap/operation.rb +113 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
- data/lib/wsdl/soap/servletStubCreator.rb +105 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +249 -0
- data/lib/wsdl/types.rb +45 -0
- data/lib/wsdl/wsdl.rb +25 -0
- data/lib/wsdl/xmlSchema/all.rb +25 -0
- data/lib/wsdl/xmlSchema/annotation.rb +35 -0
- data/lib/wsdl/xmlSchema/any.rb +62 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
- data/lib/wsdl/xmlSchema/attribute.rb +105 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
- data/lib/wsdl/xmlSchema/choice.rb +59 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
- data/lib/wsdl/xmlSchema/complexType.rb +194 -0
- data/lib/wsdl/xmlSchema/content.rb +96 -0
- data/lib/wsdl/xmlSchema/data.rb +117 -0
- data/lib/wsdl/xmlSchema/element.rb +154 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
- data/lib/wsdl/xmlSchema/group.rb +101 -0
- data/lib/wsdl/xmlSchema/import.rb +53 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
- data/lib/wsdl/xmlSchema/importer.rb +103 -0
- data/lib/wsdl/xmlSchema/include.rb +48 -0
- data/lib/wsdl/xmlSchema/length.rb +38 -0
- data/lib/wsdl/xmlSchema/list.rb +49 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/minlength.rb +38 -0
- data/lib/wsdl/xmlSchema/parser.rb +168 -0
- data/lib/wsdl/xmlSchema/pattern.rb +37 -0
- data/lib/wsdl/xmlSchema/ref.rb +34 -0
- data/lib/wsdl/xmlSchema/schema.rb +179 -0
- data/lib/wsdl/xmlSchema/sequence.rb +55 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
- data/lib/wsdl/xmlSchema/union.rb +36 -0
- data/lib/wsdl/xmlSchema/unique.rb +35 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +177 -0
- data/lib/xsd/charset.rb +190 -0
- data/lib/xsd/codegen/classdef.rb +230 -0
- data/lib/xsd/codegen/commentdef.rb +35 -0
- data/lib/xsd/codegen/gensupport.rb +277 -0
- data/lib/xsd/codegen/methoddef.rb +71 -0
- data/lib/xsd/codegen/moduledef.rb +209 -0
- data/lib/xsd/codegen.rb +13 -0
- data/lib/xsd/datatypes.rb +1465 -0
- data/lib/xsd/datatypes1999.rb +21 -0
- data/lib/xsd/iconvcharset.rb +33 -0
- data/lib/xsd/mapping.rb +69 -0
- data/lib/xsd/namedelements.rb +133 -0
- data/lib/xsd/ns.rb +183 -0
- data/lib/xsd/qname.rb +80 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +136 -0
- data/lib/xsd/xmlparser/nokogiriparser.rb +63 -0
- data/lib/xsd/xmlparser/ogaparser.rb +53 -0
- data/lib/xsd/xmlparser/oxparser.rb +97 -0
- data/lib/xsd/xmlparser/parser.rb +101 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/xsd/xmlparser.rb +81 -0
- metadata +240 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
# SOAP4R - Mapping factory.
|
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
|
4
|
+
|
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
|
7
|
+
# either the dual license version in 2003, or any later version.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
module SOAP
|
|
11
|
+
module Mapping
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Factory
|
|
15
|
+
include TraverseSupport
|
|
16
|
+
|
|
17
|
+
def initialize
|
|
18
|
+
# nothing to do
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def obj2soap(soap_class, obj, info, map)
|
|
22
|
+
raise NotImplementError.new
|
|
23
|
+
# return soap_obj
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def soap2obj(obj_class, node, info, map)
|
|
27
|
+
raise NotImplementError.new
|
|
28
|
+
# return convert_succeeded_or_not, obj
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setiv2obj(obj, node, map)
|
|
32
|
+
return if node.nil?
|
|
33
|
+
if obj.is_a?(Array)
|
|
34
|
+
setiv2ary(obj, node, map)
|
|
35
|
+
else
|
|
36
|
+
setiv2struct(obj, node, map)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def setiv2soap(node, obj, map)
|
|
41
|
+
if obj.class.class_variable_defined?('@@schema_element')
|
|
42
|
+
setdefinediv2soap(node, obj, map)
|
|
43
|
+
else
|
|
44
|
+
# should we sort instance_variables? how?
|
|
45
|
+
obj.instance_variables.each do |var|
|
|
46
|
+
name = var.to_s.sub(/^@/, '')
|
|
47
|
+
elename = Mapping.name2elename(name)
|
|
48
|
+
node.add(elename,
|
|
49
|
+
Mapping._obj2soap(obj.instance_variable_get(var), map))
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
def setdefinediv2soap(ele, obj, map)
|
|
57
|
+
definition = Mapping.schema_definition_classdef(obj.class)
|
|
58
|
+
definition.elements.each do |eledef|
|
|
59
|
+
child = Mapping.get_attribute(obj, eledef.varname)
|
|
60
|
+
# extract method
|
|
61
|
+
if child.nil?
|
|
62
|
+
value = SOAPNil.new
|
|
63
|
+
elsif child.is_a?(XSD::NSDBase)
|
|
64
|
+
value = child
|
|
65
|
+
else
|
|
66
|
+
klass = Mapping.class_from_name(eledef.type)
|
|
67
|
+
if klass && klass.include?(::SOAP::SOAPBasetype)
|
|
68
|
+
value = klass.new(child)
|
|
69
|
+
else
|
|
70
|
+
# should check klass matches an actual object?
|
|
71
|
+
value = Mapping._obj2soap(child, map)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
ele.add(eledef.elename.name, value)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def setiv2ary(obj, node, map)
|
|
79
|
+
node.each do |name, value|
|
|
80
|
+
Array.instance_method(:<<).bind(obj).call(Mapping._soap2obj(value, map))
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def setiv2struct(obj, node, map)
|
|
85
|
+
vars = {}
|
|
86
|
+
node.each do |name, value|
|
|
87
|
+
vars[Mapping.elename2name(name)] = Mapping._soap2obj(value, map)
|
|
88
|
+
end
|
|
89
|
+
Mapping.set_attributes(obj, vars)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def anonymous_class?(obj)
|
|
93
|
+
name = obj.class.name
|
|
94
|
+
name.nil? or name.empty? # 1.8 returns ""
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
class StringFactory_ < Factory
|
|
99
|
+
def initialize(allow_original_mapping = false)
|
|
100
|
+
super()
|
|
101
|
+
@allow_original_mapping = allow_original_mapping
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def obj2soap(soap_class, obj, info, map)
|
|
105
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
|
106
|
+
return nil
|
|
107
|
+
end
|
|
108
|
+
begin
|
|
109
|
+
encoded = XSD::Charset.encoding_conv(obj, Mapping.external_ces,
|
|
110
|
+
XSD::Charset.encoding)
|
|
111
|
+
soap_obj = soap_class.new(encoded)
|
|
112
|
+
rescue XSD::ValueSpaceError
|
|
113
|
+
return nil
|
|
114
|
+
end
|
|
115
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
116
|
+
soap_obj
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def soap2obj(obj_class, node, info, map)
|
|
120
|
+
obj = Mapping.create_empty_object(obj_class)
|
|
121
|
+
decoded = XSD::Charset.encoding_conv(node.data, XSD::Charset.encoding,
|
|
122
|
+
Mapping.external_ces)
|
|
123
|
+
obj.replace(decoded)
|
|
124
|
+
mark_unmarshalled_obj(node, obj)
|
|
125
|
+
return true, obj
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
class FixnumFactory_ < Factory
|
|
130
|
+
def obj2soap(soap_class, obj, info, map)
|
|
131
|
+
soap_obj = nil
|
|
132
|
+
begin
|
|
133
|
+
soap_obj = soap_class.new(obj)
|
|
134
|
+
rescue XSD::ValueSpaceError
|
|
135
|
+
return nil
|
|
136
|
+
end
|
|
137
|
+
soap_obj
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def soap2obj(obj_class, node, info, map)
|
|
141
|
+
obj = node.data
|
|
142
|
+
return true, obj
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
class BasetypeFactory_ < Factory
|
|
147
|
+
def initialize(allow_original_mapping = false)
|
|
148
|
+
super()
|
|
149
|
+
@allow_original_mapping = allow_original_mapping
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def obj2soap(soap_class, obj, info, map)
|
|
153
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
|
154
|
+
return nil
|
|
155
|
+
end
|
|
156
|
+
soap_obj = nil
|
|
157
|
+
begin
|
|
158
|
+
soap_obj = soap_class.new(obj)
|
|
159
|
+
rescue XSD::ValueSpaceError
|
|
160
|
+
return nil
|
|
161
|
+
end
|
|
162
|
+
if @allow_original_mapping
|
|
163
|
+
# Basetype except String should not be multiref-ed in SOAP/1.1.
|
|
164
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
165
|
+
end
|
|
166
|
+
soap_obj
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def soap2obj(obj_class, node, info, map)
|
|
170
|
+
obj = node.data
|
|
171
|
+
mark_unmarshalled_obj(node, obj)
|
|
172
|
+
return true, obj
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
class DateTimeFactory_ < Factory
|
|
177
|
+
def initialize(allow_original_mapping = false)
|
|
178
|
+
super()
|
|
179
|
+
@allow_original_mapping = allow_original_mapping
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def obj2soap(soap_class, obj, info, map)
|
|
183
|
+
if !@allow_original_mapping and
|
|
184
|
+
Time === obj and !obj.instance_variables.empty?
|
|
185
|
+
return nil
|
|
186
|
+
end
|
|
187
|
+
soap_obj = nil
|
|
188
|
+
begin
|
|
189
|
+
soap_obj = soap_class.new(obj)
|
|
190
|
+
rescue XSD::ValueSpaceError
|
|
191
|
+
return nil
|
|
192
|
+
end
|
|
193
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
194
|
+
soap_obj
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def soap2obj(obj_class, node, info, map)
|
|
198
|
+
if node.respond_to?(:to_obj)
|
|
199
|
+
obj = node.to_obj(obj_class)
|
|
200
|
+
return false if obj.nil?
|
|
201
|
+
mark_unmarshalled_obj(node, obj)
|
|
202
|
+
return true, obj
|
|
203
|
+
else
|
|
204
|
+
return false
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
class Base64Factory_ < Factory
|
|
210
|
+
def obj2soap(soap_class, obj, info, map)
|
|
211
|
+
return nil unless obj.instance_variables.empty?
|
|
212
|
+
soap_obj = soap_class.new(obj)
|
|
213
|
+
mark_marshalled_obj(obj, soap_obj) if soap_obj
|
|
214
|
+
soap_obj
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def soap2obj(obj_class, node, info, map)
|
|
218
|
+
obj = node.string
|
|
219
|
+
mark_unmarshalled_obj(node, obj)
|
|
220
|
+
return true, obj
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
class URIFactory_ < Factory
|
|
225
|
+
def obj2soap(soap_class, obj, info, map)
|
|
226
|
+
soap_obj = soap_class.new(obj)
|
|
227
|
+
mark_marshalled_obj(obj, soap_obj) if soap_obj
|
|
228
|
+
soap_obj
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def soap2obj(obj_class, node, info, map)
|
|
232
|
+
obj = node.data
|
|
233
|
+
mark_unmarshalled_obj(node, obj)
|
|
234
|
+
return true, obj
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
class ArrayFactory_ < Factory
|
|
239
|
+
def initialize(allow_original_mapping = false)
|
|
240
|
+
super()
|
|
241
|
+
@allow_original_mapping = allow_original_mapping
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
# [[1], [2]] is converted to Array of Array, not 2-D Array.
|
|
245
|
+
# To create M-D Array, you must call Mapping.ary2md.
|
|
246
|
+
def obj2soap(soap_class, obj, info, map)
|
|
247
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
|
248
|
+
return nil
|
|
249
|
+
end
|
|
250
|
+
arytype = Mapping.obj2element(obj)
|
|
251
|
+
if arytype.name
|
|
252
|
+
arytype.namespace ||= RubyTypeNamespace
|
|
253
|
+
else
|
|
254
|
+
arytype = XSD::AnyTypeName
|
|
255
|
+
end
|
|
256
|
+
soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
|
|
257
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
258
|
+
obj.each do |item|
|
|
259
|
+
soap_obj.add(Mapping._obj2soap(item, map))
|
|
260
|
+
end
|
|
261
|
+
soap_obj
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def soap2obj(obj_class, node, info, map)
|
|
265
|
+
obj = Mapping.create_empty_object(obj_class)
|
|
266
|
+
mark_unmarshalled_obj(node, obj)
|
|
267
|
+
node.soap2array(obj) do |elem|
|
|
268
|
+
elem ? Mapping._soap2obj(elem, map) : nil
|
|
269
|
+
end
|
|
270
|
+
return true, obj
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
class TypedArrayFactory_ < Factory
|
|
275
|
+
def initialize(allow_original_mapping = false)
|
|
276
|
+
super()
|
|
277
|
+
@allow_original_mapping = allow_original_mapping
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
def obj2soap(soap_class, obj, info, map)
|
|
281
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
|
282
|
+
return nil
|
|
283
|
+
end
|
|
284
|
+
arytype = info[:type] || info[0]
|
|
285
|
+
soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
|
|
286
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
287
|
+
obj.each do |var|
|
|
288
|
+
soap_obj.add(Mapping._obj2soap(var, map))
|
|
289
|
+
end
|
|
290
|
+
soap_obj
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def soap2obj(obj_class, node, info, map)
|
|
294
|
+
if node.rank > 1
|
|
295
|
+
return false
|
|
296
|
+
end
|
|
297
|
+
arytype = info[:type] || info[0]
|
|
298
|
+
unless node.arytype == arytype
|
|
299
|
+
return false
|
|
300
|
+
end
|
|
301
|
+
obj = Mapping.create_empty_object(obj_class)
|
|
302
|
+
mark_unmarshalled_obj(node, obj)
|
|
303
|
+
node.soap2array(obj) do |elem|
|
|
304
|
+
elem ? Mapping._soap2obj(elem, map) : nil
|
|
305
|
+
end
|
|
306
|
+
return true, obj
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
class TypedStructFactory_ < Factory
|
|
311
|
+
def obj2soap(soap_class, obj, info, map)
|
|
312
|
+
type = info[:type] || info[0]
|
|
313
|
+
soap_obj = soap_class.new(type)
|
|
314
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
315
|
+
if obj.class <= SOAP::Marshallable
|
|
316
|
+
setiv2soap(soap_obj, obj, map)
|
|
317
|
+
else
|
|
318
|
+
# allow to serialize an instance of unmarked class
|
|
319
|
+
setiv2soap(soap_obj, obj, map)
|
|
320
|
+
end
|
|
321
|
+
soap_obj
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
def soap2obj(obj_class, node, info, map)
|
|
325
|
+
type = info[:type] || info[0]
|
|
326
|
+
unless node.type == type
|
|
327
|
+
return false
|
|
328
|
+
end
|
|
329
|
+
obj = Mapping.create_empty_object(obj_class)
|
|
330
|
+
mark_unmarshalled_obj(node, obj)
|
|
331
|
+
setiv2obj(obj, node, map)
|
|
332
|
+
return true, obj
|
|
333
|
+
end
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
MapQName = XSD::QName.new(ApacheSOAPTypeNamespace, 'Map')
|
|
337
|
+
class HashFactory_ < Factory
|
|
338
|
+
def initialize(allow_original_mapping = false)
|
|
339
|
+
super()
|
|
340
|
+
@allow_original_mapping = allow_original_mapping
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def obj2soap(soap_class, obj, info, map)
|
|
344
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
|
345
|
+
return nil
|
|
346
|
+
end
|
|
347
|
+
if !obj.default.nil? or
|
|
348
|
+
(obj.respond_to?(:default_proc) and obj.default_proc)
|
|
349
|
+
return nil
|
|
350
|
+
end
|
|
351
|
+
soap_obj = SOAPStruct.new(MapQName)
|
|
352
|
+
mark_marshalled_obj(obj, soap_obj)
|
|
353
|
+
obj.each do |key, value|
|
|
354
|
+
elem = SOAPStruct.new
|
|
355
|
+
elem.add("key", Mapping._obj2soap(key, map))
|
|
356
|
+
elem.add("value", Mapping._obj2soap(value, map))
|
|
357
|
+
# ApacheAxis allows only 'item' here.
|
|
358
|
+
soap_obj.add("item", elem)
|
|
359
|
+
end
|
|
360
|
+
soap_obj
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def soap2obj(obj_class, node, info, map)
|
|
364
|
+
unless node.type == MapQName
|
|
365
|
+
return false
|
|
366
|
+
end
|
|
367
|
+
if node.class == SOAPStruct and node.key?('default')
|
|
368
|
+
return false
|
|
369
|
+
end
|
|
370
|
+
obj = Mapping.create_empty_object(obj_class)
|
|
371
|
+
mark_unmarshalled_obj(node, obj)
|
|
372
|
+
if node.class == SOAPStruct
|
|
373
|
+
node.each do |key, value|
|
|
374
|
+
obj[Mapping._soap2obj(value['key'], map)] =
|
|
375
|
+
Mapping._soap2obj(value['value'], map)
|
|
376
|
+
end
|
|
377
|
+
else
|
|
378
|
+
node.each do |value|
|
|
379
|
+
obj[Mapping._soap2obj(value['key'], map)] =
|
|
380
|
+
Mapping._soap2obj(value['value'], map)
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
return true, obj
|
|
384
|
+
end
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
end
|
|
389
|
+
end
|