soap4r 1.5.7 → 1.5.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. data/bin/wsdl2ruby.rb +8 -2
  2. data/lib/soap/baseData.rb +93 -43
  3. data/lib/soap/element.rb +11 -8
  4. data/lib/soap/encodingstyle/handler.rb +15 -4
  5. data/lib/soap/encodingstyle/literalHandler.rb +18 -24
  6. data/lib/soap/encodingstyle/soapHandler.rb +34 -77
  7. data/lib/soap/generator.rb +74 -48
  8. data/lib/soap/header/handler.rb +1 -1
  9. data/lib/soap/header/mappinghandler.rb +47 -0
  10. data/lib/soap/mapping/encodedregistry.rb +19 -13
  11. data/lib/soap/mapping/factory.rb +19 -3
  12. data/lib/soap/mapping/literalregistry.rb +47 -35
  13. data/lib/soap/mapping/mapping.rb +92 -24
  14. data/lib/soap/mapping/registry.rb +34 -18
  15. data/lib/soap/mapping/schemadefinition.rb +8 -1
  16. data/lib/soap/mapping/typeMap.rb +18 -0
  17. data/lib/soap/mapping/wsdlencodedregistry.rb +8 -50
  18. data/lib/soap/mapping/wsdlliteralregistry.rb +45 -39
  19. data/lib/soap/nestedexception.rb +42 -0
  20. data/lib/soap/netHttpClient.rb +1 -0
  21. data/lib/soap/ns.rb +34 -0
  22. data/lib/soap/parser.rb +32 -29
  23. data/lib/soap/processor.rb +1 -1
  24. data/lib/soap/rpc/driver.rb +1 -0
  25. data/lib/soap/rpc/element.rb +18 -6
  26. data/lib/soap/rpc/httpserver.rb +38 -24
  27. data/lib/soap/rpc/proxy.rb +14 -11
  28. data/lib/soap/rpc/router.rb +4 -1
  29. data/lib/soap/soap.rb +7 -6
  30. data/lib/soap/wsdlDriver.rb +29 -8
  31. data/lib/tags +5690 -0
  32. data/lib/wsdl/definitions.rb +26 -40
  33. data/lib/wsdl/info.rb +11 -0
  34. data/lib/wsdl/parser.rb +2 -2
  35. data/lib/wsdl/soap/cgiStubCreator.rb +10 -5
  36. data/lib/wsdl/soap/classDefCreator.rb +140 -113
  37. data/lib/wsdl/soap/classDefCreatorSupport.rb +94 -12
  38. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  39. data/lib/wsdl/soap/clientSkeltonCreator.rb +6 -5
  40. data/lib/wsdl/soap/complexType.rb +10 -1
  41. data/lib/wsdl/soap/definitions.rb +4 -0
  42. data/lib/wsdl/soap/driverCreator.rb +14 -6
  43. data/lib/wsdl/soap/element.rb +4 -0
  44. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +11 -55
  45. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +28 -126
  46. data/lib/wsdl/soap/mappingRegistryCreator.rb +9 -3
  47. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +209 -94
  48. data/lib/wsdl/soap/methodDefCreator.rb +12 -16
  49. data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
  50. data/lib/wsdl/soap/servletStubCreator.rb +107 -0
  51. data/lib/wsdl/soap/standaloneServerStubCreator.rb +10 -5
  52. data/lib/wsdl/soap/wsdl2ruby.rb +28 -13
  53. data/lib/wsdl/wsdl.rb +2 -1
  54. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  55. data/lib/wsdl/xmlSchema/attributeGroup.rb +86 -0
  56. data/lib/wsdl/xmlSchema/choice.rb +4 -1
  57. data/lib/wsdl/xmlSchema/complexContent.rb +1 -1
  58. data/lib/wsdl/xmlSchema/complexExtension.rb +9 -1
  59. data/lib/wsdl/xmlSchema/complexRestriction.rb +8 -0
  60. data/lib/wsdl/xmlSchema/complexType.rb +38 -5
  61. data/lib/wsdl/xmlSchema/data.rb +30 -7
  62. data/lib/wsdl/xmlSchema/element.rb +10 -2
  63. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  64. data/lib/wsdl/xmlSchema/group.rb +118 -0
  65. data/lib/wsdl/xmlSchema/import.rb +11 -23
  66. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  67. data/lib/wsdl/xmlSchema/include.rb +11 -17
  68. data/lib/wsdl/xmlSchema/length.rb +3 -1
  69. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  70. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  71. data/lib/wsdl/xmlSchema/maxlength.rb +3 -1
  72. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  73. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  74. data/lib/wsdl/xmlSchema/minlength.rb +3 -1
  75. data/lib/wsdl/xmlSchema/schema.rb +34 -0
  76. data/lib/wsdl/xmlSchema/sequence.rb +4 -1
  77. data/lib/wsdl/xmlSchema/simpleExtension.rb +8 -0
  78. data/lib/wsdl/xmlSchema/simpleRestriction.rb +49 -8
  79. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  80. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  81. data/lib/wsdl/xmlSchema/xsd2ruby.rb +13 -4
  82. data/lib/xsd/charset.rb +8 -6
  83. data/lib/xsd/codegen/classdef.rb +5 -0
  84. data/lib/xsd/codegen/moduledef.rb +17 -0
  85. data/lib/xsd/datatypes.rb +165 -20
  86. data/lib/xsd/mapping.rb +13 -5
  87. data/lib/xsd/namedelements.rb +8 -0
  88. data/lib/xsd/ns.rb +50 -14
  89. data/lib/xsd/qname.rb +3 -2
  90. data/lib/xsd/xmlparser.rb +4 -3
  91. data/test/soap/asp.net/test_aspdotnet.rb +1 -1
  92. data/test/soap/auth/test_basic.rb +4 -3
  93. data/test/soap/auth/test_digest.rb +4 -3
  94. data/test/soap/calc/test_calc.rb +6 -4
  95. data/test/soap/calc/test_calc2.rb +6 -4
  96. data/test/soap/calc/test_calc_cgi.rb +6 -4
  97. data/test/soap/fault/test_customfault.rb +6 -4
  98. data/test/soap/fault/test_soaparray.rb +35 -0
  99. data/test/soap/filter/test_filter.rb +2 -2
  100. data/test/soap/header/test_authheader.rb +2 -2
  101. data/test/soap/header/test_authheader_cgi.rb +3 -3
  102. data/test/soap/header/test_simplehandler.rb +2 -2
  103. data/test/soap/helloworld/test_helloworld.rb +6 -4
  104. data/test/soap/ssl/test_ssl.rb +1 -1
  105. data/test/soap/struct/test_struct.rb +2 -2
  106. data/test/soap/swa/test_file.rb +6 -4
  107. data/test/soap/test_basetype.rb +4 -4
  108. data/test/soap/test_cookie.rb +2 -2
  109. data/test/soap/test_custom_ns.rb +50 -8
  110. data/test/soap/test_custommap.rb +6 -4
  111. data/test/soap/test_empty.rb +6 -4
  112. data/test/soap/test_envelopenamespace.rb +2 -2
  113. data/test/soap/test_extraattr.rb +6 -7
  114. data/test/soap/test_generator.rb +27 -0
  115. data/test/soap/test_mapping.rb +10 -0
  116. data/test/soap/test_nestedexception.rb +56 -0
  117. data/test/soap/test_nil.rb +6 -4
  118. data/test/soap/test_no_indent.rb +6 -4
  119. data/test/soap/test_response_as_xml.rb +2 -2
  120. data/test/soap/test_streamhandler.rb +6 -3
  121. data/test/soap/test_styleuse.rb +2 -2
  122. data/test/soap/wsdlDriver/test_calc.rb +2 -2
  123. data/test/soap/wsdlDriver/test_document.rb +2 -2
  124. data/test/soap/wsdlDriver/test_simpletype.rb +2 -2
  125. data/test/wsdl/abstract/test_abstract.rb +1 -1
  126. data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
  127. data/test/wsdl/anonymous/expectedDriver.rb +59 -0
  128. data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
  129. data/test/wsdl/anonymous/lp.wsdl +147 -0
  130. data/test/wsdl/anonymous/test_anonymous.rb +130 -0
  131. data/test/wsdl/any/expectedDriver.rb +3 -2
  132. data/test/wsdl/any/expectedEcho.rb +22 -2
  133. data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
  134. data/test/wsdl/any/expectedService.rb +3 -1
  135. data/test/wsdl/any/test_any.rb +2 -7
  136. data/test/wsdl/axisArray/axisArray.wsdl +31 -4
  137. data/test/wsdl/axisArray/test_axisarray.rb +58 -3
  138. data/test/wsdl/choice/choice.wsdl +39 -0
  139. data/test/wsdl/choice/test_choice.rb +134 -7
  140. data/test/wsdl/complexcontent/test_echo.rb +1 -1
  141. data/test/wsdl/datetime/test_datetime.rb +2 -2
  142. data/test/wsdl/document/array/double.wsdl +45 -6
  143. data/test/wsdl/document/array/test_array.rb +68 -1
  144. data/test/wsdl/document/document.wsdl +2 -0
  145. data/test/wsdl/document/test_nosoapaction.rb +1 -1
  146. data/test/wsdl/document/test_number.rb +1 -1
  147. data/test/wsdl/document/test_rpc.rb +78 -9
  148. data/test/wsdl/fault/test_fault.rb +1 -1
  149. data/test/wsdl/fault/test_multifault.rb +1 -1
  150. data/test/wsdl/group/expectedClassdef.rb +58 -0
  151. data/test/wsdl/group/expectedDriver.rb +51 -0
  152. data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
  153. data/test/wsdl/group/group.wsdl +88 -0
  154. data/test/wsdl/group/test_rpc.rb +145 -0
  155. data/test/wsdl/list/test_list.rb +1 -1
  156. data/test/wsdl/map/test_map.rb +2 -2
  157. data/test/wsdl/marshal/person_org.rb +5 -0
  158. data/test/wsdl/multiplefault.wsdl +11 -4
  159. data/test/wsdl/oneway/test_oneway.rb +1 -1
  160. data/test/wsdl/overload/test_overload.rb +1 -1
  161. data/test/wsdl/qualified/test_qualified.rb +1 -1
  162. data/test/wsdl/qualified/test_unqualified.rb +1 -1
  163. data/test/wsdl/raa/RAAService.rb +62 -57
  164. data/test/wsdl/raa/expectedClassDef.rb +100 -0
  165. data/test/wsdl/raa/expectedDriver.rb +96 -0
  166. data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
  167. data/test/wsdl/raa/test_raa.rb +54 -19
  168. data/test/wsdl/ref/expectedDriver.rb +1 -1
  169. data/test/wsdl/ref/expectedProduct.rb +101 -16
  170. data/test/wsdl/ref/test_ref.rb +2 -1
  171. data/test/wsdl/rpc/test_rpc.rb +1 -2
  172. data/test/wsdl/rpc/test_rpc_lit.rb +13 -13
  173. data/test/wsdl/simplecontent/test_simplecontent.rb +5 -5
  174. data/test/wsdl/simpletype/rpc/expectedDriver.rb +3 -2
  175. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +2 -0
  176. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +10 -17
  177. data/test/wsdl/simpletype/rpc/expectedService.rb +4 -2
  178. data/test/wsdl/simpletype/test_simpletype.rb +2 -2
  179. data/test/wsdl/soap/test_soapbodyparts.rb +2 -2
  180. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +2 -0
  181. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +3 -2
  182. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +5 -9
  183. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +4 -2
  184. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +4 -2
  185. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +6 -0
  186. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +1 -1
  187. data/test/wsdl/soaptype/test_soaptype.rb +1 -1
  188. data/test/wsdl/test_multiplefault.rb +3 -1
  189. data/test/xsd/codegen/test_classdef.rb +30 -0
  190. data/test/xsd/test_ns.rb +21 -0
  191. data/test/xsd/test_xsd.rb +5 -4
  192. data/test/xsd/xsd2ruby/expected_mysample.rb +13 -2
  193. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +5 -11
  194. data/test/xsd/xsd2ruby/section.xsd +8 -0
  195. metadata +40 -8
  196. data/test/wsdl/axisArray/itemList.rb +0 -14
  197. data/test/wsdl/raa/RAA.rb +0 -120
  198. data/test/wsdl/raa/RAAServant.rb +0 -107
  199. data/test/wsdl/raa/server.rb +0 -103
