teo-soap4r 1.5.9b

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 (425) hide show
  1. data/bin/wsdl2ruby.rb +137 -0
  2. data/bin/xsd2ruby.rb +90 -0
  3. data/lib/soap/attachment.rb +108 -0
  4. data/lib/soap/attrproxy.rb +34 -0
  5. data/lib/soap/baseData.rb +1094 -0
  6. data/lib/soap/element.rb +277 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  8. data/lib/soap/encodingstyle/handler.rb +120 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +195 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +559 -0
  11. data/lib/soap/filter.rb +13 -0
  12. data/lib/soap/filter/filterchain.rb +51 -0
  13. data/lib/soap/filter/handler.rb +31 -0
  14. data/lib/soap/filter/streamhandler.rb +29 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +61 -0
  17. data/lib/soap/header/handlerset.rb +70 -0
  18. data/lib/soap/header/mappinghandler.rb +47 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +139 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +537 -0
  23. data/lib/soap/mapping/factory.rb +388 -0
  24. data/lib/soap/mapping/literalregistry.rb +391 -0
  25. data/lib/soap/mapping/mapping.rb +576 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +445 -0
  28. data/lib/soap/mapping/schemadefinition.rb +170 -0
  29. data/lib/soap/mapping/typeMap.rb +106 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/nestedexception.rb +42 -0
  35. data/lib/soap/netHttpClient.rb +241 -0
  36. data/lib/soap/ns.rb +34 -0
  37. data/lib/soap/parser.rb +252 -0
  38. data/lib/soap/processor.rb +66 -0
  39. data/lib/soap/property.rb +333 -0
  40. data/lib/soap/proxy.rb +14 -0
  41. data/lib/soap/rpc/cgistub.rb +247 -0
  42. data/lib/soap/rpc/driver.rb +221 -0
  43. data/lib/soap/rpc/element.rb +374 -0
  44. data/lib/soap/rpc/httpserver.rb +142 -0
  45. data/lib/soap/rpc/methodDef.rb +68 -0
  46. data/lib/soap/rpc/proxy.rb +572 -0
  47. data/lib/soap/rpc/router.rb +662 -0
  48. data/lib/soap/rpc/rpc.rb +25 -0
  49. data/lib/soap/rpc/soaplet.rb +200 -0
  50. data/lib/soap/rpc/standaloneServer.rb +43 -0
  51. data/lib/soap/soap.rb +151 -0
  52. data/lib/soap/streamHandler.rb +301 -0
  53. data/lib/soap/wsdlDriver.rb +164 -0
  54. data/lib/wsdl/binding.rb +65 -0
  55. data/lib/wsdl/data.rb +64 -0
  56. data/lib/wsdl/definitions.rb +236 -0
  57. data/lib/wsdl/documentation.rb +32 -0
  58. data/lib/wsdl/import.rb +80 -0
  59. data/lib/wsdl/importer.rb +38 -0
  60. data/lib/wsdl/info.rb +50 -0
  61. data/lib/wsdl/message.rb +54 -0
  62. data/lib/wsdl/operation.rb +151 -0
  63. data/lib/wsdl/operationBinding.rb +240 -0
  64. data/lib/wsdl/param.rb +93 -0
  65. data/lib/wsdl/parser.rb +164 -0
  66. data/lib/wsdl/part.rb +52 -0
  67. data/lib/wsdl/port.rb +66 -0
  68. data/lib/wsdl/portType.rb +75 -0
  69. data/lib/wsdl/service.rb +61 -0
  70. data/lib/wsdl/soap/address.rb +40 -0
  71. data/lib/wsdl/soap/binding.rb +49 -0
  72. data/lib/wsdl/soap/body.rb +58 -0
  73. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  74. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  75. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  76. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  77. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  78. data/lib/wsdl/soap/complexType.rb +173 -0
  79. data/lib/wsdl/soap/data.rb +42 -0
  80. data/lib/wsdl/soap/definitions.rb +200 -0
  81. data/lib/wsdl/soap/driverCreator.rb +118 -0
  82. data/lib/wsdl/soap/element.rb +33 -0
  83. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  84. data/lib/wsdl/soap/fault.rb +56 -0
  85. data/lib/wsdl/soap/header.rb +86 -0
  86. data/lib/wsdl/soap/headerfault.rb +56 -0
  87. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  88. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  89. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  90. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  91. data/lib/wsdl/soap/operation.rb +112 -0
  92. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  93. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  94. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  95. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  96. data/lib/wsdl/types.rb +44 -0
  97. data/lib/wsdl/wsdl.rb +24 -0
  98. data/lib/wsdl/xmlSchema/all.rb +24 -0
  99. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  100. data/lib/wsdl/xmlSchema/any.rb +61 -0
  101. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  103. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  104. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  105. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  106. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  107. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  108. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  109. data/lib/wsdl/xmlSchema/content.rb +95 -0
  110. data/lib/wsdl/xmlSchema/data.rb +116 -0
  111. data/lib/wsdl/xmlSchema/element.rb +153 -0
  112. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  113. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  114. data/lib/wsdl/xmlSchema/group.rb +100 -0
  115. data/lib/wsdl/xmlSchema/import.rb +53 -0
  116. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  117. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  118. data/lib/wsdl/xmlSchema/include.rb +48 -0
  119. data/lib/wsdl/xmlSchema/length.rb +37 -0
  120. data/lib/wsdl/xmlSchema/list.rb +48 -0
  121. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  122. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  124. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  125. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  127. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  128. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  129. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  130. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  131. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  132. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  133. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  134. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  135. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  136. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  137. data/lib/wsdl/xmlSchema/union.rb +35 -0
  138. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  139. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  140. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  141. data/lib/xsd/charset.rb +189 -0
  142. data/lib/xsd/codegen.rb +12 -0
  143. data/lib/xsd/codegen/classdef.rb +208 -0
  144. data/lib/xsd/codegen/commentdef.rb +34 -0
  145. data/lib/xsd/codegen/gensupport.rb +273 -0
  146. data/lib/xsd/codegen/methoddef.rb +70 -0
  147. data/lib/xsd/codegen/moduledef.rb +208 -0
  148. data/lib/xsd/datatypes.rb +1466 -0
  149. data/lib/xsd/datatypes1999.rb +20 -0
  150. data/lib/xsd/iconvcharset.rb +33 -0
  151. data/lib/xsd/mapping.rb +68 -0
  152. data/lib/xsd/namedelements.rb +132 -0
  153. data/lib/xsd/ns.rb +182 -0
  154. data/lib/xsd/qname.rb +79 -0
  155. data/lib/xsd/xmlparser.rb +76 -0
  156. data/lib/xsd/xmlparser/libxmlparser.rb +115 -0
  157. data/lib/xsd/xmlparser/parser.rb +100 -0
  158. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  159. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  160. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  161. data/test/16runner.rb +68 -0
  162. data/test/interopR2/README.txt +2 -0
  163. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  164. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  165. data/test/interopR2/base.rb +288 -0
  166. data/test/interopR2/client.NetRemoting.rb +17 -0
  167. data/test/interopR2/client.rb +1234 -0
  168. data/test/interopR2/client4S4C.rb +15 -0
  169. data/test/interopR2/client4S4C2.rb +14 -0
  170. data/test/interopR2/clientASP.NET.rb +17 -0
  171. data/test/interopR2/clientApacheAxis.rb +16 -0
  172. data/test/interopR2/clientApacheSOAP.rb +17 -0
  173. data/test/interopR2/clientBEAWebLogic.rb +17 -0
  174. data/test/interopR2/clientBase.rb +1967 -0
  175. data/test/interopR2/clientCapeConnect.rb +18 -0
  176. data/test/interopR2/clientDelphi.rb +19 -0
  177. data/test/interopR2/clientEasySoap.rb +14 -0
  178. data/test/interopR2/clientFrontier.rb +25 -0
  179. data/test/interopR2/clientGLUE.rb +32 -0
  180. data/test/interopR2/clientHP.rb +13 -0
  181. data/test/interopR2/clientJAX-RPC.rb +19 -0
  182. data/test/interopR2/clientJSOAP.rb +14 -0
  183. data/test/interopR2/clientKafkaXSLT.rb +15 -0
  184. data/test/interopR2/clientMSSOAPToolkit2.0.rb +17 -0
  185. data/test/interopR2/clientMSSOAPToolkit3.0.rb +17 -0
  186. data/test/interopR2/clientNuSOAP.rb +19 -0
  187. data/test/interopR2/clientNuWave.rb +15 -0
  188. data/test/interopR2/clientOpenLink.rb +15 -0
  189. data/test/interopR2/clientOracle.rb +15 -0
  190. data/test/interopR2/clientPEAR.rb +18 -0
  191. data/test/interopR2/clientPhalanx.rb +18 -0
  192. data/test/interopR2/clientSIMACE.rb +18 -0
  193. data/test/interopR2/clientSOAP4R.rb +18 -0
  194. data/test/interopR2/clientSOAP__Lite.rb +14 -0
  195. data/test/interopR2/clientSQLData.rb +18 -0
  196. data/test/interopR2/clientSilverStream.rb +17 -0
  197. data/test/interopR2/clientSpray2001.rb +17 -0
  198. data/test/interopR2/clientSun.rb +19 -0
  199. data/test/interopR2/clientVWOpentalkSoap.rb +19 -0
  200. data/test/interopR2/clientWASP.rb +19 -0
  201. data/test/interopR2/clientWASPC.rb +18 -0
  202. data/test/interopR2/clientWebMethods.rb +15 -0
  203. data/test/interopR2/clientWhiteMesa.rb +28 -0
  204. data/test/interopR2/clientWingfoot.rb +15 -0
  205. data/test/interopR2/clientXMLBus.rb +19 -0
  206. data/test/interopR2/clientXMLRPC-EPI.rb +17 -0
  207. data/test/interopR2/clientXSOAP.rb +14 -0
  208. data/test/interopR2/clientZSI.rb +19 -0
  209. data/test/interopR2/clienteSOAP.rb +18 -0
  210. data/test/interopR2/clientgSOAP.rb +18 -0
  211. data/test/interopR2/clientkSOAP.rb +17 -0
  212. data/test/interopR2/iSimonReg.rb +112 -0
  213. data/test/interopR2/interopResultBase.rb +114 -0
  214. data/test/interopR2/interopService.rb +247 -0
  215. data/test/interopR2/rwikiInteropService.rb +105 -0
  216. data/test/interopR2/server.cgi +270 -0
  217. data/test/interopR2/server.rb +275 -0
  218. data/test/interopR2/simonReg.rb +123 -0
  219. data/test/interopR2/test.sh +49 -0
  220. data/test/interopR4/client.rb +112 -0
  221. data/test/runner.rb +7 -0
  222. data/test/sm11/classDef.rb +156 -0
  223. data/test/sm11/client.rb +542 -0
  224. data/test/sm11/driver.rb +183 -0
  225. data/test/sm11/servant.rb +1067 -0
  226. data/test/sm11/server.rb +25 -0
  227. data/test/soap/asp.net/hello.wsdl +96 -0
  228. data/test/soap/asp.net/test_aspdotnet.rb +123 -0
  229. data/test/soap/auth/htdigest +2 -0
  230. data/test/soap/auth/htpasswd +2 -0
  231. data/test/soap/auth/test_basic.rb +117 -0
  232. data/test/soap/auth/test_digest.rb +118 -0
  233. data/test/soap/calc/calc.rb +17 -0
  234. data/test/soap/calc/calc2.rb +29 -0
  235. data/test/soap/calc/server.cgi +13 -0
  236. data/test/soap/calc/server.rb +17 -0
  237. data/test/soap/calc/server2.rb +20 -0
  238. data/test/soap/calc/test_calc.rb +51 -0
  239. data/test/soap/calc/test_calc2.rb +55 -0
  240. data/test/soap/calc/test_calc_cgi.rb +71 -0
  241. data/test/soap/case/test_mapping.rb +57 -0
  242. data/test/soap/fault/test_customfault.rb +60 -0
  243. data/test/soap/fault/test_fault.rb +46 -0
  244. data/test/soap/fault/test_soaparray.rb +35 -0
  245. data/test/soap/filter/test_filter.rb +146 -0
  246. data/test/soap/header/server.cgi +119 -0
  247. data/test/soap/header/test_authheader.rb +240 -0
  248. data/test/soap/header/test_authheader_cgi.rb +121 -0
  249. data/test/soap/header/test_simplehandler.rb +116 -0
  250. data/test/soap/helloworld/hw_s.rb +16 -0
  251. data/test/soap/helloworld/test_helloworld.rb +43 -0
  252. data/test/soap/htpasswd +2 -0
  253. data/test/soap/literalArrayMapping/amazonEc.rb +4778 -0
  254. data/test/soap/literalArrayMapping/amazonEcDriver.rb +172 -0
  255. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  256. data/test/soap/literalArrayMapping/test_definedarray.rb +34 -0
  257. data/test/soap/marshal/marshaltestlib.rb +494 -0
  258. data/test/soap/marshal/test_digraph.rb +56 -0
  259. data/test/soap/marshal/test_marshal.rb +26 -0
  260. data/test/soap/marshal/test_struct.rb +47 -0
  261. data/test/soap/ssl/README +1 -0
  262. data/test/soap/ssl/ca.cert +23 -0
  263. data/test/soap/ssl/client.cert +19 -0
  264. data/test/soap/ssl/client.key +15 -0
  265. data/test/soap/ssl/server.cert +19 -0
  266. data/test/soap/ssl/server.key +15 -0
  267. data/test/soap/ssl/sslsvr.rb +57 -0
  268. data/test/soap/ssl/subca.cert +21 -0
  269. data/test/soap/ssl/test_ssl.rb +235 -0
  270. data/test/soap/struct/test_struct.rb +70 -0
  271. data/test/soap/styleuse/client.rb +20 -0
  272. data/test/soap/styleuse/server.rb +86 -0
  273. data/test/soap/swa/test_file.rb +75 -0
  274. data/test/soap/test_basetype.rb +1090 -0
  275. data/test/soap/test_cookie.rb +112 -0
  276. data/test/soap/test_custom_ns.rb +105 -0
  277. data/test/soap/test_custommap.rb +110 -0
  278. data/test/soap/test_empty.rb +105 -0
  279. data/test/soap/test_envelopenamespace.rb +85 -0
  280. data/test/soap/test_extraattr.rb +54 -0
  281. data/test/soap/test_generator.rb +27 -0
  282. data/test/soap/test_httpconfigloader.rb +71 -0
  283. data/test/soap/test_mapping.rb +131 -0
  284. data/test/soap/test_nestedexception.rb +56 -0
  285. data/test/soap/test_nil.rb +57 -0
  286. data/test/soap/test_no_indent.rb +88 -0
  287. data/test/soap/test_property.rb +427 -0
  288. data/test/soap/test_response_as_xml.rb +117 -0
  289. data/test/soap/test_soapelement.rb +138 -0
  290. data/test/soap/test_streamhandler.rb +270 -0
  291. data/test/soap/test_styleuse.rb +326 -0
  292. data/test/soap/wsdlDriver/README.txt +2 -0
  293. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  294. data/test/soap/wsdlDriver/document.wsdl +54 -0
  295. data/test/soap/wsdlDriver/echo_version.rb +29 -0
  296. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  297. data/test/soap/wsdlDriver/test_calc.rb +71 -0
  298. data/test/soap/wsdlDriver/test_document.rb +71 -0
  299. data/test/soap/wsdlDriver/test_simpletype.rb +80 -0
  300. data/test/testutil.rb +54 -0
  301. data/test/wsdl/abstract/abstract.wsdl +176 -0
  302. data/test/wsdl/abstract/test_abstract.rb +159 -0
  303. data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
  304. data/test/wsdl/anonymous/expectedDriver.rb +59 -0
  305. data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
  306. data/test/wsdl/anonymous/lp.wsdl +147 -0
  307. data/test/wsdl/anonymous/test_anonymous.rb +130 -0
  308. data/test/wsdl/any/any.wsdl +114 -0
  309. data/test/wsdl/any/expectedDriver.rb +68 -0
  310. data/test/wsdl/any/expectedEcho.rb +57 -0
  311. data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
  312. data/test/wsdl/any/expectedService.rb +69 -0
  313. data/test/wsdl/any/test_any.rb +193 -0
  314. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  315. data/test/wsdl/axisArray/test_axisarray.rb +124 -0
  316. data/test/wsdl/choice/choice.wsdl +167 -0
  317. data/test/wsdl/choice/test_choice.rb +310 -0
  318. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  319. data/test/wsdl/complexcontent/test_echo.rb +90 -0
  320. data/test/wsdl/datetime/DatetimeService.rb +44 -0
  321. data/test/wsdl/datetime/datetime.rb +0 -0
  322. data/test/wsdl/datetime/datetime.wsdl +45 -0
  323. data/test/wsdl/datetime/datetimeServant.rb +22 -0
  324. data/test/wsdl/datetime/test_datetime.rb +86 -0
  325. data/test/wsdl/document/array/double.wsdl +161 -0
  326. data/test/wsdl/document/array/test_array.rb +201 -0
  327. data/test/wsdl/document/document.wsdl +76 -0
  328. data/test/wsdl/document/number.wsdl +54 -0
  329. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  330. data/test/wsdl/document/test_nosoapaction.rb +102 -0
  331. data/test/wsdl/document/test_number.rb +92 -0
  332. data/test/wsdl/document/test_rpc.rb +355 -0
  333. data/test/wsdl/emptycomplextype.wsdl +31 -0
  334. data/test/wsdl/fault/fault.wsdl +79 -0
  335. data/test/wsdl/fault/multifault.wsdl +96 -0
  336. data/test/wsdl/fault/test_fault.rb +119 -0
  337. data/test/wsdl/fault/test_multifault.rb +134 -0
  338. data/test/wsdl/group/expectedClassdef.rb +58 -0
  339. data/test/wsdl/group/expectedDriver.rb +51 -0
  340. data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
  341. data/test/wsdl/group/group.wsdl +88 -0
  342. data/test/wsdl/group/test_rpc.rb +145 -0
  343. data/test/wsdl/list/list.wsdl +93 -0
  344. data/test/wsdl/list/test_list.rb +124 -0
  345. data/test/wsdl/map/map.wsdl +92 -0
  346. data/test/wsdl/map/map.xml +43 -0
  347. data/test/wsdl/map/test_map.rb +99 -0
  348. data/test/wsdl/marshal/person.wsdl +21 -0
  349. data/test/wsdl/marshal/person_org.rb +23 -0
  350. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  351. data/test/wsdl/multiplefault.wsdl +75 -0
  352. data/test/wsdl/oneway/oneway.wsdl +36 -0
  353. data/test/wsdl/oneway/test_oneway.rb +108 -0
  354. data/test/wsdl/overload/expectedClient.rb +37 -0
  355. data/test/wsdl/overload/expectedDriver.rb +61 -0
  356. data/test/wsdl/overload/expectedServant.rb +35 -0
  357. data/test/wsdl/overload/overload.wsdl +70 -0
  358. data/test/wsdl/overload/test_overload.rb +131 -0
  359. data/test/wsdl/qualified/lp.wsdl +47 -0
  360. data/test/wsdl/qualified/lp.xsd +26 -0
  361. data/test/wsdl/qualified/np.wsdl +51 -0
  362. data/test/wsdl/qualified/test_qualified.rb +137 -0
  363. data/test/wsdl/qualified/test_unqualified.rb +138 -0
  364. data/test/wsdl/raa/RAAService.rb +125 -0
  365. data/test/wsdl/raa/README.txt +8 -0
  366. data/test/wsdl/raa/expectedClassDef.rb +100 -0
  367. data/test/wsdl/raa/expectedDriver.rb +96 -0
  368. data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
  369. data/test/wsdl/raa/raa.wsdl +264 -0
  370. data/test/wsdl/raa/test_raa.rb +126 -0
  371. data/test/wsdl/ref/expectedDriver.rb +51 -0
  372. data/test/wsdl/ref/expectedProduct.rb +243 -0
  373. data/test/wsdl/ref/product.wsdl +147 -0
  374. data/test/wsdl/ref/test_ref.rb +268 -0
  375. data/test/wsdl/rpc/rpc.wsdl +109 -0
  376. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  377. data/test/wsdl/rpc/test_rpc.rb +176 -0
  378. data/test/wsdl/rpc/test_rpc_lit.rb +470 -0
  379. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  380. data/test/wsdl/simplecontent/test_simplecontent.rb +102 -0
  381. data/test/wsdl/simpletype/rpc/expectedClient.rb +34 -0
  382. data/test/wsdl/simpletype/rpc/expectedDriver.rb +58 -0
  383. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +36 -0
  384. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +57 -0
  385. data/test/wsdl/simpletype/rpc/expectedServant.rb +32 -0
  386. data/test/wsdl/simpletype/rpc/expectedService.rb +55 -0
  387. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  388. data/test/wsdl/simpletype/rpc/test_rpc.rb +52 -0
  389. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  390. data/test/wsdl/simpletype/test_simpletype.rb +92 -0
  391. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  392. data/test/wsdl/soap/test_soapbodyparts.rb +79 -0
  393. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +21 -0
  394. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +34 -0
  395. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +58 -0
  396. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +36 -0
  397. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +32 -0
  398. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +48 -0
  399. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +55 -0
  400. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  401. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +37 -0
  402. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  403. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +53 -0
  404. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  405. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +83 -0
  406. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +102 -0
  407. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  408. data/test/wsdl/soaptype/test_soaptype.rb +178 -0
  409. data/test/wsdl/test_emptycomplextype.rb +21 -0
  410. data/test/wsdl/test_fault.rb +50 -0
  411. data/test/wsdl/test_multiplefault.rb +41 -0
  412. data/test/xsd/codegen/test_classdef.rb +244 -0
  413. data/test/xsd/noencoding.xml +4 -0
  414. data/test/xsd/test_noencoding.rb +32 -0
  415. data/test/xsd/test_ns.rb +41 -0
  416. data/test/xsd/test_xmlschemaparser.rb +22 -0
  417. data/test/xsd/test_xsd.rb +1638 -0
  418. data/test/xsd/xmllang.xml +43 -0
  419. data/test/xsd/xmlschema.xml +12 -0
  420. data/test/xsd/xsd2ruby/expected_mysample.rb +65 -0
  421. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +11 -0
  422. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +51 -0
  423. data/test/xsd/xsd2ruby/section.xsd +49 -0
  424. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +90 -0
  425. metadata +487 -0
