soap4r 1.5.5.20061022 → 1.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. data/bin/wsdl2ruby.rb +8 -8
  2. data/lib/soap/XMLSchemaDatatypes.rb +1 -1
  3. data/lib/soap/XMLSchemaDatatypes1999.rb +1 -1
  4. data/lib/soap/attachment.rb +1 -1
  5. data/lib/soap/baseData.rb +102 -54
  6. data/lib/soap/cgistub.rb +1 -1
  7. data/lib/soap/charset.rb +1 -1
  8. data/lib/soap/driver.rb +1 -1
  9. data/lib/soap/element.rb +20 -12
  10. data/lib/soap/encodingstyle/aspDotNetHandler.rb +2 -2
  11. data/lib/soap/encodingstyle/handler.rb +1 -1
  12. data/lib/soap/encodingstyle/literalHandler.rb +29 -73
  13. data/lib/soap/encodingstyle/soapHandler.rb +8 -7
  14. data/lib/soap/filter.rb +10 -0
  15. data/lib/soap/filter/filterchain.rb +51 -0
  16. data/lib/soap/filter/handler.rb +31 -0
  17. data/lib/soap/generator.rb +11 -3
  18. data/lib/soap/header/handler.rb +6 -5
  19. data/lib/soap/header/handlerset.rb +7 -7
  20. data/lib/soap/header/simplehandler.rb +1 -1
  21. data/lib/soap/httpconfigloader.rb +7 -2
  22. data/lib/soap/mapping.rb +1 -1
  23. data/lib/soap/mapping/encodedregistry.rb +36 -26
  24. data/lib/soap/mapping/encodedregistry.rb~ +531 -0
  25. data/lib/soap/mapping/factory.rb +2 -2
  26. data/lib/soap/mapping/literalregistry.rb +107 -67
  27. data/lib/soap/mapping/mapping.rb +92 -112
  28. data/lib/soap/mapping/registry.rb +25 -8
  29. data/lib/soap/mapping/rubytypeFactory.rb +1 -1
  30. data/lib/soap/mapping/schemadefinition.rb +163 -0
  31. data/lib/soap/mapping/typeMap.rb +7 -1
  32. data/lib/soap/mapping/wsdlencodedregistry.rb +2 -2
  33. data/lib/soap/mapping/wsdlliteralregistry.rb +14 -23
  34. data/lib/soap/mappingRegistry.rb +1 -1
  35. data/lib/soap/marshal.rb +1 -1
  36. data/lib/soap/namespace.rb +1 -1
  37. data/lib/soap/netHttpClient.rb +43 -13
  38. data/lib/soap/parser.rb +40 -42
  39. data/lib/soap/processor.rb +1 -1
  40. data/lib/soap/property.rb +7 -7
  41. data/lib/soap/proxy.rb +1 -1
  42. data/lib/soap/qname.rb +1 -1
  43. data/lib/soap/rpc/cgistub.rb +34 -1
  44. data/lib/soap/rpc/driver.rb +2 -1
  45. data/lib/soap/rpc/element.rb +42 -15
  46. data/lib/soap/rpc/httpserver.rb +13 -1
  47. data/lib/soap/rpc/proxy.rb +51 -41
  48. data/lib/soap/rpc/router.rb +88 -33
  49. data/lib/soap/rpc/rpc.rb +1 -1
  50. data/lib/soap/rpc/soaplet.rb +51 -3
  51. data/lib/soap/rpc/standaloneServer.rb +1 -1
  52. data/lib/soap/rpcRouter.rb +1 -1
  53. data/lib/soap/rpcUtils.rb +1 -1
  54. data/lib/soap/server.rb +1 -1
  55. data/lib/soap/soap.rb +2 -2
  56. data/lib/soap/standaloneServer.rb +1 -1
  57. data/lib/soap/streamHandler.rb +13 -4
  58. data/lib/soap/wsdlDriver.rb +11 -15
  59. data/lib/tags +5144 -0
  60. data/lib/wsdl/binding.rb +1 -1
  61. data/lib/wsdl/data.rb +1 -1
  62. data/lib/wsdl/definitions.rb +1 -1
  63. data/lib/wsdl/documentation.rb +1 -1
  64. data/lib/wsdl/import.rb +1 -1
  65. data/lib/wsdl/importer.rb +1 -1
  66. data/lib/wsdl/info.rb +1 -1
  67. data/lib/wsdl/message.rb +1 -1
  68. data/lib/wsdl/operation.rb +10 -7
  69. data/lib/wsdl/operationBinding.rb +19 -5
  70. data/lib/wsdl/param.rb +11 -3
  71. data/lib/wsdl/parser.rb +4 -3
  72. data/lib/wsdl/part.rb +1 -1
  73. data/lib/wsdl/port.rb +1 -1
  74. data/lib/wsdl/portType.rb +1 -1
  75. data/lib/wsdl/service.rb +1 -1
  76. data/lib/wsdl/soap/address.rb +1 -1
  77. data/lib/wsdl/soap/binding.rb +1 -1
  78. data/lib/wsdl/soap/body.rb +3 -1
  79. data/lib/wsdl/soap/cgiStubCreator.rb +1 -1
  80. data/lib/wsdl/soap/classDefCreator.rb +78 -14
  81. data/lib/wsdl/soap/classDefCreatorSupport.rb +28 -11
  82. data/lib/wsdl/soap/clientSkeltonCreator.rb +3 -2
  83. data/lib/wsdl/soap/complexType.rb +8 -11
  84. data/lib/wsdl/soap/data.rb +1 -1
  85. data/lib/wsdl/soap/definitions.rb +49 -4
  86. data/lib/wsdl/soap/driverCreator.rb +1 -1
  87. data/lib/wsdl/soap/element.rb +3 -2
  88. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +1 -1
  89. data/lib/wsdl/soap/fault.rb +1 -1
  90. data/lib/wsdl/soap/header.rb +1 -1
  91. data/lib/wsdl/soap/headerfault.rb +1 -1
  92. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +41 -21
  93. data/lib/wsdl/soap/mappingRegistryCreator.rb +2 -1
  94. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +45 -19
  95. data/lib/wsdl/soap/methodDefCreator.rb +28 -17
  96. data/lib/wsdl/soap/operation.rb +11 -11
  97. data/lib/wsdl/soap/servantSkeltonCreator.rb +3 -2
  98. data/lib/wsdl/soap/standaloneServerStubCreator.rb +1 -1
  99. data/lib/wsdl/soap/wsdl2ruby.rb +8 -2
  100. data/lib/wsdl/types.rb +1 -1
  101. data/lib/wsdl/wsdl.rb +1 -1
  102. data/lib/wsdl/xmlSchema/all.rb +1 -1
  103. data/lib/wsdl/xmlSchema/annotation.rb +1 -1
  104. data/lib/wsdl/xmlSchema/any.rb +10 -5
  105. data/lib/wsdl/xmlSchema/attribute.rb +1 -1
  106. data/lib/wsdl/xmlSchema/choice.rb +1 -1
  107. data/lib/wsdl/xmlSchema/complexContent.rb +11 -2
  108. data/lib/wsdl/xmlSchema/complexExtension.rb +8 -1
  109. data/lib/wsdl/xmlSchema/complexRestriction.rb +6 -2
  110. data/lib/wsdl/xmlSchema/complexType.rb +9 -1
  111. data/lib/wsdl/xmlSchema/content.rb +26 -5
  112. data/lib/wsdl/xmlSchema/data.rb +4 -1
  113. data/lib/wsdl/xmlSchema/element.rb +12 -9
  114. data/lib/wsdl/xmlSchema/enumeration.rb +1 -1
  115. data/lib/wsdl/xmlSchema/import.rb +1 -1
  116. data/lib/wsdl/xmlSchema/importer.rb +9 -6
  117. data/lib/wsdl/xmlSchema/include.rb +1 -1
  118. data/lib/wsdl/xmlSchema/length.rb +1 -1
  119. data/lib/wsdl/xmlSchema/list.rb +1 -1
  120. data/lib/wsdl/xmlSchema/maxlength.rb +1 -1
  121. data/lib/wsdl/xmlSchema/minlength.rb +1 -1
  122. data/lib/wsdl/xmlSchema/parser.rb +4 -3
  123. data/lib/wsdl/xmlSchema/pattern.rb +1 -1
  124. data/lib/wsdl/xmlSchema/schema.rb +1 -1
  125. data/lib/wsdl/xmlSchema/sequence.rb +1 -1
  126. data/lib/wsdl/xmlSchema/simpleContent.rb +1 -1
  127. data/lib/wsdl/xmlSchema/simpleExtension.rb +1 -1
  128. data/lib/wsdl/xmlSchema/simpleRestriction.rb +1 -1
  129. data/lib/wsdl/xmlSchema/simpleType.rb +8 -1
  130. data/lib/wsdl/xmlSchema/union.rb +35 -0
  131. data/lib/wsdl/xmlSchema/unique.rb +1 -1
  132. data/lib/wsdl/xmlSchema/xsd2ruby.rb +6 -1
  133. data/lib/xsd/charset.rb +1 -1
  134. data/lib/xsd/classloader.rb +26 -0
  135. data/lib/xsd/codegen.rb +1 -1
  136. data/lib/xsd/codegen/classdef.rb +1 -1
  137. data/lib/xsd/codegen/commentdef.rb +1 -1
  138. data/lib/xsd/codegen/gensupport.rb +119 -14
  139. data/lib/xsd/codegen/methoddef.rb +1 -1
  140. data/lib/xsd/codegen/moduledef.rb +1 -1
  141. data/lib/xsd/datatypes.rb +52 -13
  142. data/lib/xsd/datatypes1999.rb +1 -1
  143. data/lib/xsd/iconvcharset.rb +1 -1
  144. data/lib/xsd/mapping.rb +1 -1
  145. data/lib/xsd/namedelements.rb +1 -1
  146. data/lib/xsd/ns.rb +2 -2
  147. data/lib/xsd/qname.rb +1 -1
  148. data/lib/xsd/xmlparser.rb +16 -3
  149. data/lib/xsd/xmlparser/parser.rb +6 -2
  150. data/lib/xsd/xmlparser/rexmlparser.rb +5 -1
  151. data/lib/xsd/xmlparser/xmlparser.rb +1 -1
  152. data/lib/xsd/xmlparser/xmlscanner.rb +4 -2
  153. data/test/interopR2/InteropTest.rb +83 -0
  154. data/test/interopR2/InteropTest.wsdl +315 -0
  155. data/test/interopR2/InteropTestC.wsdl +208 -0
  156. data/test/interopR2/InteropTestDriver.rb +328 -0
  157. data/test/interopR2/SOAP4R_SOAPBuildersInteropTest_R2.wsdl +461 -0
  158. data/test/interopR2/SOAP4R_SOAPBuildersInteropTest_R2GroupB.wsdl +20 -0
  159. data/test/interopR2/SOAP4R_SOAPBuildersInteropTest_R2GroupCClient.rb +178 -0
  160. data/test/interopR2/SOAPBuildersInterop_R2GrC.wsdl +17 -0
  161. data/test/interopR2/clientBase.rb +0 -3
  162. data/test/interopR2/groupc.wsdl +17 -0
  163. data/test/interopR2/result_client.NetRemoting.txt +0 -4593
  164. data/test/interopR2/test.sh +9 -9
  165. data/test/runner.rb +1 -3
  166. data/test/soap/asp.net/test_aspdotnet.rb +20 -9
  167. data/test/soap/case/test_mapping.rb +57 -0
  168. data/test/soap/filter/test_filter.rb +146 -0
  169. data/test/soap/literalArrayMapping/test_definedarray.rb +7 -9
  170. data/test/soap/marshal/marshaltestlib.rb +1 -1
  171. data/test/soap/ssl/test_ssl.rb +0 -10
  172. data/test/soap/struct/test_struct.rb +2 -9
  173. data/test/soap/test_basetype.rb +114 -0
  174. data/test/soap/test_empty.rb +26 -2
  175. data/test/soap/test_envelopenamespace.rb +2 -9
  176. data/test/soap/test_extraattr.rb +55 -0
  177. data/test/soap/test_httpconfigloader.rb +17 -0
  178. data/test/soap/test_property.rb +4 -1
  179. data/test/soap/test_response_as_xml.rb +31 -9
  180. data/test/soap/test_soapelement.rb +21 -3
  181. data/test/soap/test_streamhandler.rb +3 -10
  182. data/test/soap/test_styleuse.rb +2 -9
  183. data/test/soap/wsdlDriver/test_calc.rb +3 -20
  184. data/test/soap/wsdlDriver/test_document.rb +2 -9
  185. data/test/soap/wsdlDriver/test_simpletype.rb +2 -9
  186. data/test/testutil.rb +54 -0
  187. data/test/wsdl/abstract/abstract.wsdl +82 -3
  188. data/test/wsdl/abstract/test_abstract.rb +48 -19
  189. data/test/wsdl/any/any.wsdl +63 -0
  190. data/test/wsdl/any/expectedDriver.rb +22 -1
  191. data/test/wsdl/any/expectedEcho.rb +19 -0
  192. data/test/wsdl/any/expectedService.rb +29 -4
  193. data/test/wsdl/any/test_any.rb +36 -31
  194. data/test/wsdl/choice/choice.wsdl +37 -0
  195. data/test/wsdl/choice/test_choice.rb +66 -17
  196. data/test/wsdl/complexcontent/test_echo.rb +7 -18
  197. data/test/wsdl/document/array/test_array.rb +8 -18
  198. data/test/wsdl/document/ping_nosoapaction.wsdl +1 -1
  199. data/test/wsdl/document/test_nosoapaction.rb +2 -9
  200. data/test/wsdl/document/test_number.rb +3 -10
  201. data/test/wsdl/document/test_rpc.rb +96 -21
  202. data/test/wsdl/fault/fault.wsdl +79 -0
  203. data/test/wsdl/fault/multifault.wsdl +96 -0
  204. data/test/wsdl/fault/test_fault.rb +119 -0
  205. data/test/wsdl/fault/test_multifault.rb +134 -0
  206. data/test/wsdl/list/test_list.rb +6 -16
  207. data/test/wsdl/marshal/test_wsdlmarshal.rb +10 -13
  208. data/test/wsdl/oneway/oneway.wsdl +36 -0
  209. data/test/wsdl/oneway/test_oneway.rb +108 -0
  210. data/test/wsdl/overload/test_overload.rb +3 -10
  211. data/test/wsdl/qualified/test_qualified.rb +9 -17
  212. data/test/wsdl/qualified/test_unqualified.rb +14 -21
  213. data/test/wsdl/ref/expectedDriver.rb +51 -0
  214. data/test/wsdl/ref/expectedProduct.rb +71 -71
  215. data/test/wsdl/ref/test_ref.rb +13 -35
  216. data/test/wsdl/rpc/rpc.wsdl +27 -1
  217. data/test/wsdl/rpc/test-rpc-lit-qualified.wsdl +74 -0
  218. data/test/wsdl/rpc/test-rpc-lit.wsdl +11 -4
  219. data/test/wsdl/rpc/test-rpc-lit12.wsdl +455 -0
  220. data/test/wsdl/rpc/test_rpc.rb +20 -19
  221. data/test/wsdl/rpc/test_rpc_lit.rb +82 -29
  222. data/test/wsdl/simplecontent/simplecontent.wsdl +1 -0
  223. data/test/wsdl/simplecontent/test_simplecontent.rb +5 -19
  224. data/test/wsdl/simpletype/rpc/expectedDriver.rb +6 -4
  225. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +15 -0
  226. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +64 -0
  227. data/test/wsdl/simpletype/rpc/expectedService.rb +6 -4
  228. data/test/wsdl/simpletype/rpc/rpc.wsdl +18 -0
  229. data/test/wsdl/simpletype/rpc/test_rpc.rb +6 -16
  230. data/test/wsdl/simpletype/simpletype.wsdl +19 -0
  231. data/test/wsdl/simpletype/test_simpletype.rb +2 -9
  232. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +6 -4
  233. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +40 -0
  234. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +6 -4
  235. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +6 -4
  236. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +5 -6
  237. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +3 -16
  238. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +9 -17
  239. data/test/wsdl/soaptype/test_soaptype.rb +29 -11
  240. data/test/xsd/test_xsd.rb +115 -1
  241. metadata +421 -454
  242. data/test/interopR2/client.NetRemoting.rb.result +0 -3410
  243. data/test/interopR2/client.NetRemoting_Base.log +0 -6279
  244. data/test/interopR2/client.NetRemoting_GroupB.log +0 -1188
  245. data/test/interopR2/client4S4C2_Base.log +0 -4955
  246. data/test/interopR2/client4S4C2_GroupB.log +0 -1000
  247. data/test/interopR2/client4S4C_Base.log +0 -4635
  248. data/test/interopR2/client4S4C_GroupB.log +0 -900
  249. data/test/interopR2/clientASP.NET_Base.log +0 -5468
  250. data/test/interopR2/clientASP.NET_GroupB.log +0 -977
  251. data/test/interopR2/clientApacheAxis_Base.log +0 -3171
  252. data/test/interopR2/clientApacheAxis_GroupB.log +0 -498
  253. data/test/interopR2/clientApacheSOAP_Base.log +0 -3171
  254. data/test/interopR2/clientBEAWebLogic_Base.log +0 -3171
  255. data/test/interopR2/clientBEAWebLogic_GroupB.log +0 -498
  256. data/test/interopR2/clientCapeConnect_Base.log +0 -2126
  257. data/test/interopR2/clientDelphi_Base.log +0 -0
  258. data/test/interopR2/clientEasySoap_Base.log +0 -6187
  259. data/test/interopR2/clientEasySoap_GroupB.log +0 -1076
  260. data/test/interopR2/clientFrontier_Base.log +0 -5188
  261. data/test/interopR2/clientHP_Base.log +0 -3171
  262. data/test/interopR2/clientHP_GroupB.log +0 -498
  263. data/test/interopR2/clientJSOAP_Base.log +0 -4465
  264. data/test/interopR2/clientJSOAP_GroupB.log +0 -824
  265. data/test/interopR2/clientKafkaXSLT_Base.log +0 -10299
  266. data/test/interopR2/clientKafkaXSLT_GroupB.log +0 -1739
  267. data/test/interopR2/clientMSSOAPToolkit2.0_Base.log +0 -4805
  268. data/test/interopR2/clientMSSOAPToolkit2.0_GroupB.log +0 -871
  269. data/test/interopR2/clientMSSOAPToolkit3.0_Base.log +0 -5076
  270. data/test/interopR2/clientMSSOAPToolkit3.0_GroupB.log +0 -908
  271. data/test/interopR2/clientNuSOAP_Base.log +0 -5076
  272. data/test/interopR2/clientNuSOAP_GroupB.log +0 -958
  273. data/test/interopR2/clientNuWave_Base.log +0 -2019
  274. data/test/interopR2/clientOpenLink_Base.log +0 -6171
  275. data/test/interopR2/clientOpenLink_GroupB.log +0 -1094
  276. data/test/interopR2/clientOracle_Base.log +0 -5594
  277. data/test/interopR2/clientPEAR_Base.log +0 -6261
  278. data/test/interopR2/clientPEAR_GroupB.log +0 -1106
  279. data/test/interopR2/clientPhalanx_Base.log +0 -41036
  280. data/test/interopR2/clientPhalanx_GroupB.log +0 -6519
  281. data/test/interopR2/clientSIMACE_Base.log +0 -6171
  282. data/test/interopR2/clientSIMACE_GroupB.log +0 -1093
  283. data/test/interopR2/clientSOAP4R.rb.result +0 -3409
  284. data/test/interopR2/clientSOAP4R_Base.log +0 -6366
  285. data/test/interopR2/clientSOAP4R_GroupB.log +0 -1112
  286. data/test/interopR2/clientSQLData_Base.log +0 -4857
  287. data/test/interopR2/clientSQLData_GroupB.log +0 -770
  288. data/test/interopR2/clientSilverStream_Base.log +0 -3171
  289. data/test/interopR2/clientSpray2001_Base.log +0 -8187
  290. data/test/interopR2/clientSpray2001_GroupB.log +0 -1408
  291. data/test/interopR2/clientSun_Base.log +0 -4641
  292. data/test/interopR2/clientSun_GroupB.log +0 -856
  293. data/test/interopR2/clientVWOpentalkSoap_Base.log +0 -5402
  294. data/test/interopR2/clientVWOpentalkSoap_GroupB.log +0 -972
  295. data/test/interopR2/clientWASPC_Base.log +0 -4187
  296. data/test/interopR2/clientWASPC_GroupB.log +0 -763
  297. data/test/interopR2/clientWASP_Base.log +0 -5414
  298. data/test/interopR2/clientWASP_GroupB.log +0 -970
  299. data/test/interopR2/clientWebMethods_Base.log +0 -3075
  300. data/test/interopR2/clientWebMethods_GroupB.log +0 -483
  301. data/test/interopR2/clientWhiteMesa_Base.log +0 -4359
  302. data/test/interopR2/clientWhiteMesa_GroupB.log +0 -808
  303. data/test/interopR2/clientWingfoot_Base.log +0 -4445
  304. data/test/interopR2/clientWingfoot_GroupB.log +0 -848
  305. data/test/interopR2/clientXMLBus_Base.log +0 -3075
  306. data/test/interopR2/clientXMLBus_GroupB.log +0 -483
  307. data/test/interopR2/clientXSOAP_Base.log +0 -4445
  308. data/test/interopR2/clienteSOAP_Base.log +0 -8728
  309. data/test/interopR2/clientgSOAP_Base.log +0 -4689
  310. data/test/interopR2/clientgSOAP_GroupB.log +0 -1014
  311. data/test/interopR2/clientkSOAP_Base.log +0 -5625
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - Mapping registry.
2
- # Copyright (C) 2000-2003, 2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -199,11 +199,18 @@ module RegistrySupport
199
199
  end