@@ -29,6 +29,16 @@
29
29
  </xsd:sequence>
30
30
  </xsd:complexType>
31
31
 
32
+ <xsd:complexType name="emptyArrayAtFirst">
33
+ <xsd:sequence>
34
+ <xsd:choice>
35
+ <xsd:element name="A" maxOccurs="unbounded" type="xsd:string"/>
36
+ <xsd:element name="B1" type="xsd:string"/>
37
+ <xsd:element name="B2" type="xsd:string"/>
38
+ </xsd:choice>
39
+ </xsd:sequence>
40
+ </xsd:complexType>
41
+
32
42
  <xsd:element name="terminalID" minOccurs="1" maxOccurs="1">
33
43
  <xsd:complexType>
34
44
  <xsd:choice>
@@ -69,6 +79,14 @@
69
79
  </xsd:sequence>
70
80
  </xsd:complexType>
71
81
  </xsd:element>
82
+
83
+ <xsd:element name="echoele_complex_emptyArrayAtFirst">
84
+ <xsd:complexType>
85
+ <xsd:sequence>
86
+ <xsd:element name="data" type="tns:emptyArrayAtFirst"/>
87
+ </xsd:sequence>
88
+ </xsd:complexType>
89
+ </xsd:element>
72
90
  </xsd:schema>