@@ -0,0 +1,295 @@
1
+ # SOAP4R - Mapping registry.
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 '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
+ qname = Mapping.to_qname(qname)
55
+ @__xmlele.each do |k, v|
56
+ return v if k == qname
57
+ end
58
+ # fallback
59
+ @__xmlele.each do |k, v|
60
+ return v if k.name == qname.name
61
+ end
62
+ nil
63
+ end
64
+
65
+ def []=(qname, value)
66
+ qname = Mapping.to_qname(qname)
67
+ found = false
68
+ @__xmlele.each do |pair|
69
+ if pair[0] == qname
70
+ found = true
71
+ pair[1] = value
72
+ end
73
+ end
74
+ unless found
75
+ __define_attr_accessor(qname)
76
+ @__xmlele << [qname, value]
77
+ end
78
+ @__xmlele_type[qname] = :single
79
+ end
80
+
81
+ def __add_xmlele_value(qname, value)
82
+ found = false
83
+ @__xmlele.map! do |k, v|
84
+ if k == qname
85
+ found = true
86
+ [k, __set_xmlele_value(k, v, value)]
87
+ else
88
+ [k, v]
89
+ end
90
+ end
91
+ unless found
92
+ __define_attr_accessor(qname)
93
+ @__xmlele << [qname, value]
94
+ @__xmlele_type[qname] = :single
95
+ end
96
+ value
97
+ end
98
+
99
+ def marshal_load(dumpobj)
100
+ __import(dumpobj)
101
+ end
102
+
103
+ private
104
+
105
+ # Mapping.define_attr_accessor calls define_method with proc and it exhausts
106
+ # much memory for each singleton Object. just instance_eval instead of it.
107
+ def __define_attr_accessor(qname)
108
+ # untaint depends GenSupport.safemethodname
109
+ name = Mapping.safemethodname(qname.name).untaint
110
+ # untaint depends on QName#dump
111
+ qnamedump = qname.dump.untaint
112
+ singleton = false
113
+ unless self.respond_to?(name)
114
+ singleton = true
115
+ instance_eval <<-EOS
116
+ def #{name}
117
+ self[#{qnamedump}]
118
+ end
119
+ EOS
120
+ end
121
+ unless self.respond_to?(name + "=")
122
+ singleton = true
123
+ instance_eval <<-EOS
124
+ def #{name}=(value)
125
+ self[#{qnamedump}] = value
126
+ end
127
+ EOS
128
+ end
129
+ if singleton && !self.respond_to?(:marshal_dump)
130
+ instance_eval <<-EOS
131
+ def marshal_dump
132
+ __export
133
+ end
134
+ EOS
135
+ end
136
+ end
137
+
138
+ def __set_xmlele_value(key, org, value)
139
+ case @__xmlele_type[key]
140
+ when :multi
141
+ org << value
142
+ org
143
+ when :single
144
+ @__xmlele_type[key] = :multi
145
+ [org, value]
146
+ else
147
+ raise RuntimeError.new("unknown type")
148
+ end
149
+ end
150
+
151
+ def __export
152
+ dumpobj = ::SOAP::Mapping::Object.new
153
+ dumpobj.__xmlele.replace(@__xmlele)
154
+ dumpobj.__xmlattr.replace(@__xmlattr)
155
+ dumpobj
156
+ end
157
+
158
+ def __import(dumpobj)
159
+ @__xmlele_type = {}
160
+ @__xmlele = []
161
+ @__xmlattr = {}
162
+ dumpobj.__xmlele.each do |qname, value|
163
+ __add_xmlele_value(qname, value)
164
+ end
165
+ @__xmlattr.replace(dumpobj.__xmlattr)
166
+ end
167
+ end
168
+
169
+
170
+ class MappingError < Error; end
171
+
172
+
173
+ module RegistrySupport
174
+ def initialize
175
+ super()
176
+ @class_schema_definition = {}
177
+ @class_elename_schema_definition = {}
178
+ @elename_schema_definition = {}
179
+ @type_schema_definition = {}
180
+ end
181
+
182
+ def register(definition)
183
+ obj_class = definition[:class]
184
+ definition = Mapping.create_schema_definition(obj_class, definition)
185
+ # give complexType definition a priority explicitly
186
+ if !@class_schema_definition[obj_class] or definition.type
187
+ @class_schema_definition[obj_class] = definition
188
+ end
189
+ if definition.elename and !definition.is_anonymous?
190
+ @class_elename_schema_definition[obj_class] = definition
191
+ @elename_schema_definition[definition.elename] = definition
192
+ end
193
+ if definition.type
194
+ @type_schema_definition[definition.type] = definition
195
+ end
196
+ end
197
+
198
+ def schema_definition_from_class(klass)
199
+ @class_schema_definition[klass] || Mapping.schema_definition_classdef(klass)
200
+ end
201
+
202
+ def elename_schema_definition_from_class(klass)
203
+ @class_elename_schema_definition[klass]
204
+ end
205
+
206
+ def schema_definition_from_elename(qname)
207
+ @elename_schema_definition[qname]
208
+ end
209
+
210
+ def schema_definition_from_type(type)
211
+ @type_schema_definition[type]
212
+ end
213
+
214
+ def find_node_definition(node)
215
+ schema_definition_from_type(node.type) ||
216
+ schema_definition_from_elename(node.elename) ||
217
+ find_schema_definition(node.elename.name) ||
218
+ find_schema_definition(node.type.name)
219
+ end
220
+
221
+ def find_schema_definition(name)
222
+ return nil unless name
223
+ typestr = Mapping.safeconstname(name)
224
+ obj_class = Mapping.class_from_name(typestr)
225
+ if obj_class
226
+ schema_definition_from_class(obj_class)
227
+ end
228
+ end
229
+
230
+ def add_attributes2soap(obj, ele)
231
+ if definition = Mapping.schema_definition_classdef(obj.class)
232
+ add_definedattributes2soap(obj, ele, definition)
233
+ elsif obj.respond_to?(:__xmlattr)
234
+ obj.__xmlattr.each do |key, value|
235
+ ele.extraattr[key] = value
236
+ end
237
+ end
238
+ end
239
+
240
+ def add_definedattributes2soap(obj, ele, typedef)
241
+ if typedef.attributes
242
+ typedef.attributes.each do |qname, param|
243
+ value = get_xmlattr_value(obj, qname)
244
+ ele.extraattr[qname] = value unless value.nil?
245
+ end
246
+ end
247
+ end
248
+
249
+ def get_xmlattr_value(obj, qname)
250
+ attrname = 'xmlattr_' + qname.name
251
+ value = Mapping.get_attribute(obj, attrname)
252
+ if value.nil?
253
+ attrname = Mapping.safemethodname('xmlattr_' + qname.name)
254
+ value = Mapping.get_attribute(obj, attrname)
255
+ end
256
+ value
257
+ end
258
+
259
+ def base2soap(obj, type, qualified = nil)
260
+ return SOAPNil.new if obj.nil?
261
+ soap_obj = nil
262
+ if type <= XSD::XSDString
263
+ str = XSD::Charset.encoding_conv(obj.to_s, Mapping.external_ces,
264
+ XSD::Charset.encoding)
265
+ soap_obj = type.new(str)
266
+ else
267
+ soap_obj = type.new(obj)
268
+ end
269
+ soap_obj.qualified = qualified
270
+ soap_obj
271
+ end
272
+
273
+ def base2obj(value, klass)
274
+ v = if value.respond_to?(:data)
275
+ value.data
276
+ elsif value.respond_to?(:text)
277
+ value.text
278
+ else
279
+ nil
280
+ end
281
+ if value.is_a?(klass)
282
+ v
283
+ else
284
+ klass.to_data(v)
285
+ end
286
+ end
287
+
288
+ def is_stubobj_elements_for_array(vars)
289
+ vars.keys.size == 1 and vars.values[0].is_a?(::Array)
290
+ end
291
+ end
292
+
293
+
294
+ end
295
+ end
@@ -0,0 +1,445 @@
1
+ # SOAP4R - Ruby type mapping factory.
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
+ 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
+ options = obj.options
128
+ param.add('options', SOAPInt.new(options))
129
+ addiv2soapattr(param, obj, map)
130
+ when ::Range
131
+ unless @allow_original_mapping
132
+ return nil
133
+ end
134
+ param = SOAPStruct.new(TYPE_RANGE)
135
+ mark_marshalled_obj(obj, param)
136
+ if obj.class != Range
137
+ param.extraattr[RubyTypeName] = obj.class.name
138
+ end
139
+ param.add('begin', Mapping._obj2soap(obj.begin, map))
140
+ param.add('end', Mapping._obj2soap(obj.end, map))
141
+ param.add('exclude_end', SOAP::SOAPBoolean.new(obj.exclude_end?))
142
+ addiv2soapattr(param, obj, map)
143
+ when ::Class
144
+ unless @allow_original_mapping
145
+ return nil
146
+ end
147
+ if obj.to_s[0] == ?#
148
+ raise TypeError.new("can't dump anonymous class #{obj}")
149
+ end
150
+ param = SOAPStruct.new(TYPE_CLASS)
151
+ mark_marshalled_obj(obj, param)
152
+ param.add('name', SOAPString.new(obj.name))
153
+ addiv2soapattr(param, obj, map)
154
+ when ::Module
155
+ unless @allow_original_mapping
156
+ return nil
157
+ end
158
+ if obj.to_s[0] == ?#
159
+ raise TypeError.new("can't dump anonymous module #{obj}")
160
+ end
161
+ param = SOAPStruct.new(TYPE_MODULE)
162
+ mark_marshalled_obj(obj, param)
163
+ param.add('name', SOAPString.new(obj.name))
164
+ addiv2soapattr(param, obj, map)
165
+ when ::Symbol
166
+ unless @allow_original_mapping
167
+ return nil
168
+ end
169
+ param = SOAPStruct.new(TYPE_SYMBOL)
170
+ mark_marshalled_obj(obj, param)
171
+ param.add('id', SOAPString.new(obj.id2name))
172
+ addiv2soapattr(param, obj, map)
173
+ when ::Struct
174
+ unless @allow_original_mapping
175
+ # treat it as an user defined class. [ruby-talk:104980]
176
+ #param = unknownobj2soap(soap_class, obj, info, map)
177
+ param = SOAPStruct.new(XSD::AnyTypeName)
178
+ mark_marshalled_obj(obj, param)
179
+ obj.members.each do |member|
180
+ param.add(Mapping.name2elename(member),
181
+ Mapping._obj2soap(obj[member], map))
182
+ end
183
+ else
184
+ param = SOAPStruct.new(TYPE_STRUCT)
185
+ mark_marshalled_obj(obj, param)
186
+ param.add('type', ele_type = SOAPString.new(obj.class.to_s))
187
+ ele_member = SOAPStruct.new
188
+ obj.members.each do |member|
189
+ ele_member.add(Mapping.name2elename(member),
190
+ Mapping._obj2soap(obj[member], map))
191
+ end
192
+ param.add('member', ele_member)
193
+ addiv2soapattr(param, obj, map)
194
+ end
195
+ when ::IO, ::Binding, ::Continuation, ::Data, ::Dir, ::File::Stat,
196
+ ::MatchData, Method, ::Proc, ::Process::Status, ::Thread,
197
+ ::ThreadGroup, ::UnboundMethod
198
+ return nil
199
+ when ::SOAP::Mapping::Object
200
+ param = SOAPStruct.new(XSD::AnyTypeName)
201
+ mark_marshalled_obj(obj, param)
202
+ obj.__xmlele.each do |key, value|
203
+ param.add(key.name, Mapping._obj2soap(value, map))
204
+ end
205
+ obj.__xmlattr.each do |key, value|
206
+ param.extraattr[key] = value
207
+ end
208
+ when ::Exception
209
+ typestr = Mapping.name2elename(obj.class.to_s)
210
+ param = SOAPStruct.new(XSD::QName.new(RubyTypeNamespace, typestr))
211
+ mark_marshalled_obj(obj, param)
212
+ param.add('message', Mapping._obj2soap(obj.message, map))
213
+ param.add('backtrace', Mapping._obj2soap(obj.backtrace, map))
214
+ addiv2soapattr(param, obj, map)
215
+ else
216
+ param = unknownobj2soap(soap_class, obj, info, map)
217
+ end
218
+ param
219
+ end
220
+
221
+ def soap2obj(obj_class, node, info, map)
222
+ rubytype = node.extraattr[RubyTypeName]
223
+ if rubytype or node.type.namespace == RubyTypeNamespace
224
+ rubytype2obj(node, info, map, rubytype)
225
+ elsif node.type == XSD::AnyTypeName or node.type == XSD::AnySimpleTypeName
226
+ anytype2obj(node, info, map)
227
+ else
228
+ unknowntype2obj(node, info, map)
229
+ end
230
+ end
231
+
232
+ private
233
+
234
+ def addiv2soapattr(node, obj, map)
235
+ return if obj.instance_variables.empty?
236
+ ivars = SOAPStruct.new # Undefined type.
237
+ setiv2soap(ivars, obj, map)
238
+ node.extraattr[RubyIVarName] = ivars
239
+ end
240
+
241
+ def unknownobj2soap(soap_class, obj, info, map)
242
+ if anonymous_class?(obj)
243
+ raise TypeError.new("can't dump anonymous class #{obj}")
244
+ end
245
+ singleton_class = class << obj; self; end
246
+ if !obj.singleton_methods(true).empty? or
247
+ !singleton_class.instance_variables.empty?
248
+ raise TypeError.new("singleton can't be dumped #{obj}")
249
+ end
250
+ if !(singleton_class.ancestors - obj.class.ancestors).empty?
251
+ typestr = Mapping.name2elename(obj.class.to_s)
252
+ type = XSD::QName.new(RubyTypeNamespace, typestr)
253
+ else
254
+ type = Mapping.class2element(obj.class)
255
+ end
256
+ param = SOAPStruct.new(type)
257
+ mark_marshalled_obj(obj, param)
258
+ setiv2soap(param, obj, map)
259
+ param
260
+ end
261
+
262
+ def rubytype2obj(node, info, map, rubytype)
263
+ klass = rubytype ? Mapping.class_from_name(rubytype) : nil
264
+ obj = nil
265
+ case node
266
+ when SOAPString
267
+ return @string_factory.soap2obj(klass || String, node, info, map)
268
+ when SOAPDateTime
269
+ #return @datetime_factory.soap2obj(klass || Time, node, info, map)
270
+ klass ||= Time
271
+ t = node.to_time
272
+ arg = [t.year, t.month, t.mday, t.hour, t.min, t.sec, t.usec]
273
+ obj = t.gmt? ? klass.gm(*arg) : klass.local(*arg)
274
+ mark_unmarshalled_obj(node, obj)
275
+ return true, obj
276
+ when SOAPArray
277
+ return @array_factory.soap2obj(klass || Array, node, info, map)
278
+ when SOAPNil, SOAPBoolean, SOAPInt, SOAPInteger, SOAPDecimal, SOAPDouble
279
+ return @basetype_factory.soap2obj(nil, node, info, map)
280
+ when SOAPStruct
281
+ return rubytypestruct2obj(node, info, map, rubytype)
282
+ else
283
+ raise
284
+ end
285
+ end
286
+
287
+ def rubytypestruct2obj(node, info, map, rubytype)
288
+ klass = rubytype ? Mapping.class_from_name(rubytype) : nil
289
+ obj = nil
290
+ case node.type
291
+ when TYPE_HASH
292
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Hash
293
+ obj = Mapping.create_empty_object(klass)
294
+ mark_unmarshalled_obj(node, obj)
295
+ node.each do |key, value|
296
+ next unless key == 'item'
297
+ obj[Mapping._soap2obj(value['key'], map)] =
298
+ Mapping._soap2obj(value['value'], map)
299
+ end
300
+ if node.key?('default')
301
+ obj.default = Mapping._soap2obj(node['default'], map)
302
+ end
303
+ when TYPE_REGEXP
304
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Regexp
305
+ obj = Mapping.create_empty_object(klass)
306
+ mark_unmarshalled_obj(node, obj)
307
+ source = node['source'].string
308
+ options = node['options'].data || 0
309
+ Regexp.instance_method(:initialize).bind(obj).call(source, options)
310
+ when TYPE_RANGE
311
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Range
312
+ obj = Mapping.create_empty_object(klass)
313
+ mark_unmarshalled_obj(node, obj)
314
+ first = Mapping._soap2obj(node['begin'], map)
315
+ last = Mapping._soap2obj(node['end'], map)
316
+ exclude_end = node['exclude_end'].data
317
+ Range.instance_method(:initialize).bind(obj).call(first, last, exclude_end)
318
+ when TYPE_CLASS
319
+ obj = Mapping.class_from_name(node['name'].data)
320
+ when TYPE_MODULE
321
+ obj = Mapping.class_from_name(node['name'].data)
322
+ when TYPE_SYMBOL
323
+ obj = node['id'].data.intern
324
+ when TYPE_STRUCT
325
+ typestr = Mapping.elename2name(node['type'].data)
326
+ klass = Mapping.class_from_name(typestr)
327
+ if klass.nil?
328
+ return false
329
+ end
330
+ unless klass <= ::Struct
331
+ return false
332
+ end
333
+ obj = Mapping.create_empty_object(klass)
334
+ mark_unmarshalled_obj(node, obj)
335
+ node['member'].each do |name, value|
336
+ obj[Mapping.elename2name(name)] = Mapping._soap2obj(value, map)
337
+ end
338
+ else
339
+ return unknowntype2obj(node, info, map)
340
+ end
341
+ return true, obj
342
+ end
343
+
344
+ def anytype2obj(node, info, map)
345
+ case node
346
+ when SOAPBasetype
347
+ return true, node.data
348
+ when SOAPStruct
349
+ klass = ::SOAP::Mapping::Object
350
+ obj = klass.new
351
+ mark_unmarshalled_obj(node, obj)
352
+ node.each do |name, value|
353
+ obj.__add_xmlele_value(XSD::QName.new(nil, name),
354
+ Mapping._soap2obj(value, map))
355
+ end
356
+ unless node.extraattr.empty?
357
+ obj.instance_variable_set('@__xmlattr', node.extraattr)
358
+ end
359
+ return true, obj
360
+ else
361
+ return false
362
+ end
363
+ end
364
+
365
+ def unknowntype2obj(node, info, map)
366
+ case node
367
+ when SOAPBasetype
368
+ return true, node.data
369
+ when SOAPArray
370
+ return @array_factory.soap2obj(Array, node, info, map)
371
+ when SOAPStruct
372
+ obj = unknownstruct2obj(node, info, map)
373
+ return true, obj if obj
374
+ if !@allow_untyped_struct
375
+ return false
376
+ end
377
+ return anytype2obj(node, info, map)
378
+ else
379
+ # Basetype which is not defined...
380
+ return false
381
+ end
382
+ end
383
+
384
+ def unknownstruct2obj(node, info, map)
385
+ unless node.type.name
386
+ return nil
387
+ end
388
+ typestr = Mapping.elename2name(node.type.name)
389
+ klass = Mapping.class_from_name(typestr)
390
+ if klass.respond_to?(:soap_marshallable) and !klass.soap_marshallable
391
+ return nil
392
+ end
393
+ if klass.nil? and @allow_untyped_struct
394
+ klass = Mapping.class_from_name(typestr, true) # lenient
395
+ end
396
+ if klass.nil?
397
+ return nil
398
+ end
399
+ if klass <= ::Exception
400
+ return exception2obj(klass, node, map)
401
+ end
402
+ klass_type = Mapping.class2qname(klass)
403
+ return nil unless node.type.match(klass_type)
404
+ obj = nil
405
+ begin
406
+ obj = Mapping.create_empty_object(klass)
407
+ rescue
408
+ # type name "data" tries Data.new which raises TypeError
409
+ nil
410
+ end
411
+ mark_unmarshalled_obj(node, obj)
412
+ setiv2obj(obj, node, map)
413
+ obj
414
+ end
415
+
416
+ def exception2obj(klass, node, map)
417
+ message = Mapping._soap2obj(node['message'], map)
418
+ backtrace = Mapping._soap2obj(node['backtrace'], map)
419
+ obj = Mapping.create_empty_object(klass)
420
+ obj = obj.exception(message)
421
+ mark_unmarshalled_obj(node, obj)
422
+ obj.set_backtrace(backtrace)
423
+ obj
424
+ end
425
+
426
+ # Only creates empty array. Do String#replace it with real string.
427
+ def array2obj(node, map, rubytype)
428
+ klass = rubytype ? Mapping.class_from_name(rubytype) : Array
429
+ obj = Mapping.create_empty_object(klass)
430
+ mark_unmarshalled_obj(node, obj)
431
+ obj
432
+ end
433
+
434
+ # Only creates empty string. Do String#replace it with real string.
435
+ def string2obj(node, map, rubytype)
436
+ klass = rubytype ? Mapping.class_from_name(rubytype) : String
437
+ obj = Mapping.create_empty_object(klass)
438
+ mark_unmarshalled_obj(node, obj)
439
+ obj
440
+ end
441
+ end
442
+
443
+
444
+ end
445
+ end