200
200
 
201
201
  def schema_definition_from_elename(qname)
202
- @elename_schema_definition[qname] || find_schema_definition(qname.name)
202
+ @elename_schema_definition[qname]
203
203
  end
204
204
 
205
205
  def schema_definition_from_type(type)
206
- @type_schema_definition[type] || find_schema_definition(type.name)
206
+ @type_schema_definition[type]
207
+ end
208
+
209
+ def find_node_definition(node)
210
+ schema_definition_from_type(node.type) ||
211
+ schema_definition_from_elename(node.elename) ||
212
+ find_schema_definition(node.elename.name) ||
213
+ find_schema_definition(node.type.name)
207
214
  end
208
215
 
209
216
  def find_schema_definition(name)
@@ -219,8 +226,7 @@ module RegistrySupport
219
226
  definition = Mapping.schema_definition_classdef(obj.class)
220
227
  if definition && attributes = definition.attributes
221
228
  attributes.each do |qname, param|
222
- at = obj.__send__(
223
- XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name))
229
+ at = Mapping.get_attribute(obj, XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name))
224
230
  ele.extraattr[qname] = at
225
231
  end
226
232
  elsif obj.respond_to?(:__xmlattr)
@@ -245,12 +251,23 @@ module RegistrySupport
245
251
  end