73
91
  </types>
74
92
 
@@ -84,6 +102,12 @@
84
102
  <message name="echo_complex_out">
85
103
  <part name="parameters" element="tns:echo_complex_response" />
86
104
  </message>
105
+ <message name="echo_complex_emptyArrayAtFirst_in">
106
+ <part name="parameters" element="tns:echoele_complex_emptyArrayAtFirst" />
107
+ </message>
108
+ <message name="echo_complex_emptyArrayAtFirst_out">
109
+ <part name="parameters" element="tns:echoele_complex_emptyArrayAtFirst" />
110
+ </message>
87
111
 
88
112
  <portType name="choice_porttype">
89
113
  <operation name="echo">
@@ -95,6 +119,11 @@
95
119
  <input message="tns:echo_complex_in" />
96
120
  <output message="tns:echo_complex_out" />
97
121
  </operation>
122
+
123
+ <operation name="echo_complex_emptyArrayAtFirst">
124
+ <input message="tns:echo_complex_emptyArrayAtFirst_in" />
125
+ <output message="tns:echo_complex_emptyArrayAtFirst_out" />
126
+ </operation>
98
127
  </portType>
99
128
 
100
129
  <binding name="choice_binding" type="tns:choice_porttype">
@@ -118,6 +147,16 @@
118
147
  <soap:body use="literal" />
