soap4r 1.5.5.20061022

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 (440) hide show
  1. data/bin/wsdl2ruby.rb +131 -0
  2. data/bin/xsd2ruby.rb +82 -0
  3. data/lib/soap/XMLSchemaDatatypes.rb +9 -0
  4. data/lib/soap/XMLSchemaDatatypes1999.rb +10 -0
  5. data/lib/soap/attachment.rb +108 -0
  6. data/lib/soap/baseData.rb +992 -0
  7. data/lib/soap/cgistub.rb +9 -0
  8. data/lib/soap/charset.rb +9 -0
  9. data/lib/soap/compat.rb +182 -0
  10. data/lib/soap/driver.rb +9 -0
  11. data/lib/soap/element.rb +266 -0
  12. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  13. data/lib/soap/encodingstyle/handler.rb +109 -0
  14. data/lib/soap/encodingstyle/literalHandler.rb +241 -0
  15. data/lib/soap/encodingstyle/soapHandler.rb +598 -0
  16. data/lib/soap/generator.rb +264 -0
  17. data/lib/soap/header/handler.rb +60 -0
  18. data/lib/soap/header/handlerset.rb +70 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +119 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +531 -0
  23. data/lib/soap/mapping/factory.rb +372 -0
  24. data/lib/soap/mapping/literalregistry.rb +321 -0
  25. data/lib/soap/mapping/mapping.rb +561 -0
  26. data/lib/soap/mapping/registry.rb +258 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +475 -0
  28. data/lib/soap/mapping/typeMap.rb +82 -0
  29. data/lib/soap/mapping/wsdlencodedregistry.rb +253 -0
  30. data/lib/soap/mapping/wsdlliteralregistry.rb +246 -0
  31. data/lib/soap/mappingRegistry.rb +9 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/namespace.rb +9 -0
  35. data/lib/soap/netHttpClient.rb +204 -0
  36. data/lib/soap/parser.rb +251 -0
  37. data/lib/soap/processor.rb +66 -0
  38. data/lib/soap/property.rb +333 -0
  39. data/lib/soap/proxy.rb +14 -0
  40. data/lib/soap/qname.rb +9 -0
  41. data/lib/soap/rpc/cgistub.rb +214 -0
  42. data/lib/soap/rpc/driver.rb +245 -0
  43. data/lib/soap/rpc/element.rb +330 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/proxy.rb +563 -0
  46. data/lib/soap/rpc/router.rb +602 -0
  47. data/lib/soap/rpc/rpc.rb +25 -0
  48. data/lib/soap/rpc/soaplet.rb +162 -0
  49. data/lib/soap/rpc/standaloneServer.rb +43 -0
  50. data/lib/soap/rpcRouter.rb +9 -0
  51. data/lib/soap/rpcUtils.rb +9 -0
  52. data/lib/soap/server.rb +9 -0
  53. data/lib/soap/soap.rb +150 -0
  54. data/lib/soap/standaloneServer.rb +9 -0
  55. data/lib/soap/streamHandler.rb +258 -0
  56. data/lib/soap/wsdlDriver.rb +580 -0
  57. data/lib/wsdl/binding.rb +65 -0
  58. data/lib/wsdl/data.rb +64 -0
  59. data/lib/wsdl/definitions.rb +250 -0
  60. data/lib/wsdl/documentation.rb +32 -0
  61. data/lib/wsdl/import.rb +80 -0
  62. data/lib/wsdl/importer.rb +38 -0
  63. data/lib/wsdl/info.rb +39 -0
  64. data/lib/wsdl/message.rb +54 -0
  65. data/lib/wsdl/operation.rb +175 -0
  66. data/lib/wsdl/operationBinding.rb +116 -0
  67. data/lib/wsdl/param.rb +85 -0
  68. data/lib/wsdl/parser.rb +163 -0
  69. data/lib/wsdl/part.rb +52 -0
  70. data/lib/wsdl/port.rb +84 -0
  71. data/lib/wsdl/portType.rb +75 -0
  72. data/lib/wsdl/service.rb +61 -0
  73. data/lib/wsdl/soap/address.rb +40 -0
  74. data/lib/wsdl/soap/binding.rb +49 -0
  75. data/lib/wsdl/soap/body.rb +56 -0
  76. data/lib/wsdl/soap/cgiStubCreator.rb +88 -0
  77. data/lib/wsdl/soap/classDefCreator.rb +340 -0
  78. data/lib/wsdl/soap/classDefCreatorSupport.rb +131 -0
  79. data/lib/wsdl/soap/clientSkeltonCreator.rb +93 -0
  80. data/lib/wsdl/soap/complexType.rb +166 -0
  81. data/lib/wsdl/soap/data.rb +42 -0
  82. data/lib/wsdl/soap/definitions.rb +151 -0
  83. data/lib/wsdl/soap/driverCreator.rb +110 -0
  84. data/lib/wsdl/soap/element.rb +28 -0
  85. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +117 -0
  86. data/lib/wsdl/soap/fault.rb +56 -0
  87. data/lib/wsdl/soap/header.rb +86 -0
  88. data/lib/wsdl/soap/headerfault.rb +56 -0
  89. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +188 -0
  90. data/lib/wsdl/soap/mappingRegistryCreator.rb +53 -0
  91. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +233 -0
  92. data/lib/wsdl/soap/methodDefCreator.rb +253 -0
  93. data/lib/wsdl/soap/operation.rb +122 -0
  94. data/lib/wsdl/soap/servantSkeltonCreator.rb +78 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +98 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +196 -0
  97. data/lib/wsdl/types.rb +44 -0
  98. data/lib/wsdl/wsdl.rb +23 -0
  99. data/lib/wsdl/xmlSchema/all.rb +24 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  101. data/lib/wsdl/xmlSchema/any.rb +56 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +123 -0
  103. data/lib/wsdl/xmlSchema/choice.rb +55 -0
  104. data/lib/wsdl/xmlSchema/complexContent.rb +88 -0
  105. data/lib/wsdl/xmlSchema/complexExtension.rb +104 -0
  106. data/lib/wsdl/xmlSchema/complexRestriction.rb +92 -0
  107. data/lib/wsdl/xmlSchema/complexType.rb +152 -0
  108. data/lib/wsdl/xmlSchema/content.rb +74 -0
  109. data/lib/wsdl/xmlSchema/data.rb +90 -0
  110. data/lib/wsdl/xmlSchema/element.rb +158 -0
  111. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  112. data/lib/wsdl/xmlSchema/import.rb +65 -0
  113. data/lib/wsdl/xmlSchema/importer.rb +87 -0
  114. data/lib/wsdl/xmlSchema/include.rb +54 -0
  115. data/lib/wsdl/xmlSchema/length.rb +35 -0
  116. data/lib/wsdl/xmlSchema/list.rb +48 -0
  117. data/lib/wsdl/xmlSchema/maxlength.rb +35 -0
  118. data/lib/wsdl/xmlSchema/minlength.rb +35 -0
  119. data/lib/wsdl/xmlSchema/parser.rb +166 -0
  120. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  121. data/lib/wsdl/xmlSchema/schema.rb +144 -0
  122. data/lib/wsdl/xmlSchema/sequence.rb +51 -0
  123. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  124. data/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
  125. data/lib/wsdl/xmlSchema/simpleRestriction.rb +91 -0
  126. data/lib/wsdl/xmlSchema/simpleType.rb +80 -0
  127. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  128. data/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  129. data/lib/xsd/charset.rb +187 -0
  130. data/lib/xsd/codegen.rb +12 -0
  131. data/lib/xsd/codegen/classdef.rb +203 -0
  132. data/lib/xsd/codegen/commentdef.rb +34 -0
  133. data/lib/xsd/codegen/gensupport.rb +168 -0
  134. data/lib/xsd/codegen/methoddef.rb +70 -0
  135. data/lib/xsd/codegen/moduledef.rb +191 -0
  136. data/lib/xsd/datatypes.rb +1282 -0
  137. data/lib/xsd/datatypes1999.rb +20 -0
  138. data/lib/xsd/iconvcharset.rb +33 -0
  139. data/lib/xsd/mapping.rb +42 -0
  140. data/lib/xsd/namedelements.rb +124 -0
  141. data/lib/xsd/ns.rb +146 -0
  142. data/lib/xsd/qname.rb +78 -0
  143. data/lib/xsd/xmlparser.rb +61 -0
  144. data/lib/xsd/xmlparser/parser.rb +96 -0
  145. data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  146. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  147. data/lib/xsd/xmlparser/xmlscanner.rb +147 -0
  148. data/test/16runner.rb +68 -0
  149. data/test/interopR2/README.txt +2 -0
  150. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  151. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  152. data/test/interopR2/base.rb +288 -0
  153. data/test/interopR2/client.NetRemoting.rb +17 -0
  154. data/test/interopR2/client.NetRemoting.rb.result +3410 -0
  155. data/test/interopR2/client.NetRemoting_Base.log +6279 -0
  156. data/test/interopR2/client.NetRemoting_GroupB.log +1188 -0
  157. data/test/interopR2/client.rb +1228 -0
  158. data/test/interopR2/client4S4C.rb +15 -0
  159. data/test/interopR2/client4S4C2.rb +14 -0
  160. data/test/interopR2/client4S4C2_Base.log +4955 -0
  161. data/test/interopR2/client4S4C2_GroupB.log +1000 -0
  162. data/test/interopR2/client4S4C_Base.log +4635 -0
  163. data/test/interopR2/client4S4C_GroupB.log +900 -0
  164. data/test/interopR2/clientASP.NET.rb +17 -0
  165. data/test/interopR2/clientASP.NET_Base.log +5468 -0
  166. data/test/interopR2/clientASP.NET_GroupB.log +977 -0
  167. data/test/interopR2/clientApacheAxis.rb +16 -0
  168. data/test/interopR2/clientApacheAxis_Base.log +3171 -0
  169. data/test/interopR2/clientApacheAxis_GroupB.log +498 -0
  170. data/test/interopR2/clientApacheSOAP.rb +17 -0
  171. data/test/interopR2/clientApacheSOAP_Base.log +3171 -0
  172. data/test/interopR2/clientBEAWebLogic.rb +17 -0
  173. data/test/interopR2/clientBEAWebLogic_Base.log +3171 -0
  174. data/test/interopR2/clientBEAWebLogic_GroupB.log +498 -0
  175. data/test/interopR2/clientBase.rb +1970 -0
  176. data/test/interopR2/clientCapeConnect.rb +18 -0
  177. data/test/interopR2/clientCapeConnect_Base.log +2126 -0
  178. data/test/interopR2/clientDelphi.rb +19 -0
  179. data/test/interopR2/clientDelphi_Base.log +0 -0
  180. data/test/interopR2/clientEasySoap.rb +14 -0
  181. data/test/interopR2/clientEasySoap_Base.log +6187 -0
  182. data/test/interopR2/clientEasySoap_GroupB.log +1076 -0
  183. data/test/interopR2/clientFrontier.rb +25 -0
  184. data/test/interopR2/clientFrontier_Base.log +5188 -0
  185. data/test/interopR2/clientGLUE.rb +32 -0
  186. data/test/interopR2/clientHP.rb +13 -0
  187. data/test/interopR2/clientHP_Base.log +3171 -0
  188. data/test/interopR2/clientHP_GroupB.log +498 -0
  189. data/test/interopR2/clientJAX-RPC.rb +19 -0
  190. data/test/interopR2/clientJSOAP.rb +14 -0
  191. data/test/interopR2/clientJSOAP_Base.log +4465 -0
  192. data/test/interopR2/clientJSOAP_GroupB.log +824 -0
  193. data/test/interopR2/clientKafkaXSLT.rb +15 -0
  194. data/test/interopR2/clientKafkaXSLT_Base.log +10299 -0
  195. data/test/interopR2/clientKafkaXSLT_GroupB.log +1739 -0
  196. data/test/interopR2/clientMSSOAPToolkit2.0.rb +17 -0
  197. data/test/interopR2/clientMSSOAPToolkit2.0_Base.log +4805 -0
  198. data/test/interopR2/clientMSSOAPToolkit2.0_GroupB.log +871 -0
  199. data/test/interopR2/clientMSSOAPToolkit3.0.rb +17 -0
  200. data/test/interopR2/clientMSSOAPToolkit3.0_Base.log +5076 -0
  201. data/test/interopR2/clientMSSOAPToolkit3.0_GroupB.log +908 -0
  202. data/test/interopR2/clientNuSOAP.rb +19 -0
  203. data/test/interopR2/clientNuSOAP_Base.log +5076 -0
  204. data/test/interopR2/clientNuSOAP_GroupB.log +958 -0
  205. data/test/interopR2/clientNuWave.rb +15 -0
  206. data/test/interopR2/clientNuWave_Base.log +2019 -0
  207. data/test/interopR2/clientOpenLink.rb +15 -0
  208. data/test/interopR2/clientOpenLink_Base.log +6171 -0
  209. data/test/interopR2/clientOpenLink_GroupB.log +1094 -0
  210. data/test/interopR2/clientOracle.rb +15 -0
  211. data/test/interopR2/clientOracle_Base.log +5594 -0
  212. data/test/interopR2/clientPEAR.rb +18 -0
  213. data/test/interopR2/clientPEAR_Base.log +6261 -0
  214. data/test/interopR2/clientPEAR_GroupB.log +1106 -0
  215. data/test/interopR2/clientPhalanx.rb +18 -0
  216. data/test/interopR2/clientPhalanx_Base.log +41036 -0
  217. data/test/interopR2/clientPhalanx_GroupB.log +6519 -0
  218. data/test/interopR2/clientSIMACE.rb +18 -0
  219. data/test/interopR2/clientSIMACE_Base.log +6171 -0
  220. data/test/interopR2/clientSIMACE_GroupB.log +1093 -0
  221. data/test/interopR2/clientSOAP4R.rb +18 -0
  222. data/test/interopR2/clientSOAP4R.rb.result +3409 -0
  223. data/test/interopR2/clientSOAP4R_Base.log +6366 -0
  224. data/test/interopR2/clientSOAP4R_GroupB.log +1112 -0
  225. data/test/interopR2/clientSOAP__Lite.rb +14 -0
  226. data/test/interopR2/clientSQLData.rb +18 -0
  227. data/test/interopR2/clientSQLData_Base.log +4857 -0
  228. data/test/interopR2/clientSQLData_GroupB.log +770 -0
  229. data/test/interopR2/clientSilverStream.rb +17 -0
  230. data/test/interopR2/clientSilverStream_Base.log +3171 -0
  231. data/test/interopR2/clientSpray2001.rb +17 -0
  232. data/test/interopR2/clientSpray2001_Base.log +8187 -0
  233. data/test/interopR2/clientSpray2001_GroupB.log +1408 -0
  234. data/test/interopR2/clientSun.rb +19 -0
  235. data/test/interopR2/clientSun_Base.log +4641 -0
  236. data/test/interopR2/clientSun_GroupB.log +856 -0
  237. data/test/interopR2/clientVWOpentalkSoap.rb +19 -0
  238. data/test/interopR2/clientVWOpentalkSoap_Base.log +5402 -0
  239. data/test/interopR2/clientVWOpentalkSoap_GroupB.log +972 -0
  240. data/test/interopR2/clientWASP.rb +19 -0
  241. data/test/interopR2/clientWASPC.rb +18 -0
  242. data/test/interopR2/clientWASPC_Base.log +4187 -0
  243. data/test/interopR2/clientWASPC_GroupB.log +763 -0
  244. data/test/interopR2/clientWASP_Base.log +5414 -0
  245. data/test/interopR2/clientWASP_GroupB.log +970 -0
  246. data/test/interopR2/clientWebMethods.rb +15 -0
  247. data/test/interopR2/clientWebMethods_Base.log +3075 -0
  248. data/test/interopR2/clientWebMethods_GroupB.log +483 -0
  249. data/test/interopR2/clientWhiteMesa.rb +28 -0
  250. data/test/interopR2/clientWhiteMesa_Base.log +4359 -0
  251. data/test/interopR2/clientWhiteMesa_GroupB.log +808 -0
  252. data/test/interopR2/clientWingfoot.rb +15 -0
  253. data/test/interopR2/clientWingfoot_Base.log +4445 -0
  254. data/test/interopR2/clientWingfoot_GroupB.log +848 -0
  255. data/test/interopR2/clientXMLBus.rb +19 -0
  256. data/test/interopR2/clientXMLBus_Base.log +3075 -0
  257. data/test/interopR2/clientXMLBus_GroupB.log +483 -0
  258. data/test/interopR2/clientXMLRPC-EPI.rb +17 -0
  259. data/test/interopR2/clientXSOAP.rb +14 -0
  260. data/test/interopR2/clientXSOAP_Base.log +4445 -0
  261. data/test/interopR2/clientZSI.rb +19 -0
  262. data/test/interopR2/clienteSOAP.rb +18 -0
  263. data/test/interopR2/clienteSOAP_Base.log +8728 -0
  264. data/test/interopR2/clientgSOAP.rb +18 -0
  265. data/test/interopR2/clientgSOAP_Base.log +4689 -0
  266. data/test/interopR2/clientgSOAP_GroupB.log +1014 -0
  267. data/test/interopR2/clientkSOAP.rb +17 -0
  268. data/test/interopR2/clientkSOAP_Base.log +5625 -0
  269. data/test/interopR2/iSimonReg.rb +112 -0
  270. data/test/interopR2/interopResultBase.rb +114 -0
  271. data/test/interopR2/interopService.rb +247 -0
  272. data/test/interopR2/result_client.NetRemoting.txt +4593 -0
  273. data/test/interopR2/rwikiInteropService.rb +105 -0
  274. data/test/interopR2/server.cgi +270 -0
  275. data/test/interopR2/server.rb +274 -0
  276. data/test/interopR2/simonReg.rb +123 -0
  277. data/test/interopR2/test.sh +49 -0
  278. data/test/interopR4/client.rb +112 -0
  279. data/test/runner.rb +9 -0
  280. data/test/sm11/classDef.rb +156 -0
  281. data/test/sm11/client.rb +542 -0
  282. data/test/sm11/driver.rb +183 -0
  283. data/test/sm11/servant.rb +1067 -0
  284. data/test/sm11/server.rb +25 -0
  285. data/test/soap/asp.net/hello.wsdl +96 -0
  286. data/test/soap/asp.net/test_aspdotnet.rb +112 -0
  287. data/test/soap/calc/calc.rb +17 -0
  288. data/test/soap/calc/calc2.rb +29 -0
  289. data/test/soap/calc/server.cgi +13 -0
  290. data/test/soap/calc/server.rb +17 -0
  291. data/test/soap/calc/server2.rb +20 -0
  292. data/test/soap/calc/test_calc.rb +49 -0
  293. data/test/soap/calc/test_calc2.rb +53 -0
  294. data/test/soap/calc/test_calc_cgi.rb +69 -0
  295. data/test/soap/fault/test_customfault.rb +58 -0
  296. data/test/soap/header/server.cgi +119 -0
  297. data/test/soap/header/test_authheader.rb +240 -0
  298. data/test/soap/header/test_authheader_cgi.rb +121 -0
  299. data/test/soap/header/test_simplehandler.rb +116 -0
  300. data/test/soap/helloworld/hw_s.rb +16 -0
  301. data/test/soap/helloworld/test_helloworld.rb +41 -0
  302. data/test/soap/literalArrayMapping/amazonEc.rb +4778 -0
  303. data/test/soap/literalArrayMapping/amazonEcDriver.rb +172 -0
  304. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  305. data/test/soap/literalArrayMapping/test_definedarray.rb +36 -0
  306. data/test/soap/marshal/marshaltestlib.rb +494 -0
  307. data/test/soap/marshal/test_digraph.rb +56 -0
  308. data/test/soap/marshal/test_marshal.rb +26 -0
  309. data/test/soap/marshal/test_struct.rb +47 -0
  310. data/test/soap/ssl/README +1 -0
  311. data/test/soap/ssl/ca.cert +23 -0
  312. data/test/soap/ssl/client.cert +19 -0
  313. data/test/soap/ssl/client.key +15 -0
  314. data/test/soap/ssl/server.cert +19 -0
  315. data/test/soap/ssl/server.key +15 -0
  316. data/test/soap/ssl/sslsvr.rb +57 -0
  317. data/test/soap/ssl/subca.cert +21 -0
  318. data/test/soap/ssl/test_ssl.rb +245 -0
  319. data/test/soap/struct/test_struct.rb +77 -0
  320. data/test/soap/styleuse/client.rb +20 -0
  321. data/test/soap/styleuse/server.rb +86 -0
  322. data/test/soap/swa/test_file.rb +73 -0
  323. data/test/soap/test_basetype.rb +976 -0
  324. data/test/soap/test_custommap.rb +108 -0
  325. data/test/soap/test_empty.rb +79 -0
  326. data/test/soap/test_envelopenamespace.rb +92 -0
  327. data/test/soap/test_httpconfigloader.rb +39 -0
  328. data/test/soap/test_mapping.rb +59 -0
  329. data/test/soap/test_no_indent.rb +86 -0
  330. data/test/soap/test_property.rb +424 -0
  331. data/test/soap/test_response_as_xml.rb +95 -0
  332. data/test/soap/test_soapelement.rb +120 -0
  333. data/test/soap/test_streamhandler.rb +262 -0
  334. data/test/soap/test_styleuse.rb +333 -0
  335. data/test/soap/wsdlDriver/README.txt +2 -0
  336. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  337. data/test/soap/wsdlDriver/document.wsdl +54 -0
  338. data/test/soap/wsdlDriver/echo_version.rb +29 -0
  339. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  340. data/test/soap/wsdlDriver/test_calc.rb +100 -0
  341. data/test/soap/wsdlDriver/test_document.rb +78 -0
  342. data/test/soap/wsdlDriver/test_simpletype.rb +87 -0
  343. data/test/wsdl/abstract/abstract.wsdl +97 -0
  344. data/test/wsdl/abstract/test_abstract.rb +130 -0
  345. data/test/wsdl/any/any.wsdl +51 -0
  346. data/test/wsdl/any/expectedDriver.rb +46 -0
  347. data/test/wsdl/any/expectedEcho.rb +18 -0
  348. data/test/wsdl/any/expectedService.rb +42 -0
  349. data/test/wsdl/any/test_any.rb +193 -0
  350. data/test/wsdl/axisArray/axisArray.wsdl +60 -0
  351. data/test/wsdl/axisArray/itemList.rb +14 -0
  352. data/test/wsdl/axisArray/test_axisarray.rb +69 -0
  353. data/test/wsdl/choice/choice.wsdl +91 -0
  354. data/test/wsdl/choice/test_choice.rb +134 -0
  355. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  356. data/test/wsdl/complexcontent/test_echo.rb +101 -0
  357. data/test/wsdl/datetime/DatetimeService.rb +44 -0
  358. data/test/wsdl/datetime/datetime.rb +0 -0
  359. data/test/wsdl/datetime/datetime.wsdl +45 -0
  360. data/test/wsdl/datetime/datetimeServant.rb +21 -0
  361. data/test/wsdl/datetime/test_datetime.rb +82 -0
  362. data/test/wsdl/document/array/double.wsdl +72 -0
  363. data/test/wsdl/document/array/test_array.rb +117 -0
  364. data/test/wsdl/document/document.wsdl +74 -0
  365. data/test/wsdl/document/number.wsdl +54 -0
  366. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  367. data/test/wsdl/document/test_nosoapaction.rb +109 -0
  368. data/test/wsdl/document/test_number.rb +99 -0
  369. data/test/wsdl/document/test_rpc.rb +211 -0
  370. data/test/wsdl/emptycomplextype.wsdl +31 -0
  371. data/test/wsdl/list/list.wsdl +93 -0
  372. data/test/wsdl/list/test_list.rb +134 -0
  373. data/test/wsdl/map/map.wsdl +92 -0
  374. data/test/wsdl/map/map.xml +43 -0
  375. data/test/wsdl/map/test_map.rb +99 -0
  376. data/test/wsdl/marshal/person.wsdl +21 -0
  377. data/test/wsdl/marshal/person_org.rb +18 -0
  378. data/test/wsdl/marshal/test_wsdlmarshal.rb +79 -0
  379. data/test/wsdl/multiplefault.wsdl +68 -0
  380. data/test/wsdl/overload/overload.wsdl +80 -0
  381. data/test/wsdl/overload/test_overload.rb +118 -0
  382. data/test/wsdl/qualified/lp.wsdl +47 -0
  383. data/test/wsdl/qualified/lp.xsd +26 -0
  384. data/test/wsdl/qualified/np.wsdl +51 -0
  385. data/test/wsdl/qualified/test_qualified.rb +145 -0
  386. data/test/wsdl/qualified/test_unqualified.rb +159 -0
  387. data/test/wsdl/raa/RAA.rb +120 -0
  388. data/test/wsdl/raa/RAAServant.rb +107 -0
  389. data/test/wsdl/raa/RAAService.rb +120 -0
  390. data/test/wsdl/raa/README.txt +8 -0
  391. data/test/wsdl/raa/raa.wsdl +264 -0
  392. data/test/wsdl/raa/server.rb +103 -0
  393. data/test/wsdl/raa/test_raa.rb +91 -0
  394. data/test/wsdl/ref/expectedProduct.rb +158 -0
  395. data/test/wsdl/ref/product.wsdl +147 -0
  396. data/test/wsdl/ref/test_ref.rb +289 -0
  397. data/test/wsdl/rpc/rpc.wsdl +83 -0
  398. data/test/wsdl/rpc/test-rpc-lit.wsdl +364 -0
  399. data/test/wsdl/rpc/test_rpc.rb +173 -0
  400. data/test/wsdl/rpc/test_rpc_lit.rb +407 -0
  401. data/test/wsdl/simplecontent/simplecontent.wsdl +83 -0
  402. data/test/wsdl/simplecontent/test_simplecontent.rb +116 -0
  403. data/test/wsdl/simpletype/rpc/expectedClient.rb +34 -0
  404. data/test/wsdl/simpletype/rpc/expectedDriver.rb +55 -0
  405. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +19 -0
  406. data/test/wsdl/simpletype/rpc/expectedServant.rb +32 -0
  407. data/test/wsdl/simpletype/rpc/expectedService.rb +51 -0
  408. data/test/wsdl/simpletype/rpc/rpc.wsdl +80 -0
  409. data/test/wsdl/simpletype/rpc/test_rpc.rb +62 -0
  410. data/test/wsdl/simpletype/simpletype.wsdl +95 -0
  411. data/test/wsdl/simpletype/test_simpletype.rb +99 -0
  412. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  413. data/test/wsdl/soap/test_soapbodyparts.rb +79 -0
  414. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +19 -0
  415. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +34 -0
  416. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +55 -0
  417. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +32 -0
  418. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +44 -0
  419. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +51 -0
  420. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  421. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +31 -0
  422. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  423. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  424. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  425. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +96 -0
  426. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +79 -0
  427. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  428. data/test/wsdl/soaptype/test_soaptype.rb +160 -0
  429. data/test/wsdl/test_emptycomplextype.rb +21 -0
  430. data/test/wsdl/test_fault.rb +50 -0
  431. data/test/wsdl/test_multiplefault.rb +39 -0
  432. data/test/xsd/codegen/test_classdef.rb +214 -0
  433. data/test/xsd/noencoding.xml +4 -0
  434. data/test/xsd/test_noencoding.rb +32 -0
  435. data/test/xsd/test_ns.rb +20 -0
  436. data/test/xsd/test_xmlschemaparser.rb +22 -0
  437. data/test/xsd/test_xsd.rb +1523 -0
  438. data/test/xsd/xmllang.xml +43 -0
  439. data/test/xsd/xmlschema.xml +12 -0
  440. metadata +539 -0