246
252
 
247
253
  def base2obj(value, klass)
248
- if value.respond_to?(:data)
249
- klass.new(value.data).data
254
+ v = if value.respond_to?(:data)
255
+ value.data
256
+ elsif value.respond_to?(:text)
257
+ value.text
258
+ else
259
+ nil
260
+ end
261
+ if value.is_a?(klass)
262
+ v
250
263
  else
251
- klass.new(nil).data
264
+ klass.new(v).data
252
265
  end
253
266
  end
267
+
268
+ def is_stubobj_elements_for_array(vars)
269
+ vars.keys.size == 1 and vars.values[0].is_a?(::Array)
270
+ end
254
271
  end
255
272
 
256
273
 
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - Ruby type mapping factory.
2
- # Copyright (C) 2000-2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -0,0 +1,163 @@
1
+ # SOAP4R - Ruby type mapping schema definition utility.
2
+ # Copyright (C) 2000-2007 NAKAMURA Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'xsd/codegen/gensupport'
10
+
11
+
12
+ module SOAP
13
+ module Mapping
14
+
15
+
16
+ class SchemaElementDefinition
17
+ attr_reader :varname, :mapped_class, :elename, :minoccurs, :maxoccurs
18
+
19
+ def initialize(varname, mapped_class, elename, minoccurs, maxoccurs,
20
+ as_any, as_array)
21
+ @varname = varname
22
+ @mapped_class = mapped_class
23
+ @elename = elename
24
+ @minoccurs = minoccurs
25
+ @maxoccurs = maxoccurs
26
+ @as_any = as_any
27
+ @as_array = as_array
28
+ end
29
+
30
+ def as_any?
31
+ @as_any
32
+ end
33
+
34
+ def as_array?
35
+ @as_array
36
+ end
37
+ end
38
+
39
+ module SchemaComplexTypeDefinition
40
+ include Enumerable
41
+
42
+ def initialize
43
+ @content = []
44
+ @element_cache = {}
45
+ end
46
+
47
+ def is_concrete_definition
48
+ true
49
+ end
50
+
51
+ def <<(ele)
52
+ @content << ele
53
+ end
54
+
55
+ def each
56
+ @content.each do |ele|
57
+ yield ele
58
+ end
59
+ end
60
+
61
+ def size
62
+ @content.size
63
+ end
64
+
65
+ def as_any?
66
+ false
67
+ end
68
+
69
+ def as_array?
70
+ false
71
+ end
72
+
73
+ def find_element(qname)
74
+ @element_cache[qname] ||= search_element(qname)
75
+ end
76
+
77
+ private
78
+
79
+ def search_element(qname)
80
+ each do |ele|
81
+ if ele.respond_to?(:find_element)
82
+ found = ele.find_element(qname)
83
+ return found if found
84
+ else
85
+ # relaxed match
86
+ if ele.elename == qname or
87
+ (qname.namespace.nil? and ele.elename.name == qname.name)
88
+ return ele
89
+ end
90
+ end
91
+ end
92
+ nil
93
+ end
94
+ end
95
+
96
+ class SchemaEmptyDefinition
97
+ include SchemaComplexTypeDefinition
98
+
99
+ def initialize
100
+ super()
101
+ @content.freeze
102
+ end
103
+ end
104
+
105
+ class SchemaSequenceDefinition
106
+ include SchemaComplexTypeDefinition
107
+
108
+ def initialize
109
+ super()
110
+ end
111
+
112
+ def choice?
113
+ false
114
+ end
115
+
116
+ # override
117
+ def as_array?
118
+ @as_array ||= false
119
+ end
120
+
121
+ def set_array
122
+ @as_array = true
123
+ end
124
+ end
125
+
126
+ class SchemaChoiceDefinition
127
+ include SchemaComplexTypeDefinition
128
+
129
+ def initialize
130
+ super()
131
+ end
132
+
133
+ def choice?
134
+ true
135
+ end
136
+ end
137
+
138
+ class SchemaDefinition
139
+ EMPTY = SchemaEmptyDefinition.new
140
+
141
+ attr_reader :class_for
142
+ attr_reader :elename, :type
143
+ attr_reader :qualified
144
+ attr_accessor :attributes
145
+ attr_accessor :elements
146
+
147
+ def initialize(class_for, elename, type, qualified)
148
+ @class_for = class_for
149
+ @elename = elename
150
+ @type = type
151
+ @qualified = qualified
152
+ @elements = EMPTY
153
+ @attributes = nil
154
+ end
155
+
156
+ def choice?
157
+ @elements.choice?
158
+ end
159
+ end
160
+
161
+
162
+ end
163
+ end
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - Base type mapping definition
2
- # Copyright (C) 2000, 2001, 2002, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -13,6 +13,9 @@ TypeMap = {
13
13
  XSD::XSDAnySimpleType::Type => SOAPAnySimpleType,