119
148
  </output>
120
149
  </operation>
150
+
151
+ <operation name="echo_complex_emptyArrayAtFirst">
152
+ <soap:operation soapAction="urn:choice:echo_complex_emptyArrayAtFirst" style="document" />
153
+ <input>
154
+ <soap:body use="literal" />
155
+ </input>
156
+ <output>
157
+ <soap:body use="literal" />
158
+ </output>
159
+ </operation>
121
160
  </binding>
122
161
 
123
162
  <service name="choice_service">
@@ -28,6 +28,13 @@ class TestChoice < Test::Unit::TestCase
28
28
  XSD::QName.new(Namespace, 'echoele_complex'),
29
29
  XSD::QName.new(Namespace, 'echo_complex_response')
30
30
  )
31
+ add_document_method(
32
+ self,
33
+ Namespace + ':echo_complex_emptyArrayAtFirst',
34
+ 'echo_complex_emptyArrayAtFirst',
35
+ XSD::QName.new(Namespace, 'echoele_complex_emptyArrayAtFirst'),
36
+ XSD::QName.new(Namespace, 'echoele_complex_emptyArrayAtFirst')
37
+ )
31
38
  @router.literal_mapping_registry = ChoiceMappingRegistry::LiteralRegistry
32
39
  end
33
40
 
@@ -38,6 +45,10 @@ class TestChoice < Test::Unit::TestCase
38
45
  def echo_complex(arg)
39
46
  Echo_complex_response.new(arg.data)
40
47
  end
48
+
49
+ def echo_complex_emptyArrayAtFirst(arg)
50
+ arg
51
+ end
41
52
  end
42
53
 
43
54
  DIR = File.dirname(File.expand_path(__FILE__))
@@ -51,7 +62,7 @@ class TestChoice < Test::Unit::TestCase
51
62
  end
52
63
 
53
64
  def teardown
54
- teardown_server
65
+ teardown_server if @server
55
66
  unless $DEBUG
56
67
  File.unlink(pathname('choice.rb'))
57
68
  File.unlink(pathname('choiceMappingRegistry.rb'))
@@ -77,7 +88,7 @@ class TestChoice < Test::Unit::TestCase
77
88
  gen.opt['driver'] = nil
78
89
  gen.opt['force'] = true
79
90
  gen.run
80
- TestUtil.require(DIR, 'choiceMappingRegistry.rb', 'choice.rb')
91
+ TestUtil.require(DIR, 'choiceDriver.rb', 'choiceMappingRegistry.rb', 'choice.rb')
81
92
  end
82
93
 
83
94
  def teardown_server
@@ -129,15 +140,119 @@ class TestChoice < Test::Unit::TestCase
129
140
  assert_nil(ret.terminalID.imei)
130
141
  end
131
142
 
