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,258 @@
1
+ # SOAP4R - Mapping registry.
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
+ require 'soap/baseData'
10
+ require 'soap/mapping/mapping'
11
+
12
+
13
+ module SOAP
14
+
15
+
16
+ module Marshallable
17
+ # @@type_ns = Mapping::RubyCustomTypeNamespace
18
+ end
19
+
20
+
21
+ module Mapping
22
+
23
+
24
+ module MappedException; end
25
+
26
+
27
+ RubyTypeName = XSD::QName.new(RubyTypeInstanceNamespace, 'rubyType')
28
+ RubyExtendName = XSD::QName.new(RubyTypeInstanceNamespace, 'extends')
29
+ RubyIVarName = XSD::QName.new(RubyTypeInstanceNamespace, 'ivars')
30
+
31
+
32
+ # For anyType object: SOAP::Mapping::Object not ::Object
33
+ class Object
34
+ def initialize
35
+ @__xmlele_type = {}
36
+ @__xmlele = []
37
+ @__xmlattr = {}
38
+ end
39
+
40
+ def inspect
41
+ sprintf("#<%s:0x%x%s>", self.class.name, __id__,
42
+ @__xmlele.collect { |name, value| " #{name}=#{value.inspect}" }.join)
43
+ end
44
+
45
+ def __xmlattr
46
+ @__xmlattr
47
+ end
48
+
49
+ def __xmlele
50
+ @__xmlele
51
+ end
52
+
53
+ def [](qname)
54
+ unless qname.is_a?(XSD::QName)
55
+ qname = XSD::QName.new(nil, qname)
56
+ end
57
+ @__xmlele.each do |k, v|
58
+ return v if k == qname
59
+ end
60
+ # fallback
61
+ @__xmlele.each do |k, v|
62
+ return v if k.name == qname.name
63
+ end
64
+ nil
65
+ end
66
+
67
+ def []=(qname, value)
68
+ unless qname.is_a?(XSD::QName)
69
+ qname = XSD::QName.new(nil, qname)
70
+ end
71
+ found = false
72
+ @__xmlele.each do |pair|
73
+ if pair[0] == qname
74
+ found = true
75
+ pair[1] = value
76
+ end
77
+ end
78
+ unless found
79
+ __define_attr_accessor(qname)
80
+ @__xmlele << [qname, value]
81
+ end
82
+ @__xmlele_type[qname] = :single
83
+ end
84
+
85
+ def __add_xmlele_value(qname, value)
86
+ found = false
87
+ @__xmlele.map! do |k, v|
88
+ if k == qname
89
+ found = true
90
+ [k, __set_xmlele_value(k, v, value)]
91
+ else
92
+ [k, v]
93
+ end
94
+ end
95
+ unless found
96
+ __define_attr_accessor(qname)
97
+ @__xmlele << [qname, value]
98
+ @__xmlele_type[qname] = :single
99
+ end
100
+ value
101
+ end
102
+
103
+ def marshal_load(dumpobj)
104
+ __import(dumpobj)
105
+ end
106
+
107
+ private
108
+
109
+ # Mapping.define_attr_accessor calls define_method with proc and it exhausts
110
+ # much memory for each singleton Object. just instance_eval instead of it.
111
+ def __define_attr_accessor(qname)
112
+ # untaint depends GenSupport.safemethodname
113
+ name = XSD::CodeGen::GenSupport.safemethodname(qname.name).untaint
114
+ # untaint depends on QName#dump
115
+ qnamedump = qname.dump.untaint
116
+ singleton = false
117
+ unless self.respond_to?(name)
118
+ singleton = true
119
+ instance_eval <<-EOS
120
+ def #{name}
121
+ self[#{qnamedump}]
122
+ end
123
+ EOS
124
+ end
125
+ unless self.respond_to?(name + "=")
126
+ singleton = true
127
+ instance_eval <<-EOS
128
+ def #{name}=(value)
129
+ self[#{qnamedump}] = value
130
+ end
131
+ EOS
132
+ end
133
+ if singleton && !self.respond_to?(:marshal_dump)
134
+ instance_eval <<-EOS
135
+ def marshal_dump
136
+ __export
137
+ end
138
+ EOS
139
+ end
140
+ end
141
+
142
+ def __set_xmlele_value(key, org, value)
143
+ case @__xmlele_type[key]
144
+ when :multi
145
+ org << value
146
+ org
147
+ when :single
148
+ @__xmlele_type[key] = :multi
149
+ [org, value]
150
+ else
151
+ raise RuntimeError.new("unknown type")
152
+ end
153
+ end
154
+
155
+ def __export
156
+ dumpobj = ::SOAP::Mapping::Object.new
157
+ dumpobj.__xmlele.replace(@__xmlele)
158
+ dumpobj.__xmlattr.replace(@__xmlattr)
159
+ dumpobj
160
+ end
161
+
162
+ def __import(dumpobj)
163
+ @__xmlele_type = {}
164
+ @__xmlele = []
165
+ @__xmlattr = {}
166
+ dumpobj.__xmlele.each do |qname, value|
167
+ __add_xmlele_value(qname, value)
168
+ end
169
+ @__xmlattr.replace(dumpobj.__xmlattr)
170
+ end
171
+ end
172
+
173
+
174
+ class MappingError < Error; end
175
+
176
+
177
+ module RegistrySupport
178
+ def initialize
179
+ super()
180
+ @class_schema_definition = {}
181
+ @elename_schema_definition = {}
182
+ @type_schema_definition = {}
183
+ end
184
+
185
+ def register(definition)
186
+ obj_class = definition[:class]
187
+ definition = Mapping.create_schema_definition(obj_class, definition)
188
+ @class_schema_definition[obj_class] = definition
189
+ if definition.elename
190
+ @elename_schema_definition[definition.elename] = definition
191
+ end
192
+ if definition.type
193
+ @type_schema_definition[definition.type] = definition
194
+ end
195
+ end
196
+
197
+ def schema_definition_from_class(klass)
198
+ @class_schema_definition[klass] || Mapping.schema_definition_classdef(klass)
199
+ end
200
+
201
+ def schema_definition_from_elename(qname)
202
+ @elename_schema_definition[qname] || find_schema_definition(qname.name)
203
+ end
204
+
205
+ def schema_definition_from_type(type)
206
+ @type_schema_definition[type] || find_schema_definition(type.name)
207
+ end
208
+
209
+ def find_schema_definition(name)
210
+ return nil unless name
211
+ typestr = XSD::CodeGen::GenSupport.safeconstname(name)
212
+ obj_class = Mapping.class_from_name(typestr)
213
+ if obj_class
214
+ schema_definition_from_class(obj_class)
215
+ end
216
+ end
217
+
218
+ def add_attributes2soap(obj, ele)
219
+ definition = Mapping.schema_definition_classdef(obj.class)
220
+ if definition && attributes = definition.attributes
221
+ attributes.each do |qname, param|
222
+ at = obj.__send__(
223
+ XSD::CodeGen::GenSupport.safemethodname('xmlattr_' + qname.name))
224
+ ele.extraattr[qname] = at
225
+ end
226
+ elsif obj.respond_to?(:__xmlattr)
227
+ obj.__xmlattr.each do |key, value|
228
+ ele.extraattr[key] = value
229
+ end
230
+ end
231
+ end
232
+
233
+ def base2soap(obj, type, qualified = nil)
234
+ soap_obj = nil
235
+ if type <= XSD::XSDString
236
+ str = XSD::Charset.encoding_conv(obj.to_s,
237
+ Thread.current[:SOAPMapping][:ExternalCES],
238
+ XSD::Charset.encoding)
239
+ soap_obj = type.new(str)
240
+ else
241
+ soap_obj = type.new(obj)
242
+ end
243
+ soap_obj.qualified = qualified
244
+ soap_obj
245
+ end
246
+
247
+ def base2obj(value, klass)
248
+ if value.respond_to?(:data)
249
+ klass.new(value.data).data
250
+ else
251
+ klass.new(nil).data
252
+ end
253
+ end
254
+ end
255
+
256
+
257
+ end
258
+ end
@@ -0,0 +1,475 @@
1
+ # SOAP4R - Ruby type mapping factory.
2
+ # Copyright (C) 2000-2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ module SOAP
10
+ module Mapping
11
+
12
+
13
+ class RubytypeFactory < Factory
14
+ TYPE_STRING = XSD::QName.new(RubyTypeNamespace, 'String')
15
+ TYPE_TIME = XSD::QName.new(RubyTypeNamespace, 'Time')
16
+ TYPE_ARRAY = XSD::QName.new(RubyTypeNamespace, 'Array')
17
+ TYPE_REGEXP = XSD::QName.new(RubyTypeNamespace, 'Regexp')
18
+ TYPE_RANGE = XSD::QName.new(RubyTypeNamespace, 'Range')
19
+ TYPE_CLASS = XSD::QName.new(RubyTypeNamespace, 'Class')
20
+ TYPE_MODULE = XSD::QName.new(RubyTypeNamespace, 'Module')
21
+ TYPE_SYMBOL = XSD::QName.new(RubyTypeNamespace, 'Symbol')
22
+ TYPE_STRUCT = XSD::QName.new(RubyTypeNamespace, 'Struct')
23
+ TYPE_HASH = XSD::QName.new(RubyTypeNamespace, 'Map')
24
+
25
+ def initialize(config = {})
26
+ @config = config
27
+ @allow_untyped_struct = @config.key?(:allow_untyped_struct) ?
28
+ @config[:allow_untyped_struct] : true
29
+ @allow_original_mapping = @config.key?(:allow_original_mapping) ?
30
+ @config[:allow_original_mapping] : false
31
+ @string_factory = StringFactory_.new(true)
32
+ @basetype_factory = BasetypeFactory_.new(true)
33
+ @datetime_factory = DateTimeFactory_.new(true)
34
+ @array_factory = ArrayFactory_.new(true)
35
+ @hash_factory = HashFactory_.new(true)
36
+ end
37
+
38
+ def obj2soap(soap_class, obj, info, map)
39
+ param = nil
40
+ case obj
41
+ when ::String
42
+ unless @allow_original_mapping
43
+ return nil
44
+ end
45
+ param = @string_factory.obj2soap(SOAPString, obj, info, map)
46
+ if obj.class != String
47
+ param.extraattr[RubyTypeName] = obj.class.name
48
+ end
49
+ addiv2soapattr(param, obj, map)
50
+ when ::Time
51
+ unless @allow_original_mapping
52
+ return nil
53
+ end
54
+ param = @datetime_factory.obj2soap(SOAPDateTime, obj, info, map)
55
+ if obj.class != Time
56
+ param.extraattr[RubyTypeName] = obj.class.name
57
+ end
58
+ addiv2soapattr(param, obj, map)
59
+ when ::Array
60
+ unless @allow_original_mapping
61
+ return nil
62
+ end
63
+ param = @array_factory.obj2soap(nil, obj, info, map)
64
+ if obj.class != Array
65
+ param.extraattr[RubyTypeName] = obj.class.name
66
+ end
67
+ addiv2soapattr(param, obj, map)
68
+ when ::NilClass
69
+ unless @allow_original_mapping
70
+ return nil
71
+ end
72
+ param = @basetype_factory.obj2soap(SOAPNil, obj, info, map)
73
+ addiv2soapattr(param, obj, map)
74
+ when ::FalseClass, ::TrueClass
75
+ unless @allow_original_mapping
76
+ return nil
77
+ end
78
+ param = @basetype_factory.obj2soap(SOAPBoolean, obj, info, map)
79
+ addiv2soapattr(param, obj, map)
80
+ when ::Integer
81
+ unless @allow_original_mapping
82
+ return nil
83
+ end
84
+ param = @basetype_factory.obj2soap(SOAPInt, obj, info, map)
85
+ param ||= @basetype_factory.obj2soap(SOAPInteger, obj, info, map)
86
+ param ||= @basetype_factory.obj2soap(SOAPDecimal, obj, info, map)
87
+ addiv2soapattr(param, obj, map)
88
+ when ::Float
89
+ unless @allow_original_mapping
90
+ return nil
91
+ end
92
+ param = @basetype_factory.obj2soap(SOAPDouble, obj, info, map)
93
+ if obj.class != Float
94
+ param.extraattr[RubyTypeName] = obj.class.name
95
+ end
96
+ addiv2soapattr(param, obj, map)
97
+ when ::Hash
98
+ unless @allow_original_mapping
99
+ return nil
100
+ end
101
+ if obj.respond_to?(:default_proc) && obj.default_proc
102
+ raise TypeError.new("cannot dump hash with default proc")
103
+ end
104
+ param = SOAPStruct.new(TYPE_HASH)
105
+ mark_marshalled_obj(obj, param)
106
+ if obj.class != Hash
107
+ param.extraattr[RubyTypeName] = obj.class.name
108
+ end
109
+ obj.each do |key, value|
110
+ elem = SOAPStruct.new # Undefined type.
111
+ elem.add("key", Mapping._obj2soap(key, map))
112
+ elem.add("value", Mapping._obj2soap(value, map))
113
+ param.add("item", elem)
114
+ end
115
+ param.add('default', Mapping._obj2soap(obj.default, map))
116
+ addiv2soapattr(param, obj, map)
117
+ when ::Regexp
118
+ unless @allow_original_mapping
119
+ return nil
120
+ end
121
+ param = SOAPStruct.new(TYPE_REGEXP)
122
+ mark_marshalled_obj(obj, param)
123
+ if obj.class != Regexp
124
+ param.extraattr[RubyTypeName] = obj.class.name
125
+ end
126
+ param.add('source', SOAPBase64.new(obj.source))
127
+ if obj.respond_to?('options')
128
+ # Regexp#options is from Ruby/1.7
129
+ options = obj.options
130
+ else
131
+ options = 0
132
+ obj.inspect.sub(/^.*\//, '').each_byte do |c|
133
+ options += case c
134
+ when ?i
135
+ 1
136
+ when ?x
137
+ 2
138
+ when ?m
139
+ 4
140
+ when ?n
141
+ 16
142
+ when ?e
143
+ 32
144
+ when ?s
145
+ 48
146
+ when ?u
147
+ 64
148
+ end
149
+ end
150
+ end
151
+ param.add('options', SOAPInt.new(options))
152
+ addiv2soapattr(param, obj, map)
153
+ when ::Range
154
+ unless @allow_original_mapping
155
+ return nil
156
+ end
157
+ param = SOAPStruct.new(TYPE_RANGE)
158
+ mark_marshalled_obj(obj, param)
159
+ if obj.class != Range
160
+ param.extraattr[RubyTypeName] = obj.class.name
161
+ end
162
+ param.add('begin', Mapping._obj2soap(obj.begin, map))
163
+ param.add('end', Mapping._obj2soap(obj.end, map))
164
+ param.add('exclude_end', SOAP::SOAPBoolean.new(obj.exclude_end?))
165
+ addiv2soapattr(param, obj, map)
166
+ when ::Class
167
+ unless @allow_original_mapping
168
+ return nil
169
+ end
170
+ if obj.to_s[0] == ?#
171
+ raise TypeError.new("can't dump anonymous class #{obj}")
172
+ end
173
+ param = SOAPStruct.new(TYPE_CLASS)
174
+ mark_marshalled_obj(obj, param)
175
+ param.add('name', SOAPString.new(obj.name))
176
+ addiv2soapattr(param, obj, map)
177
+ when ::Module
178
+ unless @allow_original_mapping
179
+ return nil
180
+ end
181
+ if obj.to_s[0] == ?#
182
+ raise TypeError.new("can't dump anonymous module #{obj}")
183
+ end
184
+ param = SOAPStruct.new(TYPE_MODULE)
185
+ mark_marshalled_obj(obj, param)
186
+ param.add('name', SOAPString.new(obj.name))
187
+ addiv2soapattr(param, obj, map)
188
+ when ::Symbol
189
+ unless @allow_original_mapping
190
+ return nil
191
+ end
192
+ param = SOAPStruct.new(TYPE_SYMBOL)
193
+ mark_marshalled_obj(obj, param)
194
+ param.add('id', SOAPString.new(obj.id2name))
195
+ addiv2soapattr(param, obj, map)
196
+ when ::Struct
197
+ unless @allow_original_mapping
198
+ # treat it as an user defined class. [ruby-talk:104980]
199
+ #param = unknownobj2soap(soap_class, obj, info, map)
200
+ param = SOAPStruct.new(XSD::AnyTypeName)
201
+ mark_marshalled_obj(obj, param)
202
+ obj.members.each do |member|
203
+ param.add(Mapping.name2elename(member),
204
+ Mapping._obj2soap(obj[member], map))
205
+ end
206
+ else
207
+ param = SOAPStruct.new(TYPE_STRUCT)
208
+ mark_marshalled_obj(obj, param)
209
+ param.add('type', ele_type = SOAPString.new(obj.class.to_s))
210
+ ele_member = SOAPStruct.new
211
+ obj.members.each do |member|
212
+ ele_member.add(Mapping.name2elename(member),
213
+ Mapping._obj2soap(obj[member], map))
214
+ end
215
+ param.add('member', ele_member)
216
+ addiv2soapattr(param, obj, map)
217
+ end
218
+ when ::IO, ::Binding, ::Continuation, ::Data, ::Dir, ::File::Stat,
219
+ ::MatchData, Method, ::Proc, ::Thread, ::ThreadGroup
220
+ # from 1.8: Process::Status, UnboundMethod
221
+ return nil
222
+ when ::SOAP::Mapping::Object
223
+ param = SOAPStruct.new(XSD::AnyTypeName)
224
+ mark_marshalled_obj(obj, param)
225
+ obj.__xmlele.each do |key, value|
226
+ param.add(key.name, Mapping._obj2soap(value, map))
227
+ end
228
+ obj.__xmlattr.each do |key, value|
229
+ param.extraattr[key] = value
230
+ end
231
+ when ::Exception
232
+ typestr = Mapping.name2elename(obj.class.to_s)
233
+ param = SOAPStruct.new(XSD::QName.new(RubyTypeNamespace, typestr))
234
+ mark_marshalled_obj(obj, param)
235
+ param.add('message', Mapping._obj2soap(obj.message, map))
236
+ param.add('backtrace', Mapping._obj2soap(obj.backtrace, map))
237
+ addiv2soapattr(param, obj, map)
238
+ else
239
+ param = unknownobj2soap(soap_class, obj, info, map)
240
+ end
241
+ param
242
+ end
243
+
244
+ def soap2obj(obj_class, node, info, map)
245
+ rubytype = node.extraattr[RubyTypeName]
246
+ if rubytype or node.type.namespace == RubyTypeNamespace
247
+ rubytype2obj(node, info, map, rubytype)
248
+ elsif node.type == XSD::AnyTypeName or node.type == XSD::AnySimpleTypeName
249
+ anytype2obj(node, info, map)
250
+ else
251
+ unknowntype2obj(node, info, map)
252
+ end
253
+ end
254
+
255
+ private
256
+
257
+ def addiv2soapattr(node, obj, map)
258
+ return if obj.instance_variables.empty?
259
+ ivars = SOAPStruct.new # Undefined type.
260
+ setiv2soap(ivars, obj, map)
261
+ node.extraattr[RubyIVarName] = ivars
262
+ end
263
+
264
+ def unknownobj2soap(soap_class, obj, info, map)
265
+ if anonymous_class?(obj)
266
+ raise TypeError.new("can't dump anonymous class #{obj}")
267
+ end
268
+ singleton_class = class << obj; self; end
269
+ if !singleton_methods_true(obj).empty? or
270
+ !singleton_class.instance_variables.empty?
271
+ raise TypeError.new("singleton can't be dumped #{obj}")
272
+ end
273
+ if !(singleton_class.ancestors - obj.class.ancestors).empty?
274
+ typestr = Mapping.name2elename(obj.class.to_s)
275
+ type = XSD::QName.new(RubyTypeNamespace, typestr)
276
+ else
277
+ type = Mapping.class2element(obj.class)
278
+ end
279
+ param = SOAPStruct.new(type)
280
+ mark_marshalled_obj(obj, param)
281
+ setiv2soap(param, obj, map)
282
+ param
283
+ end
284
+
285
+ if RUBY_VERSION >= '1.8.0'
286
+ def singleton_methods_true(obj)
287
+ obj.singleton_methods(true)
288
+ end
289
+ else
290
+ def singleton_methods_true(obj)
291
+ obj.singleton_methods
292
+ end
293
+ end
294
+
295
+ def rubytype2obj(node, info, map, rubytype)
296
+ klass = rubytype ? Mapping.class_from_name(rubytype) : nil
297
+ obj = nil
298
+ case node
299
+ when SOAPString
300
+ return @string_factory.soap2obj(klass || String, node, info, map)
301
+ when SOAPDateTime
302
+ #return @datetime_factory.soap2obj(klass || Time, node, info, map)
303
+ klass ||= Time
304
+ t = node.to_time
305
+ arg = [t.year, t.month, t.mday, t.hour, t.min, t.sec, t.usec]
306
+ obj = t.gmt? ? klass.gm(*arg) : klass.local(*arg)
307
+ mark_unmarshalled_obj(node, obj)
308
+ return true, obj
309
+ when SOAPArray
310
+ return @array_factory.soap2obj(klass || Array, node, info, map)
311
+ when SOAPNil, SOAPBoolean, SOAPInt, SOAPInteger, SOAPDecimal, SOAPDouble
312
+ return @basetype_factory.soap2obj(nil, node, info, map)
313
+ when SOAPStruct
314
+ return rubytypestruct2obj(node, info, map, rubytype)
315
+ else
316
+ raise
317
+ end
318
+ end
319
+
320
+ def rubytypestruct2obj(node, info, map, rubytype)
321
+ klass = rubytype ? Mapping.class_from_name(rubytype) : nil
322
+ obj = nil
323
+ case node.type
324
+ when TYPE_HASH
325
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Hash
326
+ obj = Mapping.create_empty_object(klass)
327
+ mark_unmarshalled_obj(node, obj)
328
+ node.each do |key, value|
329
+ next unless key == 'item'
330
+ obj[Mapping._soap2obj(value['key'], map)] =
331
+ Mapping._soap2obj(value['value'], map)
332
+ end
333
+ if node.key?('default')
334
+ obj.default = Mapping._soap2obj(node['default'], map)
335
+ end
336
+ when TYPE_REGEXP
337
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Regexp
338
+ obj = Mapping.create_empty_object(klass)
339
+ mark_unmarshalled_obj(node, obj)
340
+ source = node['source'].string
341
+ options = node['options'].data || 0
342
+ Regexp.instance_method(:initialize).bind(obj).call(source, options)
343
+ when TYPE_RANGE
344
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Range
345
+ obj = Mapping.create_empty_object(klass)
346
+ mark_unmarshalled_obj(node, obj)
347
+ first = Mapping._soap2obj(node['begin'], map)
348
+ last = Mapping._soap2obj(node['end'], map)
349
+ exclude_end = node['exclude_end'].data
350
+ Range.instance_method(:initialize).bind(obj).call(first, last, exclude_end)
351
+ when TYPE_CLASS
352
+ obj = Mapping.class_from_name(node['name'].data)
353
+ when TYPE_MODULE
354
+ obj = Mapping.class_from_name(node['name'].data)
355
+ when TYPE_SYMBOL
356
+ obj = node['id'].data.intern
357
+ when TYPE_STRUCT
358
+ typestr = Mapping.elename2name(node['type'].data)
359
+ klass = Mapping.class_from_name(typestr)
360
+ if klass.nil?
361
+ return false
362
+ end
363
+ unless klass <= ::Struct
364
+ return false
365
+ end
366
+ obj = Mapping.create_empty_object(klass)
367
+ mark_unmarshalled_obj(node, obj)
368
+ node['member'].each do |name, value|
369
+ obj[Mapping.elename2name(name)] = Mapping._soap2obj(value, map)
370
+ end
371
+ else
372
+ return unknowntype2obj(node, info, map)
373
+ end
374
+ return true, obj
375
+ end
376
+
377
+ def anytype2obj(node, info, map)
378
+ case node
379
+ when SOAPBasetype
380
+ return true, node.data
381
+ when SOAPStruct
382
+ klass = ::SOAP::Mapping::Object
383
+ obj = klass.new
384
+ mark_unmarshalled_obj(node, obj)
385
+ node.each do |name, value|
386
+ obj.__add_xmlele_value(XSD::QName.new(nil, name),
387
+ Mapping._soap2obj(value, map))
388
+ end
389
+ unless node.extraattr.empty?
390
+ obj.instance_variable_set('@__xmlattr', node.extraattr)
391
+ end
392
+ return true, obj
393
+ else
394
+ return false
395
+ end
396
+ end
397
+
398
+ def unknowntype2obj(node, info, map)
399
+ case node
400
+ when SOAPBasetype
401
+ return true, node.data
402
+ when SOAPArray
403
+ return @array_factory.soap2obj(Array, node, info, map)
404
+ when SOAPStruct
405
+ obj = unknownstruct2obj(node, info, map)
406
+ return true, obj if obj
407
+ if !@allow_untyped_struct
408
+ return false
409
+ end
410
+ return anytype2obj(node, info, map)
411
+ else
412
+ # Basetype which is not defined...
413
+ return false
414
+ end
415
+ end
416
+
417
+ def unknownstruct2obj(node, info, map)
418
+ unless node.type.name
419
+ return nil
420
+ end
421
+ typestr = Mapping.elename2name(node.type.name)
422
+ klass = Mapping.class_from_name(typestr)
423
+ if klass.nil? and @allow_untyped_struct
424
+ klass = Mapping.class_from_name(typestr, true) # lenient
425
+ end
426
+ if klass.nil?
427
+ return nil
428
+ end
429
+ if klass <= ::Exception
430
+ return exception2obj(klass, node, map)
431
+ end
432
+ klass_type = Mapping.class2qname(klass)
433
+ return nil unless node.type.match(klass_type)
434
+ obj = nil
435
+ begin
436
+ obj = Mapping.create_empty_object(klass)
437
+ rescue
438
+ # type name "data" tries Data.new which raises TypeError
439
+ nil
440
+ end
441
+ mark_unmarshalled_obj(node, obj)
442
+ setiv2obj(obj, node, map)
443
+ obj
444
+ end
445
+
446
+ def exception2obj(klass, node, map)
447
+ message = Mapping._soap2obj(node['message'], map)
448
+ backtrace = Mapping._soap2obj(node['backtrace'], map)
449
+ obj = Mapping.create_empty_object(klass)
450
+ obj = obj.exception(message)
451
+ mark_unmarshalled_obj(node, obj)
452
+ obj.set_backtrace(backtrace)
453
+ obj
454
+ end
455
+
456
+ # Only creates empty array. Do String#replace it with real string.
457
+ def array2obj(node, map, rubytype)
458
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Array
459
+ obj = Mapping.create_empty_object(klass)
460
+ mark_unmarshalled_obj(node, obj)
461
+ obj
462
+ end
463
+
464
+ # Only creates empty string. Do String#replace it with real string.
465
+ def string2obj(node, map, rubytype)
466
+ klass = rubytype ? Mapping.class_from_name(rubytype) : String
467
+ obj = Mapping.create_empty_object(klass)
468
+ mark_unmarshalled_obj(node, obj)
469
+ obj
470
+ end
471
+ end
472
+
473
+
474
+ end
475
+ end