14
14
 
15
15
  XSD::XSDString::Type => SOAPString,
16
+ XSD::XSDNormalizedString::Type => SOAPNormalizedString,
17
+ XSD::XSDToken::Type => SOAPToken,
18
+ XSD::XSDLanguage::Type => SOAPLanguage,
16
19
  XSD::XSDBoolean::Type => SOAPBoolean,
17
20
  XSD::XSDDecimal::Type => SOAPDecimal,
18
21
  XSD::XSDFloat::Type => SOAPFloat,
@@ -46,6 +49,9 @@ TypeMap = {
46
49
 
47
50
  # soap4r does not use soapenc types actively but it should be accepted.
48
51
  SOAP::SOAPString::SOAPENCType => SOAPString,
52
+ SOAP::SOAPNormalizedString::Type => SOAPNormalizedString,
53
+ SOAP::SOAPToken::Type => SOAPToken,
54
+ SOAP::SOAPLanguage::Type => SOAPLanguage,
49
55
  SOAP::SOAPBoolean::SOAPENCType => SOAPBoolean,
50
56
  SOAP::SOAPDecimal::SOAPENCType => SOAPDecimal,
51
57
  SOAP::SOAPFloat::SOAPENCType => SOAPFloat,
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - WSDL encoded mapping registry.
2
- # Copyright (C) 2000-2003, 2005, 2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -226,7 +226,7 @@ private
226
226
  item = definition.elements.find { |k, v| k.elename == value.elename }
227
227
  if item and item.mapped_class
228
228
  # klass must be a SOAPBasetype or a class
229
- if item.mapped_class.ancestors.include?(::SOAP::SOAPBasetype)
229
+ if item.mapped_class.include?(::SOAP::SOAPBasetype)
230
230
  if value.respond_to?(:data)
231
231
  child = item.mapped_class.new(value.data).data
232
232
  else
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - WSDL literal mapping registry.
2
- # Copyright (C) 2004-2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -77,7 +77,9 @@ private
77
77
  def obj2elesoap(obj, eledef)
78
78
  ele = nil
79
79
  qualified = (eledef.elementform == 'qualified')
80
- if eledef.type
80
+ if obj.is_a?(SOAPNil)
81
+ ele = obj
82
+ elsif eledef.type
81
83
  if type = @definedtypes[eledef.type]
82
84
  ele = obj2typesoap(obj, type)
83
85
  elsif type = TypeMap[eledef.type]
@@ -112,7 +114,7 @@ private
112
114
 
113
115
  def simpleobj2soap(obj, type)
114
116
  type.check_lexical_format(obj)
115
- return SOAPNil.new if obj.nil? # TODO: check nillable.
117
+ return SOAPNil.new if obj.nil?
116
118
  if type.base
117
119
  ele = base2soap(obj, TypeMap[type.base])
118
120
  elsif type.list
@@ -134,18 +136,12 @@ private
134
136
  end
135
137
 
136
138
  def complexobj2sequencesoap(obj, ele, type)
137
- elements = type.elements
138
- any = nil
139
- if type.have_any?
140
- any = Mapping.get_attributes_for_any(obj, elements)
141
- end
142
- elements.each do |child_ele|
139
+ type.elements.each do |child_ele|
143
140
  case child_ele
144
141
  when WSDL::XMLSchema::Any
145
- if any
146
- SOAPElement.from_objs(any).each do |child|
147
- ele.add(child)
148
- end
142
+ any = Mapping.get_attributes_for_any(obj)
143
+ SOAPElement.from_objs(any).each do |child|
144
+ ele.add(child)
149
145
  end
150
146
  when WSDL::XMLSchema::Element
151
147
  complexobj2soapchildren(obj, ele, child_ele)
@@ -161,13 +157,7 @@ private
161
157
  end
162
158
 
163
159
  def complexobj2choicesoap(obj, ele, type)
164
- elements = type.elements
165
- any = nil
166
- if type.have_any?
167
- raise MappingError.new(
168
- "<any/> in <choice/> is not supported: #{ele.name.name}")
169
- end
170
- elements.each do |child_ele|
160
+ type.elements.each do |child_ele|
171
161
  break if complexobj2soapchildren(obj, ele, child_ele, true)
172
162
  end
173
163
  ele
@@ -183,7 +173,7 @@ private
183
173
 
184
174
  def complexobj2soapchildren_array(obj, ele, child_ele, allow_nil_value)
185
175
  child = Mapping.get_attribute(obj, child_ele.name.name)
186
- if child.nil? and obj.respond_to?(:each)
176
+ if child.nil? and obj.is_a?(::Array)
187
177
  child = obj
188
178
  end
189
179
  if child.nil?
@@ -233,10 +223,11 @@ private
233
223
  def nil2soap(ele)
234
224
  if ele.nillable
235
225
  obj2elesoap(nil, ele) # add an empty element
236
- elsif Integer(ele.minoccurs) == 0
226
+ elsif ele.minoccurs == 0
237
227
  nil # intends no element
238
228
  else
239
- raise MappingError.new("nil not allowed: #{ele.name.name}")
229
+ warn("nil not allowed: #{ele.name.name}")
230
+ nil
240
231
  end
241
232
  end
242
233
  end
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - RPC utility -- Mapping registry.
2
- # Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - Marshalling/Unmarshalling Ruby's object using SOAP Encoding.
2
- # Copyright (C) 2001, 2003, 2006 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - Namespace library
2
- # Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -1,5 +1,5 @@
1
1
  # SOAP4R - net/http wrapper
2
- # Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
3
 
4
4
  # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
5
  # redistribute it and/or modify it under the same terms of Ruby's license;
@@ -29,19 +29,17 @@ class NetHttpClient
29
29
  attr_accessor :connect_timeout
30
30
  attr_accessor :send_timeout # ignored for now.
31
31
  attr_accessor :receive_timeout
32
+ attr_reader :test_loopback_response
32
33
 
33
34
  def initialize(proxy = nil, agent = nil)
34
35
  @proxy = proxy ? URI.parse(proxy) : nil
35
36
  @agent = agent
36
37
  @debug_dev = nil
38
+ @test_loopback_response = []
37
39
  @session_manager = SessionManager.new
38
40
  @no_proxy = @ssl_config = @protocol_version = nil
39
41
  @connect_timeout = @send_timeout = @receive_timeout = nil
40
42
  end
41
-
42
- def test_loopback_response
43
- raise NotImplementedError.new("not supported for now")
44
- end
45
43
 
46
44
  def proxy=(proxy)
47
45
  if proxy.nil?
@@ -88,6 +86,9 @@ class NetHttpClient
88
86
  end
89
87
 
90
88
  def get_content(url, header = {})
89
+ if str = @test_loopback_response.shift
90
+ return str
91
+ end
91
92
  unless url.is_a?(URI)
92
93
  url = URI.parse(url)
93
94
  end
@@ -102,12 +103,30 @@ class NetHttpClient
102
103
  private
103
104
 
104
105
  def post_redirect(url, req_body, header, redirect_count)
106
+ if str = @test_loopback_response.shift
107
+ if @debug_dev
108
+ @debug_dev << "= Request\n\n"
109
+ @debug_dev << req_body
110
+ @debug_dev << "\n\n= Response\n\n"
111
+ @debug_dev << str
112
+ end
113
+ status = 200
114
+ reason = nil
115
+ contenttype = 'text/xml'
116
+ content = str
117
+ return Response.new(status, reason, contenttype, content)
118
+ return str
119
+ end
105
120
  unless url.is_a?(URI)
106
121
  url = URI.parse(url)
107
122
  end
108
123
  extra = header.dup
109
124
  extra['User-Agent'] = @agent if @agent
110
125
  res = start(url) { |http|
126
+ if @debug_dev
127
+ @debug_dev << "= Request\n\n"
128
+ @debug_dev << req_body << "\n"
129
+ end
111
130
  http.post(url.request_uri, req_body, extra)
112
131
  }
113
132
  case res
@@ -119,7 +138,7 @@ private
119
138
  raise ArgumentError.new("Too many redirects")
120
139
  end
121
140
  else
122
- Response.new(res)
141
+ Response.from_httpresponse(res)
123
142
  end
124
143
  end
125
144
 
@@ -130,7 +149,10 @@ private
130
149
  response = yield(worker)
131
150
  worker.finish
132
151
  }
133
- @debug_dev << response.body if @debug_dev
152
+ if @debug_dev
153
+ @debug_dev << "\n\n= Response\n\n"
154
+ @debug_dev << response.body << "\n"
155
+ end
134
156
  response
135
157
  end
136
158
 
@@ -186,16 +208,24 @@ private
186
208
  end
187
209
 
188
210
  class Response
189
- attr_reader :content
190
211
  attr_reader :status
191
212
  attr_reader :reason
192
213
  attr_reader :contenttype
214
+ attr_reader :content
215
+
216
+ def initialize(status, reason, contenttype, content)
217
+ @status = status
218
+ @reason = reason
219
+ @contenttype = contenttype
220
+ @content = content
221
+ end
193
222
 
194
- def initialize(res)
195
- @status = res.code.to_i
196
- @reason = res.message
197
- @contenttype = res['content-type']
198
- @content = res.body
223
+ def self.from_httpresponse(res)
224
+ status = res.code.to_i
225
+ reason = res.message
226
+ contenttype = res['content-type']
227
+ content = res.body
228
+ new(status, reason, contenttype, content)
199
229
  end
200
230
  end
201
231
  end