132
- def test_naive_complex
143
+ def test_wsdl_with_map_complex
144
+ wsdl = File.join(DIR, 'choice.wsdl')
145
+ @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
146
+ @client.endpoint_url = "http://localhost:#{Port}/"
147
+ @client.wiredump_dev = STDOUT if $DEBUG
148
+ do_test_with_map_complex(@client)
149
+ end
150
+
151
+ def test_wsdl_with_stub_complex
152
+ wsdl = File.join(DIR, 'choice.wsdl')
153
+ @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
154
+ @client.endpoint_url = "http://localhost:#{Port}/"
155
+ @client.wiredump_dev = STDOUT if $DEBUG
156
+ @client.literal_mapping_registry = ChoiceMappingRegistry::LiteralRegistry
157
+ do_test_with_stub_complex(@client)
158
+ end
159
+
160
+ def test_naive_with_map_complex
161
+ @client = ::SOAP::RPC::Driver.new("http://localhost:#{Port}/")
162
+ @client.add_document_method('echo_complex', 'urn:choice:echo_complex',
163
+ XSD::QName.new('urn:choice', 'echoele_complex'),
164
+ XSD::QName.new('urn:choice', 'echo_complex_response'))
165
+ @client.wiredump_dev = STDOUT if $DEBUG
166
+ do_test_with_map_complex(@client)
167
+ end
168
+
169
+ def test_naive_with_stub_complex
133
170
  @client = ::SOAP::RPC::Driver.new("http://localhost:#{Port}/")
134
171
  @client.add_document_method('echo_complex', 'urn:choice:echo_complex',
135
172
  XSD::QName.new('urn:choice', 'echoele_complex'),
136
173
  XSD::QName.new('urn:choice', 'echo_complex_response'))
137
174
  @client.wiredump_dev = STDOUT if $DEBUG
138
175
  @client.literal_mapping_registry = ChoiceMappingRegistry::LiteralRegistry
176
+ do_test_with_stub_complex(@client)
177
+ end
178
+
179
+ def do_test_with_map_complex(client)
180
+ req = {
181
+ :data => {
182
+ :A => "A",
183
+ :B1 => "B1",
184
+ :C1 => "C1",
185
+ :C2 => "C2"
186
+ }
187
+ }
188
+ ret = client.echo_complex(req)
189
+ assert_equal("A", ret.data["A"])
190
+ assert_equal("B1", ret.data["B1"])
191
+ assert_equal(nil, ret.data["B2a"])
192
+ assert_equal(nil, ret.data["B2b"])
193
+ assert_equal(nil, ret.data["B3a"])
194
+ assert_equal(nil, ret.data["B3b"])
195
+ assert_equal("C1", ret.data["C1"])
196
+ assert_equal("C2", ret.data["C2"])
197
+ #
198
+ req = {
199
+ :data => {
200
+ :A => "A",
201
+ :B2a => "B2a",
202
+ :B2b => "B2b",
203
+ :C1 => "C1",
204
+ :C2 => "C2"
205
+ }
206
+ }
207
+ ret = client.echo_complex(req)
208
+ assert_equal("A", ret.data["A"])
209
+ assert_equal(nil, ret.data["B1"])
210
+ assert_equal("B2a", ret.data["B2a"])
211
+ assert_equal("B2b", ret.data["B2b"])
212
+ assert_equal(nil, ret.data["B3a"])
213
+ assert_equal(nil, ret.data["B3b"])
214
+ assert_equal("C1", ret.data["C1"])
215
+ assert_equal("C2", ret.data["C2"])
216
+ #
217
+ req = {
218
+ :data => {
219
+ :A => "A",
220
+ :B3a => "B3a",
221
+ :C1 => "C1",
222
+ :C2 => "C2"
223
+ }
224
+ }
225
+ ret = client.echo_complex(req)
226
+ assert_equal("A", ret.data["A"])
227
+ assert_equal(nil, ret.data["B1"])
228
+ assert_equal(nil, ret.data["B2a"])
229
+ assert_equal(nil, ret.data["B2b"])
230
+ assert_equal("B3a", ret.data["B3a"])
231
+ assert_equal(nil, ret.data["B3b"])
232
+ assert_equal("C1", ret.data["C1"])
233
+ assert_equal("C2", ret.data["C2"])
139
234
  #
140
- ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", "B1", nil, nil, nil, nil, "C1", "C2")))
235
+ req = {
236
+ :data => {
237
+ :A => "A",
238
+ :B3b => "B3b",
239
+ :C1 => "C1",
240
+ :C2 => "C2"
241
+ }
242
+ }
243
+ ret = client.echo_complex(req)
244
+ assert_equal("A", ret.data["A"])
245
+ assert_equal(nil, ret.data["B1"])
246
+ assert_equal(nil, ret.data["B2a"])
247
+ assert_equal(nil, ret.data["B2b"])
248
+ assert_equal(nil, ret.data["B3a"])
249
+ assert_equal("B3b", ret.data["B3b"])
250
+ assert_equal("C1", ret.data["C1"])
251
+ assert_equal("C2", ret.data["C2"])
252
+ end
253
+
254
+ def do_test_with_stub_complex(client)
255
+ ret = client.echo_complex(Echoele_complex.new(Andor.new("A", "B1", nil, nil, nil, nil, "C1", "C2")))
141
256
  assert_equal("A", ret.data.a)
