DefV-soap4r 1.5.8.2

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 (443) 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 +577 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -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/element.rb.orig +374 -0
  45. data/lib/soap/rpc/httpserver.rb +142 -0
  46. data/lib/soap/rpc/methodDef.rb +68 -0
  47. data/lib/soap/rpc/proxy.rb +572 -0
  48. data/lib/soap/rpc/router.rb +662 -0
  49. data/lib/soap/rpc/rpc.rb +25 -0
  50. data/lib/soap/rpc/soaplet.rb +200 -0
  51. data/lib/soap/rpc/standaloneServer.rb +43 -0
  52. data/lib/soap/soap.rb +151 -0
  53. data/lib/soap/streamHandler.rb +301 -0
  54. data/lib/soap/wsdlDriver.rb +164 -0
  55. data/lib/wsdl/binding.rb +65 -0
  56. data/lib/wsdl/data.rb +64 -0
  57. data/lib/wsdl/definitions.rb +236 -0
  58. data/lib/wsdl/documentation.rb +32 -0
  59. data/lib/wsdl/import.rb +80 -0
  60. data/lib/wsdl/importer.rb +38 -0
  61. data/lib/wsdl/info.rb +50 -0
  62. data/lib/wsdl/message.rb +54 -0
  63. data/lib/wsdl/operation.rb +151 -0
  64. data/lib/wsdl/operationBinding.rb +240 -0
  65. data/lib/wsdl/param.rb +93 -0
  66. data/lib/wsdl/parser.rb +164 -0
  67. data/lib/wsdl/part.rb +52 -0
  68. data/lib/wsdl/port.rb +66 -0
  69. data/lib/wsdl/portType.rb +75 -0
  70. data/lib/wsdl/service.rb +61 -0
  71. data/lib/wsdl/soap/address.rb +40 -0
  72. data/lib/wsdl/soap/binding.rb +49 -0
  73. data/lib/wsdl/soap/body.rb +58 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  79. data/lib/wsdl/soap/complexType.rb +173 -0
  80. data/lib/wsdl/soap/data.rb +42 -0
  81. data/lib/wsdl/soap/definitions.rb +200 -0
  82. data/lib/wsdl/soap/driverCreator.rb +118 -0
  83. data/lib/wsdl/soap/element.rb +33 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  85. data/lib/wsdl/soap/fault.rb +56 -0
  86. data/lib/wsdl/soap/header.rb +86 -0
  87. data/lib/wsdl/soap/headerfault.rb +56 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  92. data/lib/wsdl/soap/operation.rb +112 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  97. data/lib/wsdl/types.rb +44 -0
  98. data/lib/wsdl/wsdl.rb +24 -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 +61 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  110. data/lib/wsdl/xmlSchema/content.rb +95 -0
  111. data/lib/wsdl/xmlSchema/data.rb +116 -0
  112. data/lib/wsdl/xmlSchema/element.rb +153 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  115. data/lib/wsdl/xmlSchema/group.rb +100 -0
  116. data/lib/wsdl/xmlSchema/import.rb +53 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  119. data/lib/wsdl/xmlSchema/include.rb +48 -0
  120. data/lib/wsdl/xmlSchema/length.rb +37 -0
  121. data/lib/wsdl/xmlSchema/list.rb +48 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  138. data/lib/wsdl/xmlSchema/union.rb +35 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  142. data/lib/xsd/charset.rb +188 -0
  143. data/lib/xsd/codegen.rb +12 -0
  144. data/lib/xsd/codegen/classdef.rb +208 -0
  145. data/lib/xsd/codegen/commentdef.rb +34 -0
  146. data/lib/xsd/codegen/gensupport.rb +273 -0
  147. data/lib/xsd/codegen/methoddef.rb +70 -0
  148. data/lib/xsd/codegen/moduledef.rb +208 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +20 -0
  151. data/lib/xsd/iconvcharset.rb +33 -0
  152. data/lib/xsd/mapping.rb +68 -0
  153. data/lib/xsd/namedelements.rb +132 -0
  154. data/lib/xsd/ns.rb +182 -0
  155. data/lib/xsd/qname.rb +79 -0
  156. data/lib/xsd/xmlparser.rb +76 -0
  157. data/lib/xsd/xmlparser.rb.orig +76 -0
  158. data/lib/xsd/xmlparser/libxmlparser.rb +119 -0
  159. data/lib/xsd/xmlparser/parser.rb +100 -0
  160. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  161. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  162. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  163. data/test/16runner.rb +68 -0
  164. data/test/interopR2/README.txt +2 -0
  165. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  166. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  167. data/test/interopR2/base.rb +288 -0
  168. data/test/interopR2/client.NetRemoting.rb +17 -0
  169. data/test/interopR2/client.rb +1234 -0
  170. data/test/interopR2/client4S4C.rb +15 -0
  171. data/test/interopR2/client4S4C2.rb +14 -0
  172. data/test/interopR2/clientASP.NET.rb +17 -0
  173. data/test/interopR2/clientApacheAxis.rb +16 -0
  174. data/test/interopR2/clientApacheSOAP.rb +17 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +17 -0
  176. data/test/interopR2/clientBase.rb +1967 -0
  177. data/test/interopR2/clientCapeConnect.rb +18 -0
  178. data/test/interopR2/clientDelphi.rb +19 -0
  179. data/test/interopR2/clientEasySoap.rb +14 -0
  180. data/test/interopR2/clientFrontier.rb +25 -0
  181. data/test/interopR2/clientGLUE.rb +32 -0
  182. data/test/interopR2/clientHP.rb +13 -0
  183. data/test/interopR2/clientJAX-RPC.rb +19 -0
  184. data/test/interopR2/clientJSOAP.rb +14 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +15 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +17 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +17 -0
  188. data/test/interopR2/clientNuSOAP.rb +19 -0
  189. data/test/interopR2/clientNuWave.rb +15 -0
  190. data/test/interopR2/clientOpenLink.rb +15 -0
  191. data/test/interopR2/clientOracle.rb +15 -0
  192. data/test/interopR2/clientPEAR.rb +18 -0
  193. data/test/interopR2/clientPhalanx.rb +18 -0
  194. data/test/interopR2/clientSIMACE.rb +18 -0
  195. data/test/interopR2/clientSOAP4R.rb +18 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +14 -0
  197. data/test/interopR2/clientSQLData.rb +18 -0
  198. data/test/interopR2/clientSilverStream.rb +17 -0
  199. data/test/interopR2/clientSpray2001.rb +17 -0
  200. data/test/interopR2/clientSun.rb +19 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +19 -0
  202. data/test/interopR2/clientWASP.rb +19 -0
  203. data/test/interopR2/clientWASPC.rb +18 -0
  204. data/test/interopR2/clientWebMethods.rb +15 -0
  205. data/test/interopR2/clientWhiteMesa.rb +28 -0
  206. data/test/interopR2/clientWingfoot.rb +15 -0
  207. data/test/interopR2/clientXMLBus.rb +19 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +17 -0
  209. data/test/interopR2/clientXSOAP.rb +14 -0
  210. data/test/interopR2/clientZSI.rb +19 -0
  211. data/test/interopR2/clienteSOAP.rb +18 -0
  212. data/test/interopR2/clientgSOAP.rb +18 -0
  213. data/test/interopR2/clientkSOAP.rb +17 -0
  214. data/test/interopR2/iSimonReg.rb +112 -0
  215. data/test/interopR2/interopResultBase.rb +114 -0
  216. data/test/interopR2/interopService.rb +247 -0
  217. data/test/interopR2/rwikiInteropService.rb +105 -0
  218. data/test/interopR2/server.cgi +270 -0
  219. data/test/interopR2/server.rb +275 -0
  220. data/test/interopR2/simonReg.rb +123 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +112 -0
  223. data/test/results +4810 -0
  224. data/test/runner.rb +7 -0
  225. data/test/sm11/classDef.rb +156 -0
  226. data/test/sm11/client.rb +542 -0
  227. data/test/sm11/driver.rb +183 -0
  228. data/test/sm11/servant.rb +1067 -0
  229. data/test/sm11/server.rb +25 -0
  230. data/test/soap/asp.net/hello.wsdl +96 -0
  231. data/test/soap/asp.net/test_aspdotnet.rb +123 -0
  232. data/test/soap/auth/htdigest +2 -0
  233. data/test/soap/auth/htpasswd +2 -0
  234. data/test/soap/auth/test_basic.rb +117 -0
  235. data/test/soap/auth/test_digest.rb +118 -0
  236. data/test/soap/calc/calc.rb +17 -0
  237. data/test/soap/calc/calc2.rb +29 -0
  238. data/test/soap/calc/server.cgi +13 -0
  239. data/test/soap/calc/server.rb +17 -0
  240. data/test/soap/calc/server2.rb +20 -0
  241. data/test/soap/calc/test_calc.rb +51 -0
  242. data/test/soap/calc/test_calc2.rb +55 -0
  243. data/test/soap/calc/test_calc_cgi.rb +71 -0
  244. data/test/soap/case/test_mapping.rb +57 -0
  245. data/test/soap/fault/test_customfault.rb +60 -0
  246. data/test/soap/fault/test_fault.rb +46 -0
  247. data/test/soap/fault/test_soaparray.rb +35 -0
  248. data/test/soap/filter/test_filter.rb +146 -0
  249. data/test/soap/header/server.cgi +119 -0
  250. data/test/soap/header/session.pstoredb +0 -0
  251. data/test/soap/header/test_authheader.rb +240 -0
  252. data/test/soap/header/test_authheader_cgi.rb +121 -0
  253. data/test/soap/header/test_simplehandler.rb +116 -0
  254. data/test/soap/helloworld/hw_s.rb +16 -0
  255. data/test/soap/helloworld/test_helloworld.rb +43 -0
  256. data/test/soap/htpasswd +2 -0
  257. data/test/soap/literalArrayMapping/amazonEc.rb +4778 -0
  258. data/test/soap/literalArrayMapping/amazonEcDriver.rb +172 -0
  259. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  260. data/test/soap/literalArrayMapping/test_definedarray.rb +34 -0
  261. data/test/soap/marshal/marshaltestlib.rb +494 -0
  262. data/test/soap/marshal/test_digraph.rb +56 -0
  263. data/test/soap/marshal/test_marshal.rb +26 -0
  264. data/test/soap/marshal/test_struct.rb +47 -0
  265. data/test/soap/ssl/README +1 -0
  266. data/test/soap/ssl/ca.cert +23 -0
  267. data/test/soap/ssl/client.cert +19 -0
  268. data/test/soap/ssl/client.key +15 -0
  269. data/test/soap/ssl/server.cert +19 -0
  270. data/test/soap/ssl/server.key +15 -0
  271. data/test/soap/ssl/sslsvr.rb +57 -0
  272. data/test/soap/ssl/subca.cert +21 -0
  273. data/test/soap/ssl/test_ssl.rb +235 -0
  274. data/test/soap/struct/test_struct.rb +70 -0
  275. data/test/soap/styleuse/client.rb +20 -0
  276. data/test/soap/styleuse/server.rb +86 -0
  277. data/test/soap/swa/test_file.rb +75 -0
  278. data/test/soap/test_basetype.rb +1090 -0
  279. data/test/soap/test_cookie.rb +112 -0
  280. data/test/soap/test_custom_ns.rb +105 -0
  281. data/test/soap/test_custommap.rb +110 -0
  282. data/test/soap/test_empty.rb +105 -0
  283. data/test/soap/test_envelopenamespace.rb +85 -0
  284. data/test/soap/test_extraattr.rb +54 -0
  285. data/test/soap/test_generator.rb +27 -0
  286. data/test/soap/test_httpconfigloader.rb +71 -0
  287. data/test/soap/test_mapping.rb +131 -0
  288. data/test/soap/test_nestedexception.rb +56 -0
  289. data/test/soap/test_nil.rb +57 -0
  290. data/test/soap/test_no_indent.rb +88 -0
  291. data/test/soap/test_property.rb +428 -0
  292. data/test/soap/test_response_as_xml.rb +117 -0
  293. data/test/soap/test_soapelement.rb +138 -0
  294. data/test/soap/test_streamhandler.rb +270 -0
  295. data/test/soap/test_styleuse.rb +326 -0
  296. data/test/soap/wsdlDriver/README.txt +2 -0
  297. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  298. data/test/soap/wsdlDriver/document.wsdl +54 -0
  299. data/test/soap/wsdlDriver/echo_version.rb +29 -0
  300. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  301. data/test/soap/wsdlDriver/test_calc.rb +71 -0
  302. data/test/soap/wsdlDriver/test_document.rb +71 -0
  303. data/test/soap/wsdlDriver/test_simpletype.rb +80 -0
  304. data/test/testutil.rb +54 -0
  305. data/test/wsdl/abstract/abstract.wsdl +176 -0
  306. data/test/wsdl/abstract/test_abstract.rb +159 -0
  307. data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
  308. data/test/wsdl/anonymous/expectedDriver.rb +59 -0
  309. data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
  310. data/test/wsdl/anonymous/lp.wsdl +147 -0
  311. data/test/wsdl/anonymous/test_anonymous.rb +130 -0
  312. data/test/wsdl/any/any.wsdl +114 -0
  313. data/test/wsdl/any/expectedDriver.rb +68 -0
  314. data/test/wsdl/any/expectedEcho.rb +57 -0
  315. data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
  316. data/test/wsdl/any/expectedService.rb +69 -0
  317. data/test/wsdl/any/test_any.rb +193 -0
  318. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  319. data/test/wsdl/axisArray/test_axisarray.rb +124 -0
  320. data/test/wsdl/choice/choice.wsdl +167 -0
  321. data/test/wsdl/choice/test_choice.rb +310 -0
  322. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  323. data/test/wsdl/complexcontent/test_echo.rb +90 -0
  324. data/test/wsdl/datetime/DatetimeService.rb +44 -0
  325. data/test/wsdl/datetime/datetime.rb +0 -0
  326. data/test/wsdl/datetime/datetime.wsdl +45 -0
  327. data/test/wsdl/datetime/datetimeServant.rb +22 -0
  328. data/test/wsdl/datetime/test_datetime.rb +86 -0
  329. data/test/wsdl/document/array/double.wsdl +161 -0
  330. data/test/wsdl/document/array/test_array.rb +201 -0
  331. data/test/wsdl/document/document.wsdl +76 -0
  332. data/test/wsdl/document/number.wsdl +54 -0
  333. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  334. data/test/wsdl/document/test_nosoapaction.rb +102 -0
  335. data/test/wsdl/document/test_number.rb +92 -0
  336. data/test/wsdl/document/test_rpc.rb +355 -0
  337. data/test/wsdl/emptycomplextype.wsdl +31 -0
  338. data/test/wsdl/fault/fault.wsdl +79 -0
  339. data/test/wsdl/fault/multifault.wsdl +96 -0
  340. data/test/wsdl/fault/test_fault.rb +119 -0
  341. data/test/wsdl/fault/test_multifault.rb +134 -0
  342. data/test/wsdl/group/expectedClassdef.rb +58 -0
  343. data/test/wsdl/group/expectedDriver.rb +51 -0
  344. data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
  345. data/test/wsdl/group/group.wsdl +88 -0
  346. data/test/wsdl/group/test_rpc.rb +145 -0
  347. data/test/wsdl/list/list.wsdl +93 -0
  348. data/test/wsdl/list/test_list.rb +124 -0
  349. data/test/wsdl/map/map.wsdl +92 -0
  350. data/test/wsdl/map/map.xml +43 -0
  351. data/test/wsdl/map/test_map.rb +99 -0
  352. data/test/wsdl/marshal/Person.rb +1 -0
  353. data/test/wsdl/marshal/person.wsdl +21 -0
  354. data/test/wsdl/marshal/person_org.rb +23 -0
  355. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  356. data/test/wsdl/multiplefault.wsdl +75 -0
  357. data/test/wsdl/oneway/oneway.wsdl +36 -0
  358. data/test/wsdl/oneway/test_oneway.rb +108 -0
  359. data/test/wsdl/overload/expectedClient.rb +37 -0
  360. data/test/wsdl/overload/expectedDriver.rb +61 -0
  361. data/test/wsdl/overload/expectedServant.rb +35 -0
  362. data/test/wsdl/overload/overload.wsdl +70 -0
  363. data/test/wsdl/overload/test_overload.rb +131 -0
  364. data/test/wsdl/qualified/lp.wsdl +47 -0
  365. data/test/wsdl/qualified/lp.xsd +26 -0
  366. data/test/wsdl/qualified/np.wsdl +51 -0
  367. data/test/wsdl/qualified/test_qualified.rb +137 -0
  368. data/test/wsdl/qualified/test_unqualified.rb +138 -0
  369. data/test/wsdl/raa/RAAService.rb +125 -0
  370. data/test/wsdl/raa/README.txt +8 -0
  371. data/test/wsdl/raa/expectedClassDef.rb +100 -0
  372. data/test/wsdl/raa/expectedDriver.rb +96 -0
  373. data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
  374. data/test/wsdl/raa/raa.wsdl +264 -0
  375. data/test/wsdl/raa/test_raa.rb +126 -0
  376. data/test/wsdl/ref/expectedDriver.rb +51 -0
  377. data/test/wsdl/ref/expectedProduct.rb +243 -0
  378. data/test/wsdl/ref/product.wsdl +147 -0
  379. data/test/wsdl/ref/test_ref.rb +268 -0
  380. data/test/wsdl/rpc/rpc.wsdl +109 -0
  381. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  382. data/test/wsdl/rpc/test_rpc.rb +176 -0
  383. data/test/wsdl/rpc/test_rpc_lit.rb +470 -0
  384. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  385. data/test/wsdl/simplecontent/test_simplecontent.rb +102 -0
  386. data/test/wsdl/simpletype/rpc/echo_version.rb +1 -0
  387. data/test/wsdl/simpletype/rpc/echo_versionDriver.rb +10 -0
  388. data/test/wsdl/simpletype/rpc/echo_versionMappingRegistry.rb +4 -0
  389. data/test/wsdl/simpletype/rpc/echo_versionServant.rb +3 -0
  390. data/test/wsdl/simpletype/rpc/echo_version_service.rb +3 -0
  391. data/test/wsdl/simpletype/rpc/echo_version_serviceClient.rb +34 -0
  392. data/test/wsdl/simpletype/rpc/expectedClient.rb +34 -0
  393. data/test/wsdl/simpletype/rpc/expectedDriver.rb +58 -0
  394. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +36 -0
  395. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +57 -0
  396. data/test/wsdl/simpletype/rpc/expectedServant.rb +32 -0
  397. data/test/wsdl/simpletype/rpc/expectedService.rb +55 -0
  398. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  399. data/test/wsdl/simpletype/rpc/test_rpc.rb +52 -0
  400. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  401. data/test/wsdl/simpletype/test_simpletype.rb +92 -0
  402. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  403. data/test/wsdl/soap/test_soapbodyparts.rb +79 -0
  404. data/test/wsdl/soap/wsdl2ruby/echo_version.rb +1 -0
  405. data/test/wsdl/soap/wsdl2ruby/echo_versionDriver.rb +10 -0
  406. data/test/wsdl/soap/wsdl2ruby/echo_versionMappingRegistry.rb +4 -0
  407. data/test/wsdl/soap/wsdl2ruby/echo_versionServant.rb +3 -0
  408. data/test/wsdl/soap/wsdl2ruby/echo_version_service.cgi +3 -0
  409. data/test/wsdl/soap/wsdl2ruby/echo_version_service.rb +7 -0
  410. data/test/wsdl/soap/wsdl2ruby/echo_version_serviceClient.rb +34 -0
  411. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +21 -0
  412. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +34 -0
  413. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +58 -0
  414. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +36 -0
  415. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +32 -0
  416. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +48 -0
  417. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +55 -0
  418. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  419. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +37 -0
  420. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  421. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +53 -0
  422. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  423. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +83 -0
  424. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +102 -0
  425. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  426. data/test/wsdl/soaptype/test_soaptype.rb +178 -0
  427. data/test/wsdl/test_emptycomplextype.rb +21 -0
  428. data/test/wsdl/test_fault.rb +50 -0
  429. data/test/wsdl/test_multiplefault.rb +41 -0
  430. data/test/xsd/codegen/test_classdef.rb +244 -0
  431. data/test/xsd/noencoding.xml +4 -0
  432. data/test/xsd/test_noencoding.rb +32 -0
  433. data/test/xsd/test_ns.rb +41 -0
  434. data/test/xsd/test_xmlschemaparser.rb +22 -0
  435. data/test/xsd/test_xsd.rb +1638 -0
  436. data/test/xsd/xmllang.xml +43 -0
  437. data/test/xsd/xmlschema.xml +12 -0
  438. data/test/xsd/xsd2ruby/expected_mysample.rb +65 -0
  439. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +11 -0
  440. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +51 -0
  441. data/test/xsd/xsd2ruby/section.xsd +49 -0
  442. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +90 -0
  443. metadata +568 -0