@@ -0,0 +1,372 @@
1
+ # SOAP4R - Mapping factory.
2
+ # Copyright (C) 2000-2003, 2006 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
+ module SOAP
10
+ module Mapping
11
+
12
+
13
+ class Factory
14
+ include TraverseSupport
15
+
16
+ def initialize
17
+ # nothing to do
18
+ end
19
+
20
+ def obj2soap(soap_class, obj, info, map)
21
+ raise NotImplementError.new
22
+ # return soap_obj
23
+ end
24
+
25
+ def soap2obj(obj_class, node, info, map)
26
+ raise NotImplementError.new
27
+ # return convert_succeeded_or_not, obj
28
+ end
29
+
30
+ def setiv2obj(obj, node, map)
31
+ return if node.nil?
32
+ if obj.is_a?(Array)
33
+ setiv2ary(obj, node, map)
34
+ else
35
+ setiv2struct(obj, node, map)
36
+ end
37
+ end
38
+
39
+ def setiv2soap(node, obj, map)
40
+ if obj.class.class_variables.include?('@@schema_element')
41
+ setdefinediv2soap(node, obj, map)
42
+ else
43
+ # should we sort instance_variables? how?
44
+ obj.instance_variables.each do |var|
45
+ name = var.sub(/^@/, '')
46
+ elename = Mapping.name2elename(name)
47
+ node.add(elename,
48
+ Mapping._obj2soap(obj.instance_variable_get(var), map))
49
+ end
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def setdefinediv2soap(ele, obj, map)
56
+ definition = Mapping.schema_definition_classdef(obj.class)
57
+ definition.elements.each do |eledef|
58
+ child = Mapping.get_attribute(obj, eledef.varname)
59
+ # extract method
60
+ if child.nil?
61
+ value = SOAPNil.new
62
+ elsif child.is_a?(XSD::NSDBase)
63
+ value = child
64
+ else
65
+ klass = Mapping.class_from_name(eledef.type)
66
+ if klass && klass.ancestors.include?(::SOAP::SOAPBasetype)
67
+ value = klass.new(child)
68
+ else
69
+ # should check klass matches an actual object?
70
+ value = Mapping._obj2soap(child, map)
71
+ end
72
+ end
73
+ ele.add(eledef.elename.name, value)
74
+ end
75
+ end
76
+
77
+ def setiv2ary(obj, node, map)
78
+ node.each do |name, value|
79
+ Array.instance_method(:<<).bind(obj).call(Mapping._soap2obj(value, map))
80
+ end
81
+ end
82
+
83
+ def setiv2struct(obj, node, map)
84
+ vars = {}
85
+ node.each do |name, value|
86
+ vars[Mapping.elename2name(name)] = Mapping._soap2obj(value, map)
87
+ end
88
+ Mapping.set_attributes(obj, vars)
89
+ end
90
+
91
+ def anonymous_class?(obj)
92
+ name = obj.class.name
93
+ name.nil? or name.empty? # 1.8 returns ""
94
+ end
95
+ end
96
+
97
+ class StringFactory_ < Factory
98
+ def initialize(allow_original_mapping = false)
99
+ super()
100
+ @allow_original_mapping = allow_original_mapping
101
+ end
102
+
103
+ def obj2soap(soap_class, obj, info, map)
104
+ if !@allow_original_mapping and !obj.instance_variables.empty?
105
+ return nil
106
+ end
107
+ begin
108
+ externalces = Thread.current[:SOAPMapping][:ExternalCES]
109
+ encoded = XSD::Charset.encoding_conv(obj, externalces,
110
+ XSD::Charset.encoding)
111
+ soap_obj = soap_class.new(encoded)
112
+ rescue XSD::ValueSpaceError
113
+ return nil
114
+ end
115
+ mark_marshalled_obj(obj, soap_obj)
116
+ soap_obj
117
+ end
118
+
119
+ def soap2obj(obj_class, node, info, map)
120
+ obj = Mapping.create_empty_object(obj_class)
121
+ decoded = XSD::Charset.encoding_conv(node.data, XSD::Charset.encoding,
122
+ Thread.current[:SOAPMapping][:ExternalCES])
123
+ obj.replace(decoded)
124
+ mark_unmarshalled_obj(node, obj)
125
+ return true, obj
126
+ end
127
+ end
128
+
129
+ class BasetypeFactory_ < Factory
130
+ def initialize(allow_original_mapping = false)
131
+ super()
132
+ @allow_original_mapping = allow_original_mapping
133
+ end
134
+
135
+ def obj2soap(soap_class, obj, info, map)
136
+ if !@allow_original_mapping and !obj.instance_variables.empty?
137
+ return nil
138
+ end
139
+ soap_obj = nil
140
+ begin
141
+ soap_obj = soap_class.new(obj)
142
+ rescue XSD::ValueSpaceError
143
+ return nil
144
+ end
145
+ if @allow_original_mapping
146
+ # Basetype except String should not be multiref-ed in SOAP/1.1.
147
+ mark_marshalled_obj(obj, soap_obj)
148
+ end
149
+ soap_obj
150
+ end
151
+
152
+ def soap2obj(obj_class, node, info, map)
153
+ obj = node.data
154
+ mark_unmarshalled_obj(node, obj)
155
+ return true, obj
156
+ end
157
+ end
158
+
159
+ class DateTimeFactory_ < Factory
160
+ def initialize(allow_original_mapping = false)
161
+ super()
162
+ @allow_original_mapping = allow_original_mapping
163
+ end
164
+
165
+ def obj2soap(soap_class, obj, info, map)
166
+ if !@allow_original_mapping and
167
+ Time === obj and !obj.instance_variables.empty?
168
+ return nil
169
+ end
170
+ soap_obj = nil
171
+ begin
172
+ soap_obj = soap_class.new(obj)
173
+ rescue XSD::ValueSpaceError
174
+ return nil
175
+ end
176
+ mark_marshalled_obj(obj, soap_obj)
177
+ soap_obj
178
+ end
179
+
180
+ def soap2obj(obj_class, node, info, map)
181
+ if node.respond_to?(:to_obj)
182
+ obj = node.to_obj(obj_class)
183
+ return false if obj.nil?
184
+ mark_unmarshalled_obj(node, obj)
185
+ return true, obj
186
+ else
187
+ return false
188
+ end
189
+ end
190
+ end
191
+
192
+ class Base64Factory_ < Factory
193
+ def obj2soap(soap_class, obj, info, map)
194
+ return nil unless obj.instance_variables.empty?
195
+ soap_obj = soap_class.new(obj)
196
+ mark_marshalled_obj(obj, soap_obj) if soap_obj
197
+ soap_obj
198
+ end
199
+
200
+ def soap2obj(obj_class, node, info, map)
201
+ obj = node.string
202
+ mark_unmarshalled_obj(node, obj)
203
+ return true, obj
204
+ end
205
+ end
206
+
207
+ class URIFactory_ < Factory
208
+ def obj2soap(soap_class, obj, info, map)
209
+ soap_obj = soap_class.new(obj)
210
+ mark_marshalled_obj(obj, soap_obj) if soap_obj
211
+ soap_obj
212
+ end
213
+
214
+ def soap2obj(obj_class, node, info, map)
215
+ obj = node.data
216
+ mark_unmarshalled_obj(node, obj)
217
+ return true, obj
218
+ end
219
+ end
220
+
221
+ class ArrayFactory_ < Factory
222
+ def initialize(allow_original_mapping = false)
223
+ super()
224
+ @allow_original_mapping = allow_original_mapping
225
+ end
226
+
227
+ # [[1], [2]] is converted to Array of Array, not 2-D Array.
228
+ # To create M-D Array, you must call Mapping.ary2md.
229
+ def obj2soap(soap_class, obj, info, map)
230
+ if !@allow_original_mapping and !obj.instance_variables.empty?
231
+ return nil
232
+ end
233
+ arytype = Mapping.obj2element(obj)
234
+ if arytype.name
235
+ arytype.namespace ||= RubyTypeNamespace
236
+ else
237
+ arytype = XSD::AnyTypeName
238
+ end
239
+ soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
240
+ mark_marshalled_obj(obj, soap_obj)
241
+ obj.each do |item|
242
+ soap_obj.add(Mapping._obj2soap(item, map))
243
+ end
244
+ soap_obj
245
+ end
246
+
247
+ def soap2obj(obj_class, node, info, map)
248
+ obj = Mapping.create_empty_object(obj_class)
249
+ mark_unmarshalled_obj(node, obj)
250
+ node.soap2array(obj) do |elem|
251
+ elem ? Mapping._soap2obj(elem, map) : nil
252
+ end
253
+ return true, obj
254
+ end
255
+ end
256
+
257
+ class TypedArrayFactory_ < Factory
258
+ def initialize(allow_original_mapping = false)
259
+ super()
260
+ @allow_original_mapping = allow_original_mapping
261
+ end
262
+
263
+ def obj2soap(soap_class, obj, info, map)
264
+ if !@allow_original_mapping and !obj.instance_variables.empty?
265
+ return nil
266
+ end
267
+ arytype = info[:type] || info[0]
268
+ soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
269
+ mark_marshalled_obj(obj, soap_obj)
270
+ obj.each do |var|
271
+ soap_obj.add(Mapping._obj2soap(var, map))
272
+ end
273
+ soap_obj
274
+ end
275
+
276
+ def soap2obj(obj_class, node, info, map)
277
+ if node.rank > 1
278
+ return false
279
+ end
280
+ arytype = info[:type] || info[0]
281
+ unless node.arytype == arytype
282
+ return false
283
+ end
284
+ obj = Mapping.create_empty_object(obj_class)
285
+ mark_unmarshalled_obj(node, obj)
286
+ node.soap2array(obj) do |elem|
287
+ elem ? Mapping._soap2obj(elem, map) : nil
288
+ end
289
+ return true, obj
290
+ end
291
+ end
292
+
293
+ class TypedStructFactory_ < Factory
294
+ def obj2soap(soap_class, obj, info, map)
295
+ type = info[:type] || info[0]
296
+ soap_obj = soap_class.new(type)
297
+ mark_marshalled_obj(obj, soap_obj)
298
+ if obj.class <= SOAP::Marshallable
299
+ setiv2soap(soap_obj, obj, map)
300
+ else
301
+ # allow to serialize an instance of unmarked class
302
+ setiv2soap(soap_obj, obj, map)
303
+ end
304
+ soap_obj
305
+ end
306
+
307
+ def soap2obj(obj_class, node, info, map)
308
+ type = info[:type] || info[0]
309
+ unless node.type == type
310
+ return false
311
+ end
312
+ obj = Mapping.create_empty_object(obj_class)
313
+ mark_unmarshalled_obj(node, obj)
314
+ setiv2obj(obj, node, map)
315
+ return true, obj
316
+ end
317
+ end
318
+
319
+ MapQName = XSD::QName.new(ApacheSOAPTypeNamespace, 'Map')
320
+ class HashFactory_ < Factory
321
+ def initialize(allow_original_mapping = false)
322
+ super()
323
+ @allow_original_mapping = allow_original_mapping
324
+ end
325
+
326
+ def obj2soap(soap_class, obj, info, map)
327
+ if !@allow_original_mapping and !obj.instance_variables.empty?
328
+ return nil
329
+ end
330
+ if !obj.default.nil? or
331
+ (obj.respond_to?(:default_proc) and obj.default_proc)
332
+ return nil
333
+ end
334
+ soap_obj = SOAPStruct.new(MapQName)
335
+ mark_marshalled_obj(obj, soap_obj)
336
+ obj.each do |key, value|
337
+ elem = SOAPStruct.new
338
+ elem.add("key", Mapping._obj2soap(key, map))
339
+ elem.add("value", Mapping._obj2soap(value, map))
340
+ # ApacheAxis allows only 'item' here.
341
+ soap_obj.add("item", elem)
342
+ end
343
+ soap_obj
344
+ end
345
+
346
+ def soap2obj(obj_class, node, info, map)
347
+ unless node.type == MapQName
348
+ return false
349
+ end
350
+ if node.class == SOAPStruct and node.key?('default')
351
+ return false
352
+ end
353
+ obj = Mapping.create_empty_object(obj_class)
354
+ mark_unmarshalled_obj(node, obj)
355
+ if node.class == SOAPStruct
356
+ node.each do |key, value|
357
+ obj[Mapping._soap2obj(value['key'], map)] =
358
+ Mapping._soap2obj(value['value'], map)
359
+ end
360
+ else
361
+ node.each do |value|
362
+ obj[Mapping._soap2obj(value['key'], map)] =
363
+ Mapping._soap2obj(value['value'], map)
364
+ end
365
+ end
366
+ return true, obj
367
+ end
368
+ end
369
+
370
+
371
+ end
372
+ end
@@ -0,0 +1,321 @@
1
+ # SOAP4R - literal mapping registry.
2
+ # Copyright (C) 2004-2006 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 'soap/baseData'
10
+ require 'soap/mapping/mapping'
11
+ require 'soap/mapping/typeMap'
12
+ require 'xsd/codegen/gensupport'
13
+ require 'xsd/namedelements'
14
+
15
+
16
+ module SOAP
17
+ module Mapping
18
+
19
+
20
+ class LiteralRegistry
21
+ include RegistrySupport
22
+
23
+ attr_accessor :excn_handler_obj2soap
24
+ attr_accessor :excn_handler_soap2obj
25
+
26
+ def initialize
27
+ super()
28
+ @excn_handler_obj2soap = nil
29
+ @excn_handler_soap2obj = nil
30
+ end
31
+
32
+ def obj2soap(obj, qname)
33
+ soap_obj = nil
34
+ if obj.is_a?(SOAPElement)
35
+ soap_obj = obj
36
+ else
37
+ soap_obj = any2soap(obj, qname)
38
+ end
39
+ return soap_obj if soap_obj
40
+ if @excn_handler_obj2soap
41
+ soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
42
+ Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT)
43
+ }
44
+ return soap_obj if soap_obj
45
+ end
46
+ raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
47
+ end
48
+
49
+ # node should be a SOAPElement
50
+ def soap2obj(node, obj_class = nil)
51
+ # obj_class is given when rpc/literal service. but ignored for now.
52
+ begin
53
+ return any2obj(node)
54
+ rescue MappingError
55
+ end
56
+ if @excn_handler_soap2obj
57
+ begin
58
+ return @excn_handler_soap2obj.call(node) { |yield_node|
59
+ Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT)
60
+ }
61
+ rescue Exception
62
+ end
63
+ end
64
+ raise MappingError.new("cannot map #{node.elename.name}/#{node.type.name} to Ruby object")
65
+ end
66
+
67
+ private
68
+
69
+ MAPPING_OPT = { :no_reference => true }
70
+
71
+ def any2soap(obj, qname)
72
+ ele = nil
73
+ if definition = schema_definition_from_class(obj.class)
74
+ ele = stubobj2soap(obj, qname, definition)
75
+ elsif obj.is_a?(SOAP::Mapping::Object)
76
+ ele = mappingobj2soap(obj, qname)
77
+ elsif obj.is_a?(Hash)
78
+ ele = SOAPElement.from_obj(obj)
79
+ ele.elename = qname
80
+ elsif obj.is_a?(Array)
81
+ # treat as a list of simpletype
82
+ ele = SOAPElement.new(qname, obj.join(" "))
83
+ elsif obj.is_a?(XSD::QName)
84
+ ele = SOAPElement.new(qname)
85
+ ele.text = obj
86
+ else
87
+ # expected to be a basetype or an anyType.
88
+ # SOAPStruct, etc. is used instead of SOAPElement.
89
+ begin
90
+ ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT)
91
+ ele.elename = qname
92
+ rescue MappingError
93
+ ele = SOAPElement.new(qname, obj.to_s)
94
+ end
95
+ end
96
+ add_attributes2soap(obj, ele)
97
+ ele
98
+ end
99
+
100
+ def stubobj2soap(obj, qname, definition)
101
+ if obj.is_a?(::String)
102
+ ele = SOAPElement.new(qname, obj)
103
+ else
104
+ ele = SOAPElement.new(qname)
105
+ end
106
+ ele.qualified = definition.qualified
107
+ if definition.type
108
+ ele.extraattr[XSD::AttrTypeName] = definition.type
109
+ end
110
+ any = nil
111
+ if definition.have_any?
112
+ any = Mapping.get_attributes_for_any(obj, definition.elements)
113
+ end
114
+ definition.elements.each do |eledef|
115
+ if eledef.elename == XSD::AnyTypeName
116
+ if any
117
+ SOAPElement.from_objs(any).each do |child|
118
+ ele.add(child)
119
+ end
120
+ end
121
+ elsif child = Mapping.get_attribute(obj, eledef.varname)
122
+ if eledef.as_array?
123
+ child.each do |item|
124
+ ele.add(obj2soap(item, eledef.elename))
125
+ end
126
+ else
127
+ ele.add(obj2soap(child, eledef.elename))
128
+ end
129
+ elsif obj.respond_to?(:each) and eledef.as_array?
130
+ obj.each do |item|
131
+ ele.add(obj2soap(item, eledef.elename))
132
+ end
133
+ end
134
+ end
135
+ if definition.attributes
136
+ definition.attributes.each do |qname, param|
137
+ at = obj.__send__(
138
+ XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name))
139
+ ele.extraattr[qname] = at
140
+ end
141
+ end
142
+ ele
143
+ end
144
+
145
+ def mappingobj2soap(obj, qname)
146
+ ele = SOAPElement.new(qname)
147
+ obj.__xmlele.each do |key, value|
148
+ if value.is_a?(::Array)
149
+ value.each do |item|
150
+ ele.add(obj2soap(item, key))
151
+ end
152
+ else
153
+ ele.add(obj2soap(value, key))
154
+ end
155
+ end
156
+ ele
157
+ end
158
+
159
+ def any2obj(node, obj_class = nil)
160
+ if obj_class
161
+ definition = schema_definition_from_class(obj_class)
162
+ else
163
+ definition = schema_definition_from_elename(node.elename)
164
+ if definition
165
+ obj_class = definition.class_for
166
+ end
167
+ end
168
+ if node.is_a?(::SOAP::SOAPElement) or node.is_a?(::SOAP::SOAPStruct)
169
+ if definition
170
+ return elesoap2stubobj(node, obj_class, definition)
171
+ else
172
+ # SOAPArray for literal?
173
+ return elesoap2plainobj(node)
174
+ end
175
+ end
176
+ obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT)
177
+ add_attributes2obj(node, obj)
178
+ obj
179
+ end
180
+
181
+ def elesoap2stubobj(node, obj_class, definition)
182
+ obj = Mapping.create_empty_object(obj_class)
183
+ add_elesoap2stubobj(node, obj, definition)
184
+ add_attributes2stubobj(node, obj, definition)
185
+ obj
186
+ end
187
+
188
+ def elesoap2plainobj(node)
189
+ obj = anytype2obj(node)
190
+ add_elesoap2plainobj(node, obj)
191
+ add_attributes2obj(node, obj)
192
+ obj
193
+ end
194
+
195
+ def anytype2obj(node)
196
+ if node.is_a?(::SOAP::SOAPBasetype)
197
+ return node.data
198
+ end
199
+ klass = ::SOAP::Mapping::Object
200
+ obj = klass.new
201
+ obj
202
+ end
203
+
204
+ def add_elesoap2stubobj(node, obj, definition)
205
+ vars = {}
206
+ node.each do |name, value|
207
+ item = definition.elements.find { |k, v|
208
+ k.elename == value.elename
209
+ }
210
+ if item
211
+ child = elesoapchild2obj(value, item)
212
+ else
213
+ # unknown element is treated as anyType.
214
+ child = any2obj(value)
215
+ end
216
+ if item and item.as_array?
217
+ (vars[name] ||= []) << child
218
+ elsif vars.key?(name)
219
+ vars[name] = [vars[name], child].flatten
220
+ else
221
+ vars[name] = child
222
+ end
223
+ end
224
+ if obj.is_a?(::Array) and vars.keys.size == 1
225
+ obj.replace(vars.values[0])
226
+ else
227
+ Mapping.set_attributes(obj, vars)
228
+ end
229
+ end
230
+
231
+ def elesoapchild2obj(value, eledef)
232
+ child_definition = schema_definition_from_elename(eledef.elename)
233
+ if child_definition
234
+ any2obj(value, child_definition.class_for)
235
+ elsif eledef.mapped_class
236
+ child_definition = schema_definition_from_class(eledef.mapped_class)
237
+ if child_definition
238
+ any2obj(value, child_definition.class_for)
239
+ else
240
+ if eledef.mapped_class.ancestors.include?(::SOAP::SOAPBasetype)
241
+ base2obj(value, eledef.mapped_class)
242
+ else
243
+ any2obj(value, eledef.mapped_class)
244
+ end
245
+ end
246
+ else
247
+ # untyped element is treated as anyType.
248
+ any2obj(value)
249
+ end
250
+ end
251
+
252
+ def add_attributes2stubobj(node, obj, definition)
253
+ return if obj.nil? or node.extraattr.empty?
254
+ if attributes = definition.attributes
255
+ define_xmlattr(obj)
256
+ attributes.each do |qname, class_name|
257
+ attr = node.extraattr[qname]
258
+ next if attr.nil? or attr.empty?
259
+ child = attr
260
+ if class_name
261
+ klass = Mapping.class_from_name(class_name)
262
+ if klass.ancestors.include?(::SOAP::SOAPBasetype)
263
+ child = klass.new(attr).data
264
+ end
265
+ end
266
+ obj.__xmlattr[qname] = child
267
+ define_xmlattr_accessor(obj, qname)
268
+ end
269
+ end
270
+ end
271
+
272
+ def add_elesoap2plainobj(node, obj)
273
+ node.each do |name, value|
274
+ obj.__add_xmlele_value(value.elename, any2obj(value))
275
+ end
276
+ end
277
+
278
+ def add_attributes2obj(node, obj)
279
+ return if obj.nil? or node.extraattr.empty?
280
+ define_xmlattr(obj)
281
+ node.extraattr.each do |qname, value|
282
+ obj.__xmlattr[qname] = value
283
+ define_xmlattr_accessor(obj, qname)
284
+ end
285
+ end
286
+
287
+ # Mapping.define_attr_accessor calls define_method with proc and it exhausts
288
+ # much memory for each singleton Object. just instance_eval instead of it.
289
+ def define_xmlattr_accessor(obj, qname)
290
+ # untaint depends GenSupport.safemethodname
291
+ name = XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name).untaint
292
+ # untaint depends QName#dump
293
+ qnamedump = qname.dump.untaint
294
+ obj.instance_eval <<-EOS
295
+ def #{name}
296
+ @__xmlattr[#{qnamedump}]
297
+ end
298
+
299
+ def #{name}=(value)
300
+ @__xmlattr[#{qnamedump}] = value
301
+ end
302
+ EOS
303
+ end
304
+
305
+ # Mapping.define_attr_accessor calls define_method with proc and it exhausts
306
+ # much memory for each singleton Object. just instance_eval instead of it.
307
+ def define_xmlattr(obj)
308
+ obj.instance_variable_set('@__xmlattr', {})
309
+ unless obj.respond_to?(:__xmlattr)
310
+ obj.instance_eval <<-EOS
311
+ def __xmlattr
312
+ @__xmlattr
313
+ end
314
+ EOS
315
+ end
316
+ end
317
+ end
318
+
319
+
320
+ end
321
+ end