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.
Files changed (179) hide show
  1. data/CHANGELOG +320 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +381 -0
  4. data/Rakefile +180 -0
  5. data/TODO +32 -0
  6. data/lib/action_web_service.rb +71 -0
  7. data/lib/action_web_service/api.rb +297 -0
  8. data/lib/action_web_service/base.rb +38 -0
  9. data/lib/action_web_service/casting.rb +149 -0
  10. data/lib/action_web_service/client.rb +3 -0
  11. data/lib/action_web_service/client/base.rb +28 -0
  12. data/lib/action_web_service/client/soap_client.rb +113 -0
  13. data/lib/action_web_service/client/xmlrpc_client.rb +58 -0
  14. data/lib/action_web_service/container.rb +3 -0
  15. data/lib/action_web_service/container/action_controller_container.rb +93 -0
  16. data/lib/action_web_service/container/delegated_container.rb +86 -0
  17. data/lib/action_web_service/container/direct_container.rb +69 -0
  18. data/lib/action_web_service/dispatcher.rb +2 -0
  19. data/lib/action_web_service/dispatcher/abstract.rb +207 -0
  20. data/lib/action_web_service/dispatcher/action_controller_dispatcher.rb +379 -0
  21. data/lib/action_web_service/invocation.rb +202 -0
  22. data/lib/action_web_service/protocol.rb +4 -0
  23. data/lib/action_web_service/protocol/abstract.rb +115 -0
  24. data/lib/action_web_service/protocol/discovery.rb +37 -0
  25. data/lib/action_web_service/protocol/soap_protocol.rb +176 -0
  26. data/lib/action_web_service/protocol/soap_protocol/marshaler.rb +242 -0
  27. data/lib/action_web_service/protocol/xmlrpc_protocol.rb +122 -0
  28. data/lib/action_web_service/scaffolding.rb +281 -0
  29. data/lib/action_web_service/soap/attachment.rb +107 -0
  30. data/lib/action_web_service/soap/baseData.rb +942 -0
  31. data/lib/action_web_service/soap/element.rb +258 -0
  32. data/lib/action_web_service/soap/encodingstyle/aspDotNetHandler.rb +213 -0
  33. data/lib/action_web_service/soap/encodingstyle/handler.rb +100 -0
  34. data/lib/action_web_service/soap/encodingstyle/literalHandler.rb +226 -0
  35. data/lib/action_web_service/soap/encodingstyle/soapHandler.rb +582 -0
  36. data/lib/action_web_service/soap/generator.rb +268 -0
  37. data/lib/action_web_service/soap/header/handler.rb +57 -0
  38. data/lib/action_web_service/soap/header/handlerset.rb +70 -0
  39. data/lib/action_web_service/soap/header/simplehandler.rb +44 -0
  40. data/lib/action_web_service/soap/httpconfigloader.rb +119 -0
  41. data/lib/action_web_service/soap/mapping.rb +10 -0
  42. data/lib/action_web_service/soap/mapping/factory.rb +355 -0
  43. data/lib/action_web_service/soap/mapping/mapping.rb +381 -0
  44. data/lib/action_web_service/soap/mapping/registry.rb +541 -0
  45. data/lib/action_web_service/soap/mapping/rubytypeFactory.rb +475 -0
  46. data/lib/action_web_service/soap/mapping/typeMap.rb +50 -0
  47. data/lib/action_web_service/soap/mapping/wsdlencodedregistry.rb +280 -0
  48. data/lib/action_web_service/soap/mapping/wsdlliteralregistry.rb +418 -0
  49. data/lib/action_web_service/soap/marshal.rb +59 -0
  50. data/lib/action_web_service/soap/mimemessage.rb +240 -0
  51. data/lib/action_web_service/soap/netHttpClient.rb +190 -0
  52. data/lib/action_web_service/soap/parser.rb +251 -0
  53. data/lib/action_web_service/soap/processor.rb +66 -0
  54. data/lib/action_web_service/soap/property.rb +333 -0
  55. data/lib/action_web_service/soap/rpc/cgistub.rb +206 -0
  56. data/lib/action_web_service/soap/rpc/driver.rb +254 -0
  57. data/lib/action_web_service/soap/rpc/element.rb +325 -0
  58. data/lib/action_web_service/soap/rpc/httpserver.rb +129 -0
  59. data/lib/action_web_service/soap/rpc/proxy.rb +497 -0
  60. data/lib/action_web_service/soap/rpc/router.rb +594 -0
  61. data/lib/action_web_service/soap/rpc/rpc.rb +25 -0
  62. data/lib/action_web_service/soap/rpc/soaplet.rb +162 -0
  63. data/lib/action_web_service/soap/rpc/standaloneServer.rb +43 -0
  64. data/lib/action_web_service/soap/soap.rb +140 -0
  65. data/lib/action_web_service/soap/streamHandler.rb +229 -0
  66. data/lib/action_web_service/soap/wsdlDriver.rb +575 -0
  67. data/lib/action_web_service/struct.rb +64 -0
  68. data/lib/action_web_service/support/class_inheritable_options.rb +28 -0
  69. data/lib/action_web_service/support/signature_types.rb +227 -0
  70. data/lib/action_web_service/test_invoke.rb +110 -0
  71. data/lib/action_web_service/version.rb +9 -0
  72. data/lib/action_web_service/wsdl/binding.rb +65 -0
  73. data/lib/action_web_service/wsdl/data.rb +64 -0
  74. data/lib/action_web_service/wsdl/definitions.rb +250 -0
  75. data/lib/action_web_service/wsdl/documentation.rb +32 -0
  76. data/lib/action_web_service/wsdl/import.rb +80 -0
  77. data/lib/action_web_service/wsdl/importer.rb +38 -0
  78. data/lib/action_web_service/wsdl/info.rb +39 -0
  79. data/lib/action_web_service/wsdl/message.rb +54 -0
  80. data/lib/action_web_service/wsdl/operation.rb +130 -0
  81. data/lib/action_web_service/wsdl/operationBinding.rb +108 -0
  82. data/lib/action_web_service/wsdl/param.rb +85 -0
  83. data/lib/action_web_service/wsdl/parser.rb +163 -0
  84. data/lib/action_web_service/wsdl/part.rb +52 -0
  85. data/lib/action_web_service/wsdl/port.rb +84 -0
  86. data/lib/action_web_service/wsdl/portType.rb +73 -0
  87. data/lib/action_web_service/wsdl/service.rb +61 -0
  88. data/lib/action_web_service/wsdl/soap/address.rb +40 -0
  89. data/lib/action_web_service/wsdl/soap/binding.rb +49 -0
  90. data/lib/action_web_service/wsdl/soap/body.rb +56 -0
  91. data/lib/action_web_service/wsdl/soap/cgiStubCreator.rb +76 -0
  92. data/lib/action_web_service/wsdl/soap/classDefCreator.rb +314 -0
  93. data/lib/action_web_service/wsdl/soap/classDefCreatorSupport.rb +126 -0
  94. data/lib/action_web_service/wsdl/soap/clientSkeltonCreator.rb +78 -0
  95. data/lib/action_web_service/wsdl/soap/complexType.rb +161 -0
  96. data/lib/action_web_service/wsdl/soap/data.rb +42 -0
  97. data/lib/action_web_service/wsdl/soap/definitions.rb +149 -0
  98. data/lib/action_web_service/wsdl/soap/driverCreator.rb +95 -0
  99. data/lib/action_web_service/wsdl/soap/element.rb +28 -0
  100. data/lib/action_web_service/wsdl/soap/fault.rb +56 -0
  101. data/lib/action_web_service/wsdl/soap/header.rb +86 -0
  102. data/lib/action_web_service/wsdl/soap/headerfault.rb +56 -0
  103. data/lib/action_web_service/wsdl/soap/mappingRegistryCreator.rb +92 -0
  104. data/lib/action_web_service/wsdl/soap/methodDefCreator.rb +228 -0
  105. data/lib/action_web_service/wsdl/soap/operation.rb +122 -0
  106. data/lib/action_web_service/wsdl/soap/servantSkeltonCreator.rb +67 -0
  107. data/lib/action_web_service/wsdl/soap/standaloneServerStubCreator.rb +85 -0
  108. data/lib/action_web_service/wsdl/soap/wsdl2ruby.rb +176 -0
  109. data/lib/action_web_service/wsdl/types.rb +43 -0
  110. data/lib/action_web_service/wsdl/wsdl.rb +23 -0
  111. data/lib/action_web_service/wsdl/xmlSchema/all.rb +69 -0
  112. data/lib/action_web_service/wsdl/xmlSchema/annotation.rb +34 -0
  113. data/lib/action_web_service/wsdl/xmlSchema/any.rb +56 -0
  114. data/lib/action_web_service/wsdl/xmlSchema/attribute.rb +127 -0
  115. data/lib/action_web_service/wsdl/xmlSchema/choice.rb +69 -0
  116. data/lib/action_web_service/wsdl/xmlSchema/complexContent.rb +92 -0
  117. data/lib/action_web_service/wsdl/xmlSchema/complexType.rb +139 -0
  118. data/lib/action_web_service/wsdl/xmlSchema/content.rb +96 -0
  119. data/lib/action_web_service/wsdl/xmlSchema/data.rb +80 -0
  120. data/lib/action_web_service/wsdl/xmlSchema/element.rb +154 -0
  121. data/lib/action_web_service/wsdl/xmlSchema/enumeration.rb +36 -0
  122. data/lib/action_web_service/wsdl/xmlSchema/import.rb +65 -0
  123. data/lib/action_web_service/wsdl/xmlSchema/importer.rb +87 -0
  124. data/lib/action_web_service/wsdl/xmlSchema/include.rb +54 -0
  125. data/lib/action_web_service/wsdl/xmlSchema/length.rb +35 -0
  126. data/lib/action_web_service/wsdl/xmlSchema/parser.rb +166 -0
  127. data/lib/action_web_service/wsdl/xmlSchema/pattern.rb +36 -0
  128. data/lib/action_web_service/wsdl/xmlSchema/schema.rb +143 -0
  129. data/lib/action_web_service/wsdl/xmlSchema/sequence.rb +69 -0
  130. data/lib/action_web_service/wsdl/xmlSchema/simpleContent.rb +65 -0
  131. data/lib/action_web_service/wsdl/xmlSchema/simpleExtension.rb +54 -0
  132. data/lib/action_web_service/wsdl/xmlSchema/simpleRestriction.rb +73 -0
  133. data/lib/action_web_service/wsdl/xmlSchema/simpleType.rb +73 -0
  134. data/lib/action_web_service/wsdl/xmlSchema/unique.rb +34 -0
  135. data/lib/action_web_service/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  136. data/lib/action_web_service/xsd/charset.rb +187 -0
  137. data/lib/action_web_service/xsd/codegen.rb +12 -0
  138. data/lib/action_web_service/xsd/codegen/classdef.rb +203 -0
  139. data/lib/action_web_service/xsd/codegen/commentdef.rb +34 -0
  140. data/lib/action_web_service/xsd/codegen/gensupport.rb +166 -0
  141. data/lib/action_web_service/xsd/codegen/methoddef.rb +63 -0
  142. data/lib/action_web_service/xsd/codegen/moduledef.rb +191 -0
  143. data/lib/action_web_service/xsd/datatypes.rb +1269 -0
  144. data/lib/action_web_service/xsd/datatypes1999.rb +20 -0
  145. data/lib/action_web_service/xsd/iconvcharset.rb +33 -0
  146. data/lib/action_web_service/xsd/mapping.rb +42 -0
  147. data/lib/action_web_service/xsd/namedelements.rb +95 -0
  148. data/lib/action_web_service/xsd/ns.rb +140 -0
  149. data/lib/action_web_service/xsd/qname.rb +78 -0
  150. data/lib/action_web_service/xsd/xmlparser.rb +61 -0
  151. data/lib/action_web_service/xsd/xmlparser/parser.rb +96 -0
  152. data/lib/action_web_service/xsd/xmlparser/rexmlparser.rb +54 -0
  153. data/lib/action_web_service/xsd/xmlparser/xmlparser.rb +50 -0
  154. data/lib/action_web_service/xsd/xmlparser/xmlscanner.rb +147 -0
  155. data/lib/actionwebservice.rb +1 -0
  156. data/setup.rb +1379 -0
  157. data/test/abstract_client.rb +183 -0
  158. data/test/abstract_dispatcher.rb +548 -0
  159. data/test/abstract_unit.rb +45 -0
  160. data/test/api_test.rb +103 -0
  161. data/test/apis/auto_load_api.rb +3 -0
  162. data/test/apis/broken_auto_load_api.rb +2 -0
  163. data/test/base_test.rb +42 -0
  164. data/test/casting_test.rb +95 -0
  165. data/test/client_soap_test.rb +156 -0
  166. data/test/client_xmlrpc_test.rb +153 -0
  167. data/test/container_test.rb +73 -0
  168. data/test/dispatcher_action_controller_soap_test.rb +139 -0
  169. data/test/dispatcher_action_controller_xmlrpc_test.rb +59 -0
  170. data/test/fixtures/db_definitions/mysql.sql +8 -0
  171. data/test/fixtures/db_definitions/sqlite3.sql +8 -0
  172. data/test/fixtures/users.yml +12 -0
  173. data/test/gencov +3 -0
  174. data/test/invocation_test.rb +185 -0
  175. data/test/run +6 -0
  176. data/test/scaffolded_controller_test.rb +146 -0
  177. data/test/struct_test.rb +52 -0
  178. data/test/test_invoke_test.rb +112 -0
  179. 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