reidiculous-actionwebservice-client 3.0.4
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/CHANGELOG +320 -0
- data/MIT-LICENSE +21 -0
- data/README +381 -0
- data/Rakefile +180 -0
- data/TODO +32 -0
- data/lib/action_web_service.rb +71 -0
- data/lib/action_web_service/api.rb +297 -0
- data/lib/action_web_service/base.rb +38 -0
- data/lib/action_web_service/casting.rb +149 -0
- data/lib/action_web_service/client.rb +3 -0
- data/lib/action_web_service/client/base.rb +28 -0
- data/lib/action_web_service/client/soap_client.rb +113 -0
- data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
- data/lib/action_web_service/container.rb +3 -0
- data/lib/action_web_service/container/action_controller_container.rb +93 -0
- data/lib/action_web_service/container/delegated_container.rb +86 -0
- data/lib/action_web_service/container/direct_container.rb +69 -0
- data/lib/action_web_service/dispatcher.rb +2 -0
- data/lib/action_web_service/dispatcher/abstract.rb +207 -0
- data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
- data/lib/action_web_service/invocation.rb +202 -0
- data/lib/action_web_service/protocol.rb +4 -0
- data/lib/action_web_service/protocol/abstract.rb +115 -0
- data/lib/action_web_service/protocol/discovery.rb +37 -0
- data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
- data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
- data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
- data/lib/action_web_service/scaffolding.rb +281 -0
- data/lib/action_web_service/soap/attachment.rb +107 -0
- data/lib/action_web_service/soap/baseData.rb +942 -0
- data/lib/action_web_service/soap/element.rb +258 -0
- data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
- data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
- data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
- data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
- data/lib/action_web_service/soap/generator.rb +268 -0
- data/lib/action_web_service/soap/header/handler.rb +57 -0
- data/lib/action_web_service/soap/header/handlerset.rb +70 -0
- data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
- data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
- data/lib/action_web_service/soap/mapping.rb +10 -0
- data/lib/action_web_service/soap/mapping/factory.rb +355 -0
- data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
- data/lib/action_web_service/soap/mapping/registry.rb +541 -0
- data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
- data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
- data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
- data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
- data/lib/action_web_service/soap/marshal.rb +59 -0
- data/lib/action_web_service/soap/mimemessage.rb +240 -0
- data/lib/action_web_service/soap/netHttpClient.rb +190 -0
- data/lib/action_web_service/soap/parser.rb +251 -0
- data/lib/action_web_service/soap/processor.rb +66 -0
- data/lib/action_web_service/soap/property.rb +333 -0
- data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
- data/lib/action_web_service/soap/rpc/driver.rb +254 -0
- data/lib/action_web_service/soap/rpc/element.rb +325 -0
- data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
- data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
- data/lib/action_web_service/soap/rpc/router.rb +594 -0
- data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
- data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
- data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
- data/lib/action_web_service/soap/soap.rb +140 -0
- data/lib/action_web_service/soap/streamHandler.rb +229 -0
- data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
- data/lib/action_web_service/struct.rb +64 -0
- data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
- data/lib/action_web_service/support/signature_types.rb +227 -0
- data/lib/action_web_service/test_invoke.rb +110 -0
- data/lib/action_web_service/version.rb +9 -0
- data/lib/action_web_service/wsdl/binding.rb +65 -0
- data/lib/action_web_service/wsdl/data.rb +64 -0
- data/lib/action_web_service/wsdl/definitions.rb +250 -0
- data/lib/action_web_service/wsdl/documentation.rb +32 -0
- data/lib/action_web_service/wsdl/import.rb +80 -0
- data/lib/action_web_service/wsdl/importer.rb +38 -0
- data/lib/action_web_service/wsdl/info.rb +39 -0
- data/lib/action_web_service/wsdl/message.rb +54 -0
- data/lib/action_web_service/wsdl/operation.rb +130 -0
- data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
- data/lib/action_web_service/wsdl/param.rb +85 -0
- data/lib/action_web_service/wsdl/parser.rb +163 -0
- data/lib/action_web_service/wsdl/part.rb +52 -0
- data/lib/action_web_service/wsdl/port.rb +84 -0
- data/lib/action_web_service/wsdl/portType.rb +73 -0
- data/lib/action_web_service/wsdl/service.rb +61 -0
- data/lib/action_web_service/wsdl/soap/address.rb +40 -0
- data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
- data/lib/action_web_service/wsdl/soap/body.rb +56 -0
- data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
- data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
- data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
- data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
- data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
- data/lib/action_web_service/wsdl/soap/data.rb +42 -0
- data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
- data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
- data/lib/action_web_service/wsdl/soap/element.rb +28 -0
- data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/header.rb +86 -0
- data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
- data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
- data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
- data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
- data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
- data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
- data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
- data/lib/action_web_service/wsdl/types.rb +43 -0
- data/lib/action_web_service/wsdl/wsdl.rb +23 -0
- data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
- data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
- data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
- data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
- data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
- data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
- data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
- data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
- data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
- data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
- data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
- data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
- data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/lib/action_web_service/xsd/charset.rb +187 -0
- data/lib/action_web_service/xsd/codegen.rb +12 -0
- data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
- data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
- data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
- data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
- data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
- data/lib/action_web_service/xsd/datatypes.rb +1269 -0
- data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
- data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
- data/lib/action_web_service/xsd/mapping.rb +42 -0
- data/lib/action_web_service/xsd/namedelements.rb +95 -0
- data/lib/action_web_service/xsd/ns.rb +140 -0
- data/lib/action_web_service/xsd/qname.rb +78 -0
- data/lib/action_web_service/xsd/xmlparser.rb +61 -0
- data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
- data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
- data/lib/actionwebservice.rb +1 -0
- data/setup.rb +1379 -0
- data/test/abstract_client.rb +183 -0
- data/test/abstract_dispatcher.rb +548 -0
- data/test/abstract_unit.rb +45 -0
- data/test/api_test.rb +103 -0
- data/test/apis/auto_load_api.rb +3 -0
- data/test/apis/broken_auto_load_api.rb +2 -0
- data/test/base_test.rb +42 -0
- data/test/casting_test.rb +95 -0
- data/test/client_soap_test.rb +156 -0
- data/test/client_xmlrpc_test.rb +153 -0
- data/test/container_test.rb +73 -0
- data/test/dispatcher_action_controller_soap_test.rb +139 -0
- data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
- data/test/fixtures/db_definitions/mysql.sql +8 -0
- data/test/fixtures/db_definitions/sqlite3.sql +8 -0
- data/test/fixtures/users.yml +12 -0
- data/test/gencov +3 -0
- data/test/invocation_test.rb +185 -0
- data/test/run +6 -0
- data/test/scaffolded_controller_test.rb +146 -0
- data/test/struct_test.rb +52 -0
- data/test/test_invoke_test.rb +112 -0
- metadata +265 -0
@@ -0,0 +1,258 @@
|
|
1
|
+
# SOAP4R - SOAP elements library
|
2
|
+
# Copyright (C) 2000, 2001, 2003-2005 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 'action_web_service/xsd/qname'
|
10
|
+
require 'action_web_service/soap/baseData'
|
11
|
+
|
12
|
+
|
13
|
+
module SOAP
|
14
|
+
|
15
|
+
|
16
|
+
###
|
17
|
+
## SOAP elements
|
18
|
+
#
|
19
|
+
module SOAPEnvelopeElement; end
|
20
|
+
|
21
|
+
class SOAPFault < SOAPStruct
|
22
|
+
include SOAPEnvelopeElement
|
23
|
+
include SOAPCompoundtype
|
24
|
+
|
25
|
+
public
|
26
|
+
|
27
|
+
def faultcode
|
28
|
+
self['faultcode']
|
29
|
+
end
|
30
|
+
|
31
|
+
def faultstring
|
32
|
+
self['faultstring']
|
33
|
+
end
|
34
|
+
|
35
|
+
def faultactor
|
36
|
+
self['faultactor']
|
37
|
+
end
|
38
|
+
|
39
|
+
def detail
|
40
|
+
self['detail']
|
41
|
+
end
|
42
|
+
|
43
|
+
def faultcode=(rhs)
|
44
|
+
self['faultcode'] = rhs
|
45
|
+
end
|
46
|
+
|
47
|
+
def faultstring=(rhs)
|
48
|
+
self['faultstring'] = rhs
|
49
|
+
end
|
50
|
+
|
51
|
+
def faultactor=(rhs)
|
52
|
+
self['faultactor'] = rhs
|
53
|
+
end
|
54
|
+
|
55
|
+
def detail=(rhs)
|
56
|
+
self['detail'] = rhs
|
57
|
+
end
|
58
|
+
|
59
|
+
def initialize(faultcode = nil, faultstring = nil, faultactor = nil, detail = nil)
|
60
|
+
super(EleFaultName)
|
61
|
+
@elename = EleFaultName
|
62
|
+
@encodingstyle = EncodingNamespace
|
63
|
+
|
64
|
+
if faultcode
|
65
|
+
self.faultcode = faultcode
|
66
|
+
self.faultstring = faultstring
|
67
|
+
self.faultactor = faultactor
|
68
|
+
self.detail = detail
|
69
|
+
self.faultcode.elename = EleFaultCodeName if self.faultcode
|
70
|
+
self.faultstring.elename = EleFaultStringName if self.faultstring
|
71
|
+
self.faultactor.elename = EleFaultActorName if self.faultactor
|
72
|
+
self.detail.elename = EleFaultDetailName if self.detail
|
73
|
+
end
|
74
|
+
faultcode.parent = self if faultcode
|
75
|
+
faultstring.parent = self if faultstring
|
76
|
+
faultactor.parent = self if faultactor
|
77
|
+
detail.parent = self if detail
|
78
|
+
end
|
79
|
+
|
80
|
+
def encode(generator, ns, attrs = {})
|
81
|
+
SOAPGenerator.assign_ns(attrs, ns, EnvelopeNamespace)
|
82
|
+
SOAPGenerator.assign_ns(attrs, ns, EncodingNamespace)
|
83
|
+
attrs[ns.name(AttrEncodingStyleName)] = EncodingNamespace
|
84
|
+
name = ns.name(@elename)
|
85
|
+
generator.encode_tag(name, attrs)
|
86
|
+
yield(self.faultcode)
|
87
|
+
yield(self.faultstring)
|
88
|
+
yield(self.faultactor)
|
89
|
+
yield(self.detail) if self.detail
|
90
|
+
generator.encode_tag_end(name, true)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
class SOAPBody < SOAPStruct
|
96
|
+
include SOAPEnvelopeElement
|
97
|
+
|
98
|
+
def initialize(data = nil, is_fault = false)
|
99
|
+
super(nil)
|
100
|
+
@elename = EleBodyName
|
101
|
+
@encodingstyle = nil
|
102
|
+
if data
|
103
|
+
if data.respond_to?(:elename)
|
104
|
+
add(data.elename.name, data)
|
105
|
+
else
|
106
|
+
data.to_a.each do |datum|
|
107
|
+
add(datum.elename.name, datum)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
@is_fault = is_fault
|
112
|
+
end
|
113
|
+
|
114
|
+
def encode(generator, ns, attrs = {})
|
115
|
+
name = ns.name(@elename)
|
116
|
+
generator.encode_tag(name, attrs)
|
117
|
+
if @is_fault
|
118
|
+
yield(@data)
|
119
|
+
else
|
120
|
+
@data.each do |data|
|
121
|
+
yield(data)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
generator.encode_tag_end(name, true)
|
125
|
+
end
|
126
|
+
|
127
|
+
def root_node
|
128
|
+
@data.each do |node|
|
129
|
+
if node.root == 1
|
130
|
+
return node
|
131
|
+
end
|
132
|
+
end
|
133
|
+
# No specified root...
|
134
|
+
@data.each do |node|
|
135
|
+
if node.root != 0
|
136
|
+
return node
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
raise Parser::FormatDecodeError.new('no root element')
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
class SOAPHeaderItem < XSD::NSDBase
|
146
|
+
include SOAPEnvelopeElement
|
147
|
+
include SOAPCompoundtype
|
148
|
+
|
149
|
+
public
|
150
|
+
|
151
|
+
attr_accessor :element
|
152
|
+
attr_accessor :mustunderstand
|
153
|
+
attr_accessor :encodingstyle
|
154
|
+
|
155
|
+
def initialize(element, mustunderstand = true, encodingstyle = nil)
|
156
|
+
super()
|
157
|
+
@type = nil
|
158
|
+
@element = element
|
159
|
+
@mustunderstand = mustunderstand
|
160
|
+
@encodingstyle = encodingstyle
|
161
|
+
element.parent = self if element
|
162
|
+
end
|
163
|
+
|
164
|
+
def encode(generator, ns, attrs = {})
|
165
|
+
attrs.each do |key, value|
|
166
|
+
@element.extraattr[key] = value
|
167
|
+
end
|
168
|
+
@element.extraattr[ns.name(AttrMustUnderstandName)] =
|
169
|
+
(@mustunderstand ? '1' : '0')
|
170
|
+
if @encodingstyle
|
171
|
+
@element.extraattr[ns.name(AttrEncodingStyleName)] = @encodingstyle
|
172
|
+
end
|
173
|
+
@element.encodingstyle = @encodingstyle if !@element.encodingstyle
|
174
|
+
yield(@element)
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
|
179
|
+
class SOAPHeader < SOAPStruct
|
180
|
+
include SOAPEnvelopeElement
|
181
|
+
|
182
|
+
def initialize
|
183
|
+
super(nil)
|
184
|
+
@elename = EleHeaderName
|
185
|
+
@encodingstyle = nil
|
186
|
+
end
|
187
|
+
|
188
|
+
def encode(generator, ns, attrs = {})
|
189
|
+
name = ns.name(@elename)
|
190
|
+
generator.encode_tag(name, attrs)
|
191
|
+
@data.each do |data|
|
192
|
+
yield(data)
|
193
|
+
end
|
194
|
+
generator.encode_tag_end(name, true)
|
195
|
+
end
|
196
|
+
|
197
|
+
def add(name, value)
|
198
|
+
mu = (value.extraattr[AttrMustUnderstandName] == '1')
|
199
|
+
encstyle = value.extraattr[AttrEncodingStyleName]
|
200
|
+
item = SOAPHeaderItem.new(value, mu, encstyle)
|
201
|
+
super(name, item)
|
202
|
+
end
|
203
|
+
|
204
|
+
def length
|
205
|
+
@data.length
|
206
|
+
end
|
207
|
+
alias size length
|
208
|
+
end
|
209
|
+
|
210
|
+
|
211
|
+
class SOAPEnvelope < XSD::NSDBase
|
212
|
+
include SOAPEnvelopeElement
|
213
|
+
include SOAPCompoundtype
|
214
|
+
|
215
|
+
attr_reader :header
|
216
|
+
attr_reader :body
|
217
|
+
attr_reader :external_content
|
218
|
+
|
219
|
+
def initialize(header = nil, body = nil)
|
220
|
+
super()
|
221
|
+
@type = nil
|
222
|
+
@elename = EleEnvelopeName
|
223
|
+
@encodingstyle = nil
|
224
|
+
@header = header
|
225
|
+
@body = body
|
226
|
+
@external_content = {}
|
227
|
+
header.parent = self if header
|
228
|
+
body.parent = self if body
|
229
|
+
end
|
230
|
+
|
231
|
+
def header=(header)
|
232
|
+
header.parent = self
|
233
|
+
@header = header
|
234
|
+
end
|
235
|
+
|
236
|
+
def body=(body)
|
237
|
+
body.parent = self
|
238
|
+
@body = body
|
239
|
+
end
|
240
|
+
|
241
|
+
def encode(generator, ns, attrs = {})
|
242
|
+
SOAPGenerator.assign_ns(attrs, ns, elename.namespace, SOAPNamespaceTag)
|
243
|
+
name = ns.name(@elename)
|
244
|
+
generator.encode_tag(name, attrs)
|
245
|
+
|
246
|
+
yield(@header) if @header and @header.length > 0
|
247
|
+
yield(@body)
|
248
|
+
|
249
|
+
generator.encode_tag_end(name, true)
|
250
|
+
end
|
251
|
+
|
252
|
+
def to_ary
|
253
|
+
[header, body]
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
end
|
@@ -0,0 +1,213 @@
|
|
1
|
+
# SOAP4R - ASP.NET EncodingStyle handler library
|
2
|
+
# Copyright (C) 2001, 2003, 2005 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 'action_web_service/soap/encodingstyle/handler'
|
10
|
+
|
11
|
+
|
12
|
+
module SOAP
|
13
|
+
module EncodingStyle
|
14
|
+
|
15
|
+
|
16
|
+
class ASPDotNetHandler < Handler
|
17
|
+
Namespace = 'http://tempuri.org/ASP.NET'
|
18
|
+
add_handler
|
19
|
+
|
20
|
+
def initialize(charset = nil)
|
21
|
+
super(charset)
|
22
|
+
@textbuf = ''
|
23
|
+
@decode_typemap = nil
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
###
|
28
|
+
## encode interface.
|
29
|
+
#
|
30
|
+
def encode_data(generator, ns, data, parent)
|
31
|
+
attrs = {}
|
32
|
+
# ASPDotNetHandler is intended to be used for accessing an ASP.NET doc/lit
|
33
|
+
# service as an rpc/encoded service. in the situation, local elements
|
34
|
+
# should be qualified. propagate parent's namespace to children.
|
35
|
+
if data.elename.namespace.nil?
|
36
|
+
data.elename.namespace = parent.elename.namespace
|
37
|
+
end
|
38
|
+
name = generator.encode_name(ns, data, attrs)
|
39
|
+
case data
|
40
|
+
when SOAPRawString
|
41
|
+
generator.encode_tag(name, attrs)
|
42
|
+
generator.encode_rawstring(data.to_s)
|
43
|
+
when XSD::XSDString
|
44
|
+
generator.encode_tag(name, attrs)
|
45
|
+
generator.encode_string(@charset ?
|
46
|
+
XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s)
|
47
|
+
when XSD::XSDAnySimpleType
|
48
|
+
generator.encode_tag(name, attrs)
|
49
|
+
generator.encode_string(data.to_s)
|
50
|
+
when SOAPStruct
|
51
|
+
generator.encode_tag(name, attrs)
|
52
|
+
data.each do |key, value|
|
53
|
+
generator.encode_child(ns, value, data)
|
54
|
+
end
|
55
|
+
when SOAPArray
|
56
|
+
generator.encode_tag(name, attrs)
|
57
|
+
data.traverse do |child, *rank|
|
58
|
+
data.position = nil
|
59
|
+
generator.encode_child(ns, child, data)
|
60
|
+
end
|
61
|
+
else
|
62
|
+
raise EncodingStyleError.new(
|
63
|
+
"unknown object:#{data} in this encodingStyle")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def encode_data_end(generator, ns, data, parent)
|
68
|
+
name = generator.encode_name_end(ns, data)
|
69
|
+
cr = data.is_a?(SOAPCompoundtype)
|
70
|
+
generator.encode_tag_end(name, cr)
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
###
|
75
|
+
## decode interface.
|
76
|
+
#
|
77
|
+
class SOAPTemporalObject
|
78
|
+
attr_accessor :parent
|
79
|
+
|
80
|
+
def initialize
|
81
|
+
@parent = nil
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
class SOAPUnknown < SOAPTemporalObject
|
86
|
+
def initialize(handler, elename)
|
87
|
+
super()
|
88
|
+
@handler = handler
|
89
|
+
@elename = elename
|
90
|
+
end
|
91
|
+
|
92
|
+
def as_struct
|
93
|
+
o = SOAPStruct.decode(@elename, XSD::AnyTypeName)
|
94
|
+
o.parent = @parent
|
95
|
+
o.type.name = @name
|
96
|
+
@handler.decode_parent(@parent, o)
|
97
|
+
o
|
98
|
+
end
|
99
|
+
|
100
|
+
def as_string
|
101
|
+
o = SOAPString.decode(@elename)
|
102
|
+
o.parent = @parent
|
103
|
+
@handler.decode_parent(@parent, o)
|
104
|
+
o
|
105
|
+
end
|
106
|
+
|
107
|
+
def as_nil
|
108
|
+
o = SOAPNil.decode(@elename)
|
109
|
+
o.parent = @parent
|
110
|
+
@handler.decode_parent(@parent, o)
|
111
|
+
o
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def decode_tag(ns, elename, attrs, parent)
|
116
|
+
@textbuf = ''
|
117
|
+
o = SOAPUnknown.new(self, elename)
|
118
|
+
o.parent = parent
|
119
|
+
o
|
120
|
+
end
|
121
|
+
|
122
|
+
def decode_tag_end(ns, node)
|
123
|
+
o = node.node
|
124
|
+
if o.is_a?(SOAPUnknown)
|
125
|
+
newnode = o.as_string
|
126
|
+
# if /\A\s*\z/ =~ @textbuf
|
127
|
+
# o.as_struct
|
128
|
+
# else
|
129
|
+
# o.as_string
|
130
|
+
# end
|
131
|
+
node.replace_node(newnode)
|
132
|
+
o = node.node
|
133
|
+
end
|
134
|
+
|
135
|
+
decode_textbuf(o)
|
136
|
+
@textbuf = ''
|
137
|
+
end
|
138
|
+
|
139
|
+
def decode_text(ns, text)
|
140
|
+
# @textbuf is set at decode_tag_end.
|
141
|
+
@textbuf << text
|
142
|
+
end
|
143
|
+
|
144
|
+
def decode_prologue
|
145
|
+
end
|
146
|
+
|
147
|
+
def decode_epilogue
|
148
|
+
end
|
149
|
+
|
150
|
+
def decode_parent(parent, node)
|
151
|
+
case parent.node
|
152
|
+
when SOAPUnknown
|
153
|
+
newparent = parent.node.as_struct
|
154
|
+
node.parent = newparent
|
155
|
+
parent.replace_node(newparent)
|
156
|
+
decode_parent(parent, node)
|
157
|
+
|
158
|
+
when SOAPStruct
|
159
|
+
data = parent.node[node.elename.name]
|
160
|
+
case data
|
161
|
+
when nil
|
162
|
+
parent.node.add(node.elename.name, node)
|
163
|
+
when SOAPArray
|
164
|
+
name, type_ns = node.elename.name, node.type.namespace
|
165
|
+
data.add(node)
|
166
|
+
node.elename, node.type.namespace = name, type_ns
|
167
|
+
else
|
168
|
+
parent.node[node.elename.name] = SOAPArray.new
|
169
|
+
name, type_ns = data.elename.name, data.type.namespace
|
170
|
+
parent.node[node.elename.name].add(data)
|
171
|
+
data.elename.name, data.type.namespace = name, type_ns
|
172
|
+
name, type_ns = node.elename.name, node.type.namespace
|
173
|
+
parent.node[node.elename.name].add(node)
|
174
|
+
node.elename.name, node.type.namespace = name, type_ns
|
175
|
+
end
|
176
|
+
|
177
|
+
when SOAPArray
|
178
|
+
if node.position
|
179
|
+
parent.node[*(decode_arypos(node.position))] = node
|
180
|
+
parent.node.sparse = true
|
181
|
+
else
|
182
|
+
parent.node.add(node)
|
183
|
+
end
|
184
|
+
|
185
|
+
when SOAPBasetype
|
186
|
+
raise EncodingStyleError.new("SOAP base type must not have a child")
|
187
|
+
|
188
|
+
else
|
189
|
+
# SOAPUnknown does not have parent.
|
190
|
+
# raise EncodingStyleError.new("illegal parent: #{parent}")
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
private
|
195
|
+
|
196
|
+
def decode_textbuf(node)
|
197
|
+
if node.is_a?(XSD::XSDString)
|
198
|
+
if @charset
|
199
|
+
node.set(XSD::Charset.encoding_from_xml(@textbuf, @charset))
|
200
|
+
else
|
201
|
+
node.set(@textbuf)
|
202
|
+
end
|
203
|
+
else
|
204
|
+
# Nothing to do...
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
ASPDotNetHandler.new
|
210
|
+
|
211
|
+
|
212
|
+
end
|
213
|
+
end
|