@@ -0,0 +1,388 @@
1
+ # SOAP4R - 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 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.to_s.sub(/^@/, '').to_sym
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.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
+ encoded = XSD::Charset.encoding_conv(obj, Mapping.external_ces,
109
+ XSD::Charset.encoding)
110
+ soap_obj = soap_class.new(encoded)
111
+ rescue XSD::ValueSpaceError
112
+ return nil
113
+ end
114
+ mark_marshalled_obj(obj, soap_obj)
115
+ soap_obj
116
+ end
117
+
118
+ def soap2obj(obj_class, node, info, map)
119
+ obj = Mapping.create_empty_object(obj_class)
120
+ decoded = XSD::Charset.encoding_conv(node.data, XSD::Charset.encoding,
121
+ Mapping.external_ces)
122
+ obj.replace(decoded)
123
+ mark_unmarshalled_obj(node, obj)
124
+ return true, obj
125
+ end
126
+ end
127
+
128
+ class FixnumFactory_ < Factory
129
+ def obj2soap(soap_class, obj, info, map)
130
+ soap_obj = nil
131
+ begin
132
+ soap_obj = soap_class.new(obj)
133
+ rescue XSD::ValueSpaceError
134
+ return nil
135
+ end
136
+ soap_obj
137
+ end
138
+
139
+ def soap2obj(obj_class, node, info, map)
140
+ obj = node.data
141
+ return true, obj
142
+ end
143
+ end
144
+
145
+ class BasetypeFactory_ < Factory
146
+ def initialize(allow_original_mapping = false)
147
+ super()
148
+ @allow_original_mapping = allow_original_mapping
149
+ end
150
+
151
+ def obj2soap(soap_class, obj, info, map)
152
+ if !@allow_original_mapping and !obj.instance_variables.empty?
153
+ return nil
154
+ end
155
+ soap_obj = nil
156
+ begin
157
+ soap_obj = soap_class.new(obj)
158
+ rescue XSD::ValueSpaceError
159
+ return nil
160
+ end
161
+ if @allow_original_mapping
162
+ # Basetype except String should not be multiref-ed in SOAP/1.1.
163
+ mark_marshalled_obj(obj, soap_obj)
164
+ end
165
+ soap_obj
166
+ end
167
+
168
+ def soap2obj(obj_class, node, info, map)
169
+ obj = node.data
170
+ mark_unmarshalled_obj(node, obj)
171
+ return true, obj
172
+ end
173
+ end
174
+
175
+ class DateTimeFactory_ < Factory
176
+ def initialize(allow_original_mapping = false)
177
+ super()
178
+ @allow_original_mapping = allow_original_mapping
179
+ end
180
+
181
+ def obj2soap(soap_class, obj, info, map)
182
+ if !@allow_original_mapping and
183
+ Time === obj and !obj.instance_variables.empty?
184
+ return nil
185
+ end
186
+ soap_obj = nil
187
+ begin
188
+ soap_obj = soap_class.new(obj)
189
+ rescue XSD::ValueSpaceError
190
+ return nil
191
+ end
192
+ mark_marshalled_obj(obj, soap_obj)
193
+ soap_obj
194
+ end
195
+
196
+ def soap2obj(obj_class, node, info, map)
197
+ if node.respond_to?(:to_obj)
198
+ obj = node.to_obj(obj_class)
199
+ return false if obj.nil?
200
+ mark_unmarshalled_obj(node, obj)
201
+ return true, obj
202
+ else
203
+ return false
204
+ end
205
+ end
206
+ end
207
+
208
+ class Base64Factory_ < Factory
209
+ def obj2soap(soap_class, obj, info, map)
210
+ return nil unless obj.instance_variables.empty?
211
+ soap_obj = soap_class.new(obj)
212
+ mark_marshalled_obj(obj, soap_obj) if soap_obj
213
+ soap_obj
214
+ end
215
+
216
+ def soap2obj(obj_class, node, info, map)
217
+ obj = node.string
218
+ mark_unmarshalled_obj(node, obj)
219
+ return true, obj
220
+ end
221
+ end
222
+
223
+ class URIFactory_ < Factory
224
+ def obj2soap(soap_class, obj, info, map)
225
+ soap_obj = soap_class.new(obj)
226
+ mark_marshalled_obj(obj, soap_obj) if soap_obj
227
+ soap_obj
228
+ end
229
+
230
+ def soap2obj(obj_class, node, info, map)
231
+ obj = node.data
232
+ mark_unmarshalled_obj(node, obj)
233
+ return true, obj
234
+ end
235
+ end
236
+
237
+ class ArrayFactory_ < Factory
238
+ def initialize(allow_original_mapping = false)
239
+ super()
240
+ @allow_original_mapping = allow_original_mapping
241
+ end
242
+
243
+ # [[1], [2]] is converted to Array of Array, not 2-D Array.
244
+ # To create M-D Array, you must call Mapping.ary2md.
245
+ def obj2soap(soap_class, obj, info, map)
246
+ if !@allow_original_mapping and !obj.instance_variables.empty?
247
+ return nil
248
+ end
249
+ arytype = Mapping.obj2element(obj)
250
+ if arytype.name
251
+ arytype.namespace ||= RubyTypeNamespace
252
+ else
253
+ arytype = XSD::AnyTypeName
254
+ end
255
+ soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
256
+ mark_marshalled_obj(obj, soap_obj)
257
+ obj.each do |item|
258
+ soap_obj.add(Mapping._obj2soap(item, map))
259
+ end
260
+ soap_obj
261
+ end
262
+
263
+ def soap2obj(obj_class, node, info, map)
264
+ obj = Mapping.create_empty_object(obj_class)
265
+ mark_unmarshalled_obj(node, obj)
266
+ node.soap2array(obj) do |elem|
267
+ elem ? Mapping._soap2obj(elem, map) : nil
268
+ end
269
+ return true, obj
270
+ end
271
+ end
272
+
273
+ class TypedArrayFactory_ < Factory
274
+ def initialize(allow_original_mapping = false)
275
+ super()
276
+ @allow_original_mapping = allow_original_mapping
277
+ end
278
+
279
+ def obj2soap(soap_class, obj, info, map)
280
+ if !@allow_original_mapping and !obj.instance_variables.empty?
281
+ return nil
282
+ end
283
+ arytype = info[:type] || info[0]
284
+ soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
285
+ mark_marshalled_obj(obj, soap_obj)
286
+ obj.each do |var|
287
+ soap_obj.add(Mapping._obj2soap(var, map))
288
+ end
289
+ soap_obj
290
+ end
291
+
292
+ def soap2obj(obj_class, node, info, map)
293
+ if node.rank > 1
294
+ return false
295
+ end
296
+ arytype = info[:type] || info[0]
297
+ unless node.arytype == arytype
298
+ return false
299
+ end
300
+ obj = Mapping.create_empty_object(obj_class)
301
+ mark_unmarshalled_obj(node, obj)
302
+ node.soap2array(obj) do |elem|
303
+ elem ? Mapping._soap2obj(elem, map) : nil
304
+ end
305
+ return true, obj
306
+ end
307
+ end
308
+
309
+ class TypedStructFactory_ < Factory
310
+ def obj2soap(soap_class, obj, info, map)
311
+ type = info[:type] || info[0]
312
+ soap_obj = soap_class.new(type)
313
+ mark_marshalled_obj(obj, soap_obj)
314
+ if obj.class <= SOAP::Marshallable
315
+ setiv2soap(soap_obj, obj, map)
316
+ else
317
+ # allow to serialize an instance of unmarked class
318
+ setiv2soap(soap_obj, obj, map)
319
+ end
320
+ soap_obj
321
+ end
322
+
323
+ def soap2obj(obj_class, node, info, map)
324
+ type = info[:type] || info[0]
325
+ unless node.type == type
326
+ return false
327
+ end
328
+ obj = Mapping.create_empty_object(obj_class)
329
+ mark_unmarshalled_obj(node, obj)
330
+ setiv2obj(obj, node, map)
331
+ return true, obj
332
+ end
333
+ end
334
+
335
+ MapQName = XSD::QName.new(ApacheSOAPTypeNamespace, 'Map')
336
+ class HashFactory_ < Factory
337
+ def initialize(allow_original_mapping = false)
338
+ super()
339
+ @allow_original_mapping = allow_original_mapping
340
+ end
341
+
342
+ def obj2soap(soap_class, obj, info, map)
343
+ if !@allow_original_mapping and !obj.instance_variables.empty?
344
+ return nil
345
+ end
346
+ if !obj.default.nil? or
347
+ (obj.respond_to?(:default_proc) and obj.default_proc)
348
+ return nil
349
+ end
350
+ soap_obj = SOAPStruct.new(MapQName)
351
+ mark_marshalled_obj(obj, soap_obj)
352
+ obj.each do |key, value|
353
+ elem = SOAPStruct.new
354
+ elem.add("key", Mapping._obj2soap(key, map))
355
+ elem.add("value", Mapping._obj2soap(value, map))
356
+ # ApacheAxis allows only 'item' here.
357
+ soap_obj.add("item", elem)
358
+ end
359
+ soap_obj
360
+ end
361
+
362
+ def soap2obj(obj_class, node, info, map)
363
+ unless node.type == MapQName
364
+ return false
365
+ end
366
+ if node.class == SOAPStruct and node.key?('default')
367
+ return false
368
+ end
369
+ obj = Mapping.create_empty_object(obj_class)
370
+ mark_unmarshalled_obj(node, obj)
371
+ if node.class == SOAPStruct
372
+ node.each do |key, value|
373
+ obj[Mapping._soap2obj(value['key'], map)] =
374
+ Mapping._soap2obj(value['value'], map)
375
+ end
376
+ else
377
+ node.each do |value|
378
+ obj[Mapping._soap2obj(value['key'], map)] =
379
+ Mapping._soap2obj(value['value'], map)
380
+ end
381
+ end
382
+ return true, obj
383
+ end
384
+ end
385
+
386
+
387
+ end
388
+ end
@@ -0,0 +1,391 @@
1
+ # SOAP4R - literal 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
+ 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, obj_class = nil)
33
+ soap_obj = nil
34
+ if obj.is_a?(SOAPElement)
35
+ soap_obj = obj
36
+ else
37
+ soap_obj = any2soap(obj, qname, obj_class)
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
+ cause = nil
52
+ begin
53
+ return any2obj(node, obj_class)
54
+ rescue MappingError
55
+ cause = $!
56
+ end
57
+ if @excn_handler_soap2obj
58
+ begin
59
+ return @excn_handler_soap2obj.call(node) { |yield_node|
60
+ Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT)
61
+ }
62
+ rescue Exception
63
+ end
64
+ end
65
+ raise MappingError.new("cannot map #{node.elename.name}/#{node.type.name} to Ruby object", cause)
66
+ end
67
+
68
+ private
69
+
70
+ MAPPING_OPT = { :no_reference => true }
71
+
72
+ def definedobj2soap(obj, definition)
73
+ obj2soap(obj, definition.elename, definition.mapped_class)
74
+ end
75
+
76
+ def any2soap(obj, qname, obj_class)
77
+ ele = nil
78
+ if obj.is_a?(SOAP::Mapping::Object)
79
+ return mappingobj2soap(obj, qname)
80
+ end
81
+ class_definition = schema_definition_from_class(obj.class)
82
+ if class_definition.nil? and obj_class
83
+ class_definition = schema_definition_from_class(obj_class)
84
+ end
85
+ elename_definition = schema_definition_from_elename(qname)
86
+ if !class_definition and !elename_definition
87
+ # no definition found
88
+ return anyobj2soap(obj, qname)
89
+ end
90
+ if !class_definition or !elename_definition
91
+ # use found one
92
+ return stubobj2soap(obj, qname, class_definition || elename_definition)
93
+ end
94
+ # found both:
95
+ if class_definition.class_for == elename_definition.class_for
96
+ # if two definitions are for the same class, give qname a priority.
97
+ return stubobj2soap(obj, qname, elename_definition)
98
+ end
99
+ # it should be a derived class
100
+ return stubobj2soap(obj, qname, class_definition)
101
+ end
102
+
103
+ def anyobj2soap(obj, qname)
104
+ ele = nil
105
+ case obj
106
+ when Hash
107
+ ele = SOAPElement.from_obj(obj, nil)
108
+ ele.elename = qname
109
+ when Array
110
+ # treat as a list of simpletype
111
+ ele = SOAPElement.new(qname, obj.join(" "))
112
+ when XSD::QName
113
+ ele = SOAPElement.new(qname)
114
+ ele.text = obj
115
+ else
116
+ # expected to be a basetype or an anyType.
117
+ # SOAPStruct, etc. is used instead of SOAPElement.
118
+ begin
119
+ ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT)
120
+ ele.elename = qname
121
+ rescue MappingError
122
+ ele = SOAPElement.new(qname, obj.to_s)
123
+ end
124
+ end
125
+ add_attributes2soap(obj, ele)
126
+ ele
127
+ end
128
+
129
+ def stubobj2soap(obj, qname, definition)
130
+ if obj.nil?
131
+ ele = SOAPNil.new
132
+ ele.elename = qname
133
+ elsif obj.is_a?(::String)
134
+ ele = SOAPElement.new(qname, obj)
135
+ else
136
+ ele = SOAPElement.new(qname)
137
+ end
138
+ ele.qualified = definition.qualified
139
+ if definition.type
140
+ ele.type = definition.type
141
+ if definition.basetype or Mapping.root_type_hint
142
+ Mapping.reset_root_type_hint
143
+ ele.force_typed = true
144
+ end
145
+ end
146
+ if qname.nil? and definition.elename
147
+ ele.elename = definition.elename
148
+ end
149
+ return ele if obj.nil?
150
+ stubobj2soap_elements(obj, ele, definition.elements)
151
+ add_definedattributes2soap(obj, ele, definition)
152
+ ele
153
+ end
154
+
155
+ def stubobj2soap_elements(obj, ele, definition, is_choice = false)
156
+ added = false
157
+ case definition
158
+ when SchemaSequenceDefinition, SchemaEmptyDefinition
159
+ definition.each do |eledef|
160
+ ele_added = stubobj2soap_elements(obj, ele, eledef, is_choice)
161
+ added = true if ele_added
162
+ end
163
+ when SchemaChoiceDefinition
164
+ definition.each do |eledef|
165
+ added = stubobj2soap_elements(obj, ele, eledef, true)
166
+ break if added
167
+ end
168
+ else
169
+ added = true
170
+ if definition.as_any?
171
+ any = Mapping.get_attributes_for_any(obj)
172
+ SOAPElement.from_objs(any).each do |child|
173
+ ele.add(child)
174
+ end
175
+ elsif obj.respond_to?(:each) and definition.as_array?
176
+ obj.each do |item|
177
+ ele.add(definedobj2soap(item, definition))
178
+ end
179
+ else
180
+ child = Mapping.get_attribute(obj, definition.varname)
181
+ if child.nil? and (is_choice or definition.minoccurs == 0)
182
+ added = false
183
+ else
184
+ if child.respond_to?(:each) and definition.as_array?
185
+ if child.empty?
186
+ added = false
187
+ else
188
+ child.each do |item|
189
+ ele.add(definedobj2soap(item, definition))
190
+ end
191
+ end
192
+ else
193
+ ele.add(definedobj2soap(child, definition))
194
+ end
195
+ end
196
+ end
197
+ end
198
+ added
199
+ end
200
+
201
+ def mappingobj2soap(obj, qname)
202
+ ele = SOAPElement.new(qname)
203
+ obj.__xmlele.each do |key, value|
204
+ if value.is_a?(::Array)
205
+ value.each do |item|
206
+ ele.add(obj2soap(item, key))
207
+ end
208
+ else
209
+ ele.add(obj2soap(value, key))
210
+ end
211
+ end
212
+ obj.__xmlattr.each do |key, value|
213
+ ele.extraattr[key] = value
214
+ end
215
+ ele
216
+ end
217
+
218
+ def any2obj(node, obj_class = nil)
219
+ is_compound = node.is_a?(::SOAP::SOAPCompoundtype)
220
+ # trust xsi:type first
221
+ if is_compound and node.type
222
+ definition = schema_definition_from_type(node.type)
223
+ end
224
+ # element name next
225
+ definition ||= schema_definition_from_elename(node.elename)
226
+ # class defined in parent type last
227
+ if obj_class
228
+ definition ||= schema_definition_from_class(obj_class)
229
+ end
230
+ if definition
231
+ obj_class = definition.class_for
232
+ end
233
+ if is_compound
234
+ if definition
235
+ return elesoap2stubobj(node, obj_class, definition)
236
+ elsif node.is_a?(::SOAP::SOAPNameAccessible)
237
+ return elesoap2plainobj(node)
238
+ end
239
+ end
240
+ obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT)
241
+ add_attributes2obj(node, obj)
242
+ obj
243
+ end
244
+
245
+ def elesoap2stubobj(node, obj_class, definition)
246
+ obj = nil
247
+ if obj_class == ::String
248
+ obj = node.text
249
+ elsif obj_class < ::String and node.respond_to?(:text)
250
+ obj = obj_class.new(node.text)
251
+ else
252
+ obj = Mapping.create_empty_object(obj_class)
253
+ add_elesoap2stubobj(node, obj, definition)
254
+ end
255
+ add_attributes2stubobj(node, obj, definition)
256
+ obj
257
+ end
258
+
259
+ def elesoap2plainobj(node)
260
+ obj = nil
261
+ if !node.have_member
262
+ obj = base2obj(node, ::SOAP::SOAPString)
263
+ else
264
+ obj = anytype2obj(node)
265
+ add_elesoap2plainobj(node, obj)
266
+ end
267
+ add_attributes2obj(node, obj)
268
+ obj
269
+ end
270
+
271
+ def anytype2obj(node)
272
+ if node.is_a?(::SOAP::SOAPBasetype)
273
+ return node.data
274
+ end
275
+ ::SOAP::Mapping::Object.new
276
+ end
277
+
278
+ def add_elesoap2stubobj(node, obj, definition)
279
+ vars = {}
280
+ node.each do |name, value|
281
+ item = definition.elements.find_element(value.elename)
282
+ if item
283
+ child = elesoapchild2obj(value, item)
284
+ else
285
+ # unknown element is treated as anyType.
286
+ child = any2obj(value)
287
+ end
288
+ if item and item.as_array?
289
+ (vars[name] ||= []) << child
290
+ elsif vars.key?(name)
291
+ vars[name] = [vars[name], child].flatten
292
+ else
293
+ vars[name] = child
294
+ end
295
+ end
296
+ if obj.is_a?(::Array) and is_stubobj_elements_for_array(vars)
297
+ Array.instance_method(:replace).bind(obj).call(vars.values[0])
298
+ else
299
+ Mapping.set_attributes(obj, vars)
300
+ end
301
+ end
302
+
303
+ def elesoapchild2obj(value, eledef)
304
+ if eledef.mapped_class
305
+ if eledef.mapped_class.include?(::SOAP::SOAPBasetype)
306
+ base2obj(value, eledef.mapped_class)
307
+ else
308
+ any2obj(value, eledef.mapped_class)
309
+ end
310
+ else
311
+ child_definition = schema_definition_from_elename(eledef.elename)
312
+ if child_definition
313
+ any2obj(value, child_definition.class_for)
314
+ else
315
+ # untyped element is treated as anyType.
316
+ any2obj(value)
317
+ end
318
+ end
319
+ end
320
+
321
+ def add_attributes2stubobj(node, obj, definition)
322
+ return if obj.nil? or node.extraattr.empty?
323
+ if attributes = definition.attributes
324
+ define_xmlattr(obj)
325
+ attributes.each do |qname, class_name|
326
+ child = node.extraattr[qname]
327
+ next if child.nil?
328
+ if class_name
329
+ klass = Mapping.class_from_name(class_name)
330
+ if klass.include?(::SOAP::SOAPBasetype)
331
+ child = klass.to_data(child)
332
+ end
333
+ end
334
+ obj.__xmlattr[qname] = child
335
+ define_xmlattr_accessor(obj, qname)
336
+ end
337
+ end
338
+ end
339
+
340
+ def add_elesoap2plainobj(node, obj)
341
+ node.each do |name, value|
342
+ obj.__add_xmlele_value(value.elename, any2obj(value))
343
+ end
344
+ end
345
+
346
+ def add_attributes2obj(node, obj)
347
+ return if obj.nil? or node.extraattr.empty?
348
+ define_xmlattr(obj)
349
+ node.extraattr.each do |qname, value|
350
+ obj.__xmlattr[qname] = value
351
+ define_xmlattr_accessor(obj, qname)
352
+ end
353
+ end
354
+
355
+ # Mapping.define_attr_accessor calls define_method with proc and it exhausts
356
+ # much memory for each singleton Object. just instance_eval instead of it.
357
+ def define_xmlattr_accessor(obj, qname)
358
+ # untaint depends GenSupport.safemethodname
359
+ name = Mapping.safemethodname('xmlattr_' + qname.name).untaint
360
+ unless obj.respond_to?(name)
361
+ # untaint depends QName#dump
362
+ qnamedump = qname.dump.untaint
363
+ obj.instance_eval <<-EOS
364
+ def #{name}
365
+ @__xmlattr[#{qnamedump}]
366
+ end
367
+
368
+ def #{name}=(value)
369
+ @__xmlattr[#{qnamedump}] = value
370
+ end
371
+ EOS
372
+ end
373
+ end
374
+
375
+ # Mapping.define_attr_accessor calls define_method with proc and it exhausts
376
+ # much memory for each singleton Object. just instance_eval instead of it.
377
+ def define_xmlattr(obj)
378
+ obj.instance_variable_set('@__xmlattr', {})
379
+ unless obj.respond_to?(:__xmlattr)
380
+ obj.instance_eval <<-EOS
381
+ def __xmlattr
382
+ @__xmlattr
383
+ end
384
+ EOS
385
+ end
386
+ end
387
+ end
388
+
389
+
390
+ end
391
+ end