142
257
  assert_equal("B1", ret.data.b1)
143
258
  assert_equal(nil, ret.data.b2a)
@@ -147,7 +262,7 @@ class TestChoice < Test::Unit::TestCase
147
262
  assert_equal("C1", ret.data.c1)
148
263
  assert_equal("C2", ret.data.c2)
149
264
  #
150
- ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", nil, "B2a", "B2b", nil, nil, "C1", "C2")))
265
+ ret = client.echo_complex(Echoele_complex.new(Andor.new("A", nil, "B2a", "B2b", nil, nil, "C1", "C2")))
151
266
  assert_equal("A", ret.data.a)
152
267
  assert_equal(nil, ret.data.b1)
153
268
  assert_equal("B2a", ret.data.b2a)
@@ -157,7 +272,7 @@ class TestChoice < Test::Unit::TestCase
157
272
  assert_equal("C1", ret.data.c1)
158
273
  assert_equal("C2", ret.data.c2)
159
274
  #
160
- ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, "B3a", nil, "C1", "C2")))
275
+ ret = client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, "B3a", nil, "C1", "C2")))
161
276
  assert_equal("A", ret.data.a)
162
277
  assert_equal(nil, ret.data.b1)
163
278
  assert_equal(nil, ret.data.b2a)
@@ -167,7 +282,7 @@ class TestChoice < Test::Unit::TestCase
167
282
  assert_equal("C1", ret.data.c1)
168
283
  assert_equal("C2", ret.data.c2)
169
284
  #
170
- ret = @client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, nil, "B3b", "C1", "C2")))
285
+ ret = client.echo_complex(Echoele_complex.new(Andor.new("A", nil, nil, nil, nil, "B3b", "C1", "C2")))
171
286
  assert_equal("A", ret.data.a)
172
287
  assert_equal(nil, ret.data.b1)
173
288
  assert_equal(nil, ret.data.b2a)
@@ -177,6 +292,18 @@ class TestChoice < Test::Unit::TestCase
177
292
  assert_equal("C1", ret.data.c1)
178
293
  assert_equal("C2", ret.data.c2)
179
294
  end
295
+
296
+ def test_stub_emptyArrayAtFirst
297
+ @client = Choice_porttype.new("http://localhost:#{Port}/")
298
+ @client.wiredump_dev = STDOUT if $DEBUG
299
+ #
300
+ arg = EmptyArrayAtFirst.new
301
+ arg.b1 = "b1"
302
+ ret = @client.echo_complex_emptyArrayAtFirst(Echoele_complex_emptyArrayAtFirst.new(arg))
303
+ assert_nil(ret.data.a)
304
+ assert_equal("b1", ret.data.b1)
305
+ assert_nil(ret.data.b2)
306
+ end
180
307
  end
181
308
 
182
309
 
@@ -38,7 +38,7 @@ class TestEcho < Test::Unit::TestCase
38
38
  end
39
39
 
40
40
  def teardown
41
- teardown_server
41
+ teardown_server if @server
42
42
  unless $DEBUG
43
43
  File.unlink(pathname('complexContent.rb'))
44
44
  File.unlink(pathname('complexContentMappingRegistry.rb'))
@@ -35,8 +35,8 @@ class TestDatetime < Test::Unit::TestCase
35
35
  end
36
36
 
37
37
  def teardown
38
- teardown_server
39
- teardown_client
38
+ teardown_server if @server
39
+ teardown_client if @client
40
40
  end
41
41
 
42
42
  def teardown_server
@@ -7,30 +7,43 @@
7
7
  xmlns:tns="http://tempuri.org/"
8
8
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
9
9
  <wsdl:types>
10
- <s:schema elementFormDefault="qualified"
11
- targetNamespace="http://tempuri.org/">
10
+ <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
11
+
12
+ <s:element name="ArrayOfRecord">
13
+ <s:complexType>
14
+ <s:sequence>
15
+ <s:element maxOccurs="unbounded" name="record" type="tns:report-record"/>
16
+ </s:sequence>
17
+ </s:complexType>
18
+ </s:element>
19
+ <s:complexType name="report-record">
20
+ <s:attribute name="a" type="s:string" />
21
+ <s:attribute name="b" type="s:string" />
22
+ <s:attribute name="c" type="s:string" />
23
+ </s:complexType>
24
+
12
25
  <s:complexType name="ArrayOfDouble">
13
26
  <s:sequence>
14
27
  <s:element minOccurs="0" maxOccurs="unbounded" name="double"
15
28
  type="s:double"/>
16
29
  </s:sequence>
17
30
  </s:complexType>
31
+
18
32
  <s:element name="echo">
19
33
  <s:complexType>
20
34
  <s:sequence>
21
- <s:element minOccurs="0" maxOccurs="1" name="ary"
22
- type="tns:ArrayOfDouble"/>
35
+ <s:element nillable="true" maxOccurs="1" name="ary" type="tns:ArrayOfDouble"/>
23
36
  </s:sequence>
24
37
  </s:complexType>
25
38
  </s:element>
26
39
  <s:element name="echoResponse">
27
40
  <s:complexType>
28
41
  <s:sequence>
29
- <s:element minOccurs="0" maxOccurs="1" name="ary"
30
- type="tns:ArrayOfDouble"/>
42
+ <s:element nillable="true" maxOccurs="1" name="ary" type="tns:ArrayOfDouble"/>
31
43
  </s:sequence>
32
44
  </s:complexType>
33
45
  </s:element>
46
+
34
47
  <s:element name="ArrayOfDouble" nillable="true" type="tns:ArrayOfDouble"/>
35
48
 
36
49
  <s:element name="echo2">
@@ -40,6 +53,7 @@
40
53
  </s:sequence>
41
54
  </s:complexType>
42
55
  </s:element>
56
+
43
57
  <s:element name="echo2Response">
44
58
  <s:complexType>
45
59
  <s:sequence>
@@ -47,6 +61,7 @@
47
61
  </s:sequence>
48
62
  </s:complexType>
49
63
  </s:element>
64
+
50
65
  <s:element name="ArrayOfComplex">
51
66
  <s:complexType>
52
67
  <s:sequence>
@@ -54,6 +69,7 @@
54
69
  </s:sequence>
55
70
  </s:complexType>
56
71
  </s:element>
72
+
57
73
  <s:element name="Complex">
58
74
  <s:complexType>
59
75
  <s:sequence>
@@ -77,6 +93,12 @@
77
93
  <wsdl:message name="echo2Out">
78
94
  <wsdl:part name="parameters" element="tns:echo2Response"/>
79
95
  </wsdl:message>
96
+ <wsdl:message name="echo3In">
97
+ <wsdl:part name="parameters" element="tns:ArrayOfRecord"/>
98
+ </wsdl:message>
99
+ <wsdl:message name="echo3Out">
100
+ <wsdl:part name="parameters" element="tns:ArrayOfRecord"/>
101
+ </wsdl:message>
80
102
 
81
103
  <wsdl:portType name="pricerSoap">
82
104
  <wsdl:operation name="echo">
@@ -88,11 +110,17 @@
88
110
  <wsdl:input message="tns:echo2In"/>
89
111
  <wsdl:output message="tns:echo2Out"/>
90
112
  </wsdl:operation>
113
+
114
+ <wsdl:operation name="echo3">
115
+ <wsdl:input message="tns:echo3In"/>
116
+ <wsdl:output message="tns:echo3Out"/>
117
+ </wsdl:operation>
91
118
  </wsdl:portType>
92
119
 
93
120
  <wsdl:binding name="pricerSoap" type="tns:pricerSoap">
94
121
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
95
122
  style="document"/>
123
+
96
124
  <wsdl:operation name="echo">
97
125
  <soap:operation soapAction="http://tempuri.org/echo" style="document"/>
98
126
  <wsdl:input>
@@ -102,6 +130,7 @@
102
130
  <soap:body use="literal"/>
103
131
  </wsdl:output>
104
132
  </wsdl:operation>
133
+
105
134
  <wsdl:operation name="echo2">
106
135
  <soap:operation soapAction="http://tempuri.org/echo2" style="document"/>
107
136
  <wsdl:input>
@@ -111,6 +140,16 @@
111
140
  <soap:body use="literal"/>
112
141
  </wsdl:output>
113
142
  </wsdl:operation>
143
+
144
+ <wsdl:operation name="echo3">
145
+ <soap:operation soapAction="http://tempuri.org/echo3" style="document"/>
146
+ <wsdl:input>
147
+ <soap:body use="literal"/>
148
+ </wsdl:input>
149
+ <wsdl:output>
150
+ <soap:body use="literal"/>
151
+ </wsdl:output>
152
+ </wsdl:operation>
114
153
  </wsdl:binding>
115
154
 
116
155
  <wsdl:service name="pricer">
@@ -28,6 +28,13 @@ class TestArray < Test::Unit::TestCase
28
28
  XSD::QName.new(Namespace, 'echo2'),
29
29
  XSD::QName.new(Namespace, 'echo2Response')
30
30
  )
31
+ add_document_method(
32
+ self,
33
+ Namespace + 'echo3',
34
+ 'echo3',
35
+ XSD::QName.new(Namespace, 'ArrayOfRecord'),
36
+ XSD::QName.new(Namespace, 'ArrayOfRecord')
37
+ )
31
38
  self.literal_mapping_registry = DoubleMappingRegistry::LiteralRegistry
32
39
  end
33
40
 
@@ -38,6 +45,10 @@ class TestArray < Test::Unit::TestCase
38
45
  def echo2(arg)
39
46
  arg
40
47
  end
48
+
49
+ def echo3(arg)
50
+ arg
51
+ end
41
52
  end
42
53
 
43
54
  DIR = File.dirname(File.expand_path(__FILE__))
@@ -51,7 +62,7 @@ class TestArray < Test::Unit::TestCase
51
62
  end
52
63
 
53
64
  def teardown
54
- teardown_server
65
+ teardown_server if @server
55
66
  unless $DEBUG
56
67
  File.unlink(pathname('double.rb'))
57
68
  File.unlink(pathname('doubleMappingRegistry.rb'))
@@ -128,6 +139,62 @@ class TestArray < Test::Unit::TestCase
128
139
  double = [0.1, 0.2, 0.3]
129
140
  assert_equal(double, @client.echo(:ary => double).ary)
130
141
  end
142
+
143
+ def test_stub
144
+ @client = ::WSDL::Document::PricerSoap.new("http://localhost:#{Port}/")
145
+ @client.wiredump_dev = STDOUT if $DEBUG
146
+ double = [0.1, 0.2, 0.3]
147
+ assert_equal(double, @client.echo(:ary => double).ary)
148
+ end
149
+
150
+ def test_stub_nil
151
+ @client = ::WSDL::Document::PricerSoap.new("http://localhost:#{Port}/")
152
+ @client.wiredump_dev = STDOUT if $DEBUG
153
+ assert_equal(nil, @client.echo(Echo.new).ary)
154
+ end
155
+
156
+ def test_attribute_array
157
+ @client = ::WSDL::Document::PricerSoap.new("http://localhost:#{Port}/")
158
+ @client.wiredump_dev = STDOUT if $DEBUG
159
+ #
160
+ r1 = ReportRecord.new
161
+ r1.xmlattr_a = "r1_xmlattr_a"
162
+ r1.xmlattr_b = "r1_xmlattr_b"
163
+ r1.xmlattr_c = "r1_xmlattr_c"
164
+ r2 = ReportRecord.new
165
+ r2.xmlattr_a = "r2_xmlattr_a"
166
+ r2.xmlattr_b = "r2_xmlattr_b"
167
+ r2.xmlattr_c = "r2_xmlattr_c"
168
+ arg = ArrayOfRecord[r1, r2]
169
+ ret = @client.echo3(arg)
170
+ assert_equal(arg.class , ret.class)
171
+ assert_equal(arg.size , ret.size)
172
+ assert_equal(2, ret.size)
173
+ assert_equal(arg[0].class, ret[0].class)
174
+ assert_equal(arg[0].xmlattr_a, ret[0].xmlattr_a)
175
+ assert_equal(arg[0].xmlattr_b, ret[0].xmlattr_b)
176
+ assert_equal(arg[0].xmlattr_c, ret[0].xmlattr_c)
177
+ assert_equal(arg[1].class, ret[1].class)
178
+ assert_equal(arg[1].xmlattr_a, ret[1].xmlattr_a)
179
+ assert_equal(arg[1].xmlattr_b, ret[1].xmlattr_b)
180
+ assert_equal(arg[1].xmlattr_c, ret[1].xmlattr_c)
181
+ #
182
+ arg = ArrayOfRecord[r1]
183
+ ret = @client.echo3(arg)
184
+ assert_equal(arg.class , ret.class)
185
+ assert_equal(arg.size , ret.size)
186
+ assert_equal(1, ret.size)
187
+ assert_equal(arg[0].class, ret[0].class)
188
+ assert_equal(arg[0].xmlattr_a, ret[0].xmlattr_a)
189
+ assert_equal(arg[0].xmlattr_b, ret[0].xmlattr_b)
190
+ assert_equal(arg[0].xmlattr_c, ret[0].xmlattr_c)
191
+ #
192
+ arg = ArrayOfRecord[]
193
+ ret = @client.echo3(arg)
194
+ assert_equal(arg.class , ret.class)
195
+ assert_equal(arg.size , ret.size)
196
+ assert_equal(0, ret.size)
197
+ end
131
198
  end
132
199
 
133
200