soap4r-sgonyea 1.5.9

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 (427) hide show
  1. data/bin/wsdl2ruby.rb +139 -0
  2. data/bin/xsd2ruby.rb +91 -0
  3. data/lib/soap/attachment.rb +109 -0
  4. data/lib/soap/attrproxy.rb +35 -0
  5. data/lib/soap/baseData.rb +1095 -0
  6. data/lib/soap/element.rb +278 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  8. data/lib/soap/encodingstyle/handler.rb +121 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  11. data/lib/soap/filter.rb +14 -0
  12. data/lib/soap/filter/filterchain.rb +52 -0
  13. data/lib/soap/filter/handler.rb +32 -0
  14. data/lib/soap/filter/streamhandler.rb +30 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +62 -0
  17. data/lib/soap/header/handlerset.rb +71 -0
  18. data/lib/soap/header/mappinghandler.rb +48 -0
  19. data/lib/soap/header/simplehandler.rb +45 -0
  20. data/lib/soap/httpconfigloader.rb +140 -0
  21. data/lib/soap/mapping.rb +13 -0
  22. data/lib/soap/mapping/encodedregistry.rb +539 -0
  23. data/lib/soap/mapping/factory.rb +389 -0
  24. data/lib/soap/mapping/literalregistry.rb +392 -0
  25. data/lib/soap/mapping/mapping.rb +577 -0
  26. data/lib/soap/mapping/registry.rb +296 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +171 -0
  29. data/lib/soap/mapping/typeMap.rb +107 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  32. data/lib/soap/marshal.rb +60 -0
  33. data/lib/soap/mimemessage.rb +243 -0
  34. data/lib/soap/nestedexception.rb +43 -0
  35. data/lib/soap/netHttpClient.rb +242 -0
  36. data/lib/soap/ns.rb +39 -0
  37. data/lib/soap/parser.rb +253 -0
  38. data/lib/soap/processor.rb +67 -0
  39. data/lib/soap/property.rb +340 -0
  40. data/lib/soap/proxy.rb +15 -0
  41. data/lib/soap/rpc/cgistub.rb +248 -0
  42. data/lib/soap/rpc/driver.rb +222 -0
  43. data/lib/soap/rpc/element.rb +375 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/methodDef.rb +69 -0
  46. data/lib/soap/rpc/proxy.rb +573 -0
  47. data/lib/soap/rpc/router.rb +663 -0
  48. data/lib/soap/rpc/rpc.rb +26 -0
  49. data/lib/soap/rpc/soaplet.rb +201 -0
  50. data/lib/soap/rpc/standaloneServer.rb +44 -0
  51. data/lib/soap/soap.rb +154 -0
  52. data/lib/soap/streamHandler.rb +302 -0
  53. data/lib/soap/version.rb +9 -0
  54. data/lib/soap/wsdlDriver.rb +165 -0
  55. data/lib/wsdl/binding.rb +66 -0
  56. data/lib/wsdl/data.rb +65 -0
  57. data/lib/wsdl/definitions.rb +237 -0
  58. data/lib/wsdl/documentation.rb +33 -0
  59. data/lib/wsdl/import.rb +81 -0
  60. data/lib/wsdl/importer.rb +39 -0
  61. data/lib/wsdl/info.rb +51 -0
  62. data/lib/wsdl/message.rb +55 -0
  63. data/lib/wsdl/operation.rb +152 -0
  64. data/lib/wsdl/operationBinding.rb +241 -0
  65. data/lib/wsdl/param.rb +94 -0
  66. data/lib/wsdl/parser.rb +165 -0
  67. data/lib/wsdl/part.rb +53 -0
  68. data/lib/wsdl/port.rb +67 -0
  69. data/lib/wsdl/portType.rb +76 -0
  70. data/lib/wsdl/service.rb +62 -0
  71. data/lib/wsdl/soap/address.rb +41 -0
  72. data/lib/wsdl/soap/binding.rb +50 -0
  73. data/lib/wsdl/soap/body.rb +59 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +434 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +241 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +55 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  79. data/lib/wsdl/soap/complexType.rb +174 -0
  80. data/lib/wsdl/soap/data.rb +43 -0
  81. data/lib/wsdl/soap/definitions.rb +201 -0
  82. data/lib/wsdl/soap/driverCreator.rb +121 -0
  83. data/lib/wsdl/soap/element.rb +34 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  85. data/lib/wsdl/soap/fault.rb +57 -0
  86. data/lib/wsdl/soap/header.rb +87 -0
  87. data/lib/wsdl/soap/headerfault.rb +57 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +377 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  92. data/lib/wsdl/soap/operation.rb +113 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +226 -0
  97. data/lib/wsdl/types.rb +45 -0
  98. data/lib/wsdl/wsdl.rb +25 -0
  99. data/lib/wsdl/xmlSchema/all.rb +25 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  101. data/lib/wsdl/xmlSchema/any.rb +62 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  110. data/lib/wsdl/xmlSchema/content.rb +96 -0
  111. data/lib/wsdl/xmlSchema/data.rb +117 -0
  112. data/lib/wsdl/xmlSchema/element.rb +154 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  115. data/lib/wsdl/xmlSchema/group.rb +101 -0
  116. data/lib/wsdl/xmlSchema/import.rb +54 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +46 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  119. data/lib/wsdl/xmlSchema/include.rb +49 -0
  120. data/lib/wsdl/xmlSchema/length.rb +38 -0
  121. data/lib/wsdl/xmlSchema/list.rb +49 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  138. data/lib/wsdl/xmlSchema/union.rb +36 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +176 -0
  142. data/lib/xsd/charset.rb +190 -0
  143. data/lib/xsd/codegen.rb +13 -0
  144. data/lib/xsd/codegen/classdef.rb +209 -0
  145. data/lib/xsd/codegen/commentdef.rb +35 -0
  146. data/lib/xsd/codegen/gensupport.rb +277 -0
  147. data/lib/xsd/codegen/methoddef.rb +71 -0
  148. data/lib/xsd/codegen/moduledef.rb +209 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +21 -0
  151. data/lib/xsd/iconvcharset.rb +34 -0
  152. data/lib/xsd/mapping.rb +69 -0
  153. data/lib/xsd/namedelements.rb +133 -0
  154. data/lib/xsd/ns.rb +183 -0
  155. data/lib/xsd/qname.rb +80 -0
  156. data/lib/xsd/xmlparser.rb +77 -0
  157. data/lib/xsd/xmlparser/libxmlparser.rb +116 -0
  158. data/lib/xsd/xmlparser/parser.rb +101 -0
  159. data/lib/xsd/xmlparser/rexmlparser.rb +59 -0
  160. data/lib/xsd/xmlparser/xmlparser.rb +51 -0
  161. data/lib/xsd/xmlparser/xmlscanner.rb +150 -0
  162. data/test/16runner.rb +69 -0
  163. data/test/helper.rb +7 -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 +289 -0
  168. data/test/interopR2/client.NetRemoting.rb +18 -0
  169. data/test/interopR2/client.rb +1235 -0
  170. data/test/interopR2/client4S4C.rb +16 -0
  171. data/test/interopR2/client4S4C2.rb +15 -0
  172. data/test/interopR2/clientASP.NET.rb +18 -0
  173. data/test/interopR2/clientApacheAxis.rb +17 -0
  174. data/test/interopR2/clientApacheSOAP.rb +18 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +18 -0
  176. data/test/interopR2/clientBase.rb +1968 -0
  177. data/test/interopR2/clientCapeConnect.rb +19 -0
  178. data/test/interopR2/clientDelphi.rb +20 -0
  179. data/test/interopR2/clientEasySoap.rb +15 -0
  180. data/test/interopR2/clientFrontier.rb +26 -0
  181. data/test/interopR2/clientGLUE.rb +33 -0
  182. data/test/interopR2/clientHP.rb +14 -0
  183. data/test/interopR2/clientJAX-RPC.rb +20 -0
  184. data/test/interopR2/clientJSOAP.rb +15 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +16 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +18 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +18 -0
  188. data/test/interopR2/clientNuSOAP.rb +20 -0
  189. data/test/interopR2/clientNuWave.rb +16 -0
  190. data/test/interopR2/clientOpenLink.rb +16 -0
  191. data/test/interopR2/clientOracle.rb +16 -0
  192. data/test/interopR2/clientPEAR.rb +19 -0
  193. data/test/interopR2/clientPhalanx.rb +19 -0
  194. data/test/interopR2/clientSIMACE.rb +19 -0
  195. data/test/interopR2/clientSOAP4R.rb +19 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +15 -0
  197. data/test/interopR2/clientSQLData.rb +19 -0
  198. data/test/interopR2/clientSilverStream.rb +18 -0
  199. data/test/interopR2/clientSpray2001.rb +18 -0
  200. data/test/interopR2/clientSun.rb +20 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +20 -0
  202. data/test/interopR2/clientWASP.rb +20 -0
  203. data/test/interopR2/clientWASPC.rb +19 -0
  204. data/test/interopR2/clientWebMethods.rb +16 -0
  205. data/test/interopR2/clientWhiteMesa.rb +29 -0
  206. data/test/interopR2/clientWingfoot.rb +16 -0
  207. data/test/interopR2/clientXMLBus.rb +20 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +18 -0
  209. data/test/interopR2/clientXSOAP.rb +15 -0
  210. data/test/interopR2/clientZSI.rb +20 -0
  211. data/test/interopR2/clienteSOAP.rb +19 -0
  212. data/test/interopR2/clientgSOAP.rb +19 -0
  213. data/test/interopR2/clientkSOAP.rb +18 -0
  214. data/test/interopR2/iSimonReg.rb +113 -0
  215. data/test/interopR2/interopResultBase.rb +115 -0
  216. data/test/interopR2/interopService.rb +248 -0
  217. data/test/interopR2/rwikiInteropService.rb +106 -0
  218. data/test/interopR2/server.cgi +271 -0
  219. data/test/interopR2/server.rb +276 -0
  220. data/test/interopR2/simonReg.rb +124 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +113 -0
  223. data/test/runner.rb +8 -0
  224. data/test/sm11/classDef.rb +157 -0
  225. data/test/sm11/client.rb +543 -0
  226. data/test/sm11/driver.rb +184 -0
  227. data/test/sm11/servant.rb +1068 -0
  228. data/test/sm11/server.rb +26 -0
  229. data/test/soap/asp.net/hello.wsdl +96 -0
  230. data/test/soap/asp.net/test_aspdotnet.rb +124 -0
  231. data/test/soap/auth/htdigest +2 -0
  232. data/test/soap/auth/htpasswd +2 -0
  233. data/test/soap/auth/test_basic.rb +118 -0
  234. data/test/soap/auth/test_digest.rb +119 -0
  235. data/test/soap/calc/calc.rb +18 -0
  236. data/test/soap/calc/calc2.rb +30 -0
  237. data/test/soap/calc/server.cgi +16 -0
  238. data/test/soap/calc/server.rb +18 -0
  239. data/test/soap/calc/server2.rb +21 -0
  240. data/test/soap/calc/test_calc.rb +53 -0
  241. data/test/soap/calc/test_calc2.rb +57 -0
  242. data/test/soap/calc/test_calc_cgi.rb +72 -0
  243. data/test/soap/case/test_mapping.rb +58 -0
  244. data/test/soap/fault/test_customfault.rb +61 -0
  245. data/test/soap/fault/test_fault.rb +47 -0
  246. data/test/soap/fault/test_soaparray.rb +36 -0
  247. data/test/soap/filter/test_filter.rb +147 -0
  248. data/test/soap/header/server.cgi +121 -0
  249. data/test/soap/header/test_authheader.rb +241 -0
  250. data/test/soap/header/test_authheader_cgi.rb +122 -0
  251. data/test/soap/header/test_simplehandler.rb +117 -0
  252. data/test/soap/helloworld/hw_s.rb +17 -0
  253. data/test/soap/helloworld/test_helloworld.rb +45 -0
  254. data/test/soap/htpasswd +2 -0
  255. data/test/soap/literalArrayMapping/amazonEc.rb +4779 -0
  256. data/test/soap/literalArrayMapping/amazonEcDriver.rb +173 -0
  257. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  258. data/test/soap/literalArrayMapping/test_definedarray.rb +35 -0
  259. data/test/soap/marshal/marshaltestlib.rb +498 -0
  260. data/test/soap/marshal/test_digraph.rb +57 -0
  261. data/test/soap/marshal/test_marshal.rb +28 -0
  262. data/test/soap/marshal/test_struct.rb +48 -0
  263. data/test/soap/ssl/README +1 -0
  264. data/test/soap/ssl/ca.cert +23 -0
  265. data/test/soap/ssl/client.cert +19 -0
  266. data/test/soap/ssl/client.key +15 -0
  267. data/test/soap/ssl/server.cert +19 -0
  268. data/test/soap/ssl/server.key +15 -0
  269. data/test/soap/ssl/sslsvr.rb +59 -0
  270. data/test/soap/ssl/subca.cert +21 -0
  271. data/test/soap/ssl/test_ssl.rb +236 -0
  272. data/test/soap/struct/test_struct.rb +71 -0
  273. data/test/soap/styleuse/client.rb +21 -0
  274. data/test/soap/styleuse/server.rb +87 -0
  275. data/test/soap/swa/test_file.rb +76 -0
  276. data/test/soap/test_basetype.rb +1091 -0
  277. data/test/soap/test_cookie.rb +113 -0
  278. data/test/soap/test_custom_ns.rb +106 -0
  279. data/test/soap/test_custommap.rb +111 -0
  280. data/test/soap/test_empty.rb +106 -0
  281. data/test/soap/test_envelopenamespace.rb +86 -0
  282. data/test/soap/test_extraattr.rb +55 -0
  283. data/test/soap/test_generator.rb +32 -0
  284. data/test/soap/test_httpconfigloader.rb +72 -0
  285. data/test/soap/test_mapping.rb +132 -0
  286. data/test/soap/test_nestedexception.rb +71 -0
  287. data/test/soap/test_nil.rb +71 -0
  288. data/test/soap/test_no_indent.rb +89 -0
  289. data/test/soap/test_property.rb +429 -0
  290. data/test/soap/test_response_as_xml.rb +118 -0
  291. data/test/soap/test_soapelement.rb +139 -0
  292. data/test/soap/test_streamhandler.rb +271 -0
  293. data/test/soap/test_styleuse.rb +327 -0
  294. data/test/soap/wsdlDriver/README.txt +2 -0
  295. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  296. data/test/soap/wsdlDriver/document.wsdl +54 -0
  297. data/test/soap/wsdlDriver/echo_version.rb +30 -0
  298. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  299. data/test/soap/wsdlDriver/test_calc.rb +72 -0
  300. data/test/soap/wsdlDriver/test_document.rb +72 -0
  301. data/test/soap/wsdlDriver/test_simpletype.rb +82 -0
  302. data/test/testutil.rb +55 -0
  303. data/test/wsdl/abstract/abstract.wsdl +176 -0
  304. data/test/wsdl/abstract/test_abstract.rb +160 -0
  305. data/test/wsdl/anonymous/expectedClassDef.rb +129 -0
  306. data/test/wsdl/anonymous/expectedDriver.rb +60 -0
  307. data/test/wsdl/anonymous/expectedMappingRegistry.rb +177 -0
  308. data/test/wsdl/anonymous/lp.wsdl +147 -0
  309. data/test/wsdl/anonymous/test_anonymous.rb +131 -0
  310. data/test/wsdl/any/any.wsdl +114 -0
  311. data/test/wsdl/any/expectedDriver.rb +69 -0
  312. data/test/wsdl/any/expectedEcho.rb +58 -0
  313. data/test/wsdl/any/expectedMappingRegistry.rb +64 -0
  314. data/test/wsdl/any/expectedService.rb +70 -0
  315. data/test/wsdl/any/test_any.rb +194 -0
  316. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  317. data/test/wsdl/axisArray/test_axisarray.rb +125 -0
  318. data/test/wsdl/choice/choice.wsdl +167 -0
  319. data/test/wsdl/choice/test_choice.rb +311 -0
  320. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  321. data/test/wsdl/complexcontent/test_echo.rb +91 -0
  322. data/test/wsdl/datetime/DatetimeService.rb +45 -0
  323. data/test/wsdl/datetime/datetime.rb +0 -0
  324. data/test/wsdl/datetime/datetime.wsdl +45 -0
  325. data/test/wsdl/datetime/datetimeServant.rb +23 -0
  326. data/test/wsdl/datetime/test_datetime.rb +88 -0
  327. data/test/wsdl/document/array/double.wsdl +161 -0
  328. data/test/wsdl/document/array/test_array.rb +202 -0
  329. data/test/wsdl/document/document.wsdl +76 -0
  330. data/test/wsdl/document/number.wsdl +54 -0
  331. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  332. data/test/wsdl/document/test_nosoapaction.rb +103 -0
  333. data/test/wsdl/document/test_number.rb +93 -0
  334. data/test/wsdl/document/test_rpc.rb +356 -0
  335. data/test/wsdl/emptycomplextype.wsdl +31 -0
  336. data/test/wsdl/fault/fault.wsdl +79 -0
  337. data/test/wsdl/fault/multifault.wsdl +96 -0
  338. data/test/wsdl/fault/test_fault.rb +120 -0
  339. data/test/wsdl/fault/test_multifault.rb +135 -0
  340. data/test/wsdl/group/expectedClassdef.rb +59 -0
  341. data/test/wsdl/group/expectedDriver.rb +52 -0
  342. data/test/wsdl/group/expectedMappingRegistry.rb +68 -0
  343. data/test/wsdl/group/group.wsdl +88 -0
  344. data/test/wsdl/group/test_rpc.rb +146 -0
  345. data/test/wsdl/list/list.wsdl +93 -0
  346. data/test/wsdl/list/test_list.rb +125 -0
  347. data/test/wsdl/map/map.wsdl +92 -0
  348. data/test/wsdl/map/map.xml +43 -0
  349. data/test/wsdl/map/test_map.rb +100 -0
  350. data/test/wsdl/marshal/person.wsdl +21 -0
  351. data/test/wsdl/marshal/person_org.rb +24 -0
  352. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  353. data/test/wsdl/multiplefault.wsdl +75 -0
  354. data/test/wsdl/oneway/oneway.wsdl +36 -0
  355. data/test/wsdl/oneway/test_oneway.rb +109 -0
  356. data/test/wsdl/overload/expectedClient.rb +38 -0
  357. data/test/wsdl/overload/expectedDriver.rb +62 -0
  358. data/test/wsdl/overload/expectedServant.rb +36 -0
  359. data/test/wsdl/overload/overload.wsdl +70 -0
  360. data/test/wsdl/overload/test_overload.rb +132 -0
  361. data/test/wsdl/qualified/lp.wsdl +47 -0
  362. data/test/wsdl/qualified/lp.xsd +26 -0
  363. data/test/wsdl/qualified/np.wsdl +51 -0
  364. data/test/wsdl/qualified/test_qualified.rb +138 -0
  365. data/test/wsdl/qualified/test_unqualified.rb +139 -0
  366. data/test/wsdl/raa/RAAService.rb +126 -0
  367. data/test/wsdl/raa/README.txt +8 -0
  368. data/test/wsdl/raa/expectedClassDef.rb +101 -0
  369. data/test/wsdl/raa/expectedDriver.rb +97 -0
  370. data/test/wsdl/raa/expectedMappingRegistry.rb +122 -0
  371. data/test/wsdl/raa/raa.wsdl +264 -0
  372. data/test/wsdl/raa/test_raa.rb +127 -0
  373. data/test/wsdl/ref/expectedDriver.rb +52 -0
  374. data/test/wsdl/ref/expectedProduct.rb +244 -0
  375. data/test/wsdl/ref/product.wsdl +147 -0
  376. data/test/wsdl/ref/test_ref.rb +269 -0
  377. data/test/wsdl/rpc/rpc.wsdl +109 -0
  378. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  379. data/test/wsdl/rpc/test_rpc.rb +177 -0
  380. data/test/wsdl/rpc/test_rpc_lit.rb +471 -0
  381. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  382. data/test/wsdl/simplecontent/test_simplecontent.rb +103 -0
  383. data/test/wsdl/simpletype/rpc/expectedClient.rb +35 -0
  384. data/test/wsdl/simpletype/rpc/expectedDriver.rb +59 -0
  385. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +37 -0
  386. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +58 -0
  387. data/test/wsdl/simpletype/rpc/expectedServant.rb +33 -0
  388. data/test/wsdl/simpletype/rpc/expectedService.rb +56 -0
  389. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  390. data/test/wsdl/simpletype/rpc/test_rpc.rb +53 -0
  391. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  392. data/test/wsdl/simpletype/test_simpletype.rb +93 -0
  393. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  394. data/test/wsdl/soap/test_soapbodyparts.rb +80 -0
  395. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +22 -0
  396. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +35 -0
  397. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +59 -0
  398. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +37 -0
  399. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +33 -0
  400. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +49 -0
  401. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +56 -0
  402. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  403. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +38 -0
  404. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  405. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  406. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  407. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +84 -0
  408. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +103 -0
  409. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  410. data/test/wsdl/soaptype/test_soaptype.rb +179 -0
  411. data/test/wsdl/test_emptycomplextype.rb +22 -0
  412. data/test/wsdl/test_fault.rb +51 -0
  413. data/test/wsdl/test_multiplefault.rb +42 -0
  414. data/test/xsd/codegen/test_classdef.rb +245 -0
  415. data/test/xsd/noencoding.xml +4 -0
  416. data/test/xsd/test_noencoding.rb +33 -0
  417. data/test/xsd/test_ns.rb +42 -0
  418. data/test/xsd/test_xmlschemaparser.rb +23 -0
  419. data/test/xsd/test_xsd.rb +1639 -0
  420. data/test/xsd/xmllang.xml +43 -0
  421. data/test/xsd/xmlschema.xml +12 -0
  422. data/test/xsd/xsd2ruby/expected_mysample.rb +66 -0
  423. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +12 -0
  424. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +52 -0
  425. data/test/xsd/xsd2ruby/section.xsd +49 -0
  426. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +91 -0
  427. metadata +485 -0
data/bin/wsdl2ruby.rb ADDED
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: ASCII-8BIT
3
+ $:.unshift File.join(File.dirname(__FILE__),'../lib') if ENV['DEBUG_SOAP4R']
4
+
5
+ require 'getoptlong'
6
+ require 'logger'
7
+ require 'wsdl/soap/wsdl2ruby'
8
+
9
+
10
+ class WSDL2RubyApp < Logger::Application
11
+ private
12
+
13
+ OptSet = [
14
+ ['--wsdl','-w', GetoptLong::REQUIRED_ARGUMENT],
15
+ ['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT],
16
+ ['--type','-t', GetoptLong::REQUIRED_ARGUMENT],
17
+ ['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT],
18
+ ['--mapping_registry','-r', GetoptLong::NO_ARGUMENT],
19
+ ['--client_skelton','-c', GetoptLong::OPTIONAL_ARGUMENT],
20
+ ['--servant_skelton','-s', GetoptLong::OPTIONAL_ARGUMENT],
21
+ ['--cgi_stub','-g', GetoptLong::OPTIONAL_ARGUMENT],
22
+ ['--servlet_stub','-l', GetoptLong::OPTIONAL_ARGUMENT],
23
+ ['--standalone_server_stub','-a', GetoptLong::OPTIONAL_ARGUMENT],
24
+ ['--driver','-d', GetoptLong::OPTIONAL_ARGUMENT],
25
+ ['--drivername_postfix','-n', GetoptLong::REQUIRED_ARGUMENT],
26
+ ['--force','-f', GetoptLong::NO_ARGUMENT],
27
+ ['--quiet','-q', GetoptLong::NO_ARGUMENT],
28
+ ]
29
+
30
+ def initialize
31
+ super('app')
32
+ STDERR.sync = true
33
+ self.level = Logger::FATAL
34
+ end
35
+
36
+ def run
37
+ @worker = WSDL::SOAP::WSDL2Ruby.new
38
+ @worker.logger = @log
39
+ location, opt = parse_opt(GetoptLong.new(*OptSet))
40
+ usage_exit unless location
41
+ @worker.location = location
42
+ if opt['quiet']
43
+ self.level = Logger::FATAL
44
+ else
45
+ self.level = Logger::INFO
46
+ end
47
+ @worker.opt.update(opt)
48
+ @worker.run
49
+ 0
50
+ end
51
+
52
+ def usage_exit
53
+ puts <<__EOU__
54
+ Usage: #{ $0 } --wsdl wsdl_location [options]
55
+ wsdl_location: filename or URL
56
+
57
+ Example:
58
+ For server side:
59
+ #{ $0 } --wsdl myapp.wsdl --type server
60
+ For client side:
61
+ #{ $0 } --wsdl myapp.wsdl --type client
62
+
63
+ Options:
64
+ --wsdl wsdl_location
65
+ --type server|client
66
+ --type server implies;
67
+ --classdef --mapping_registry --servant_skelton --standalone_server_stub
68
+ --type client implies;
69
+ --classdef --mapping_registry --client_skelton --driver
70
+ --classdef [filenameprefix]
71
+ --mapping_registry
72
+ --client_skelton [servicename]
73
+ --servant_skelton [porttypename]
74
+ --cgi_stub [servicename]
75
+ --servlet_stub [servicename]
76
+ --standalone_server_stub [servicename]
77
+ --driver [porttypename]
78
+ --drivername_postfix driver_classname_postfix
79
+ --module_path Module::Path::Name
80
+ --force
81
+ --quiet
82
+
83
+ Terminology:
84
+ Client <-> Driver <-(SOAP)-> Stub <-> Servant
85
+
86
+ Driver and Stub: Automatically generated
87
+ Client and Servant: Skelton generated (you should change)
88
+ __EOU__
89
+ exit 1
90
+ end
91
+
92
+ def parse_opt(getoptlong)
93
+ opt = {}
94
+ wsdl = nil
95
+ begin
96
+ getoptlong.each do |name, arg|
97
+ case name
98
+ when "--wsdl"
99
+ wsdl = arg
100
+ when "--module_path"
101
+ opt['module_path'] = arg
102
+ when "--type"
103
+ case arg
104
+ when "server"
105
+ opt['classdef'] ||= nil
106
+ opt['mapping_registry'] ||= nil
107
+ opt['servant_skelton'] ||= nil
108
+ opt['standalone_server_stub'] ||= nil
109
+ when "client"
110
+ opt['classdef'] ||= nil
111
+ opt['mapping_registry'] ||= nil
112
+ opt['driver'] ||= nil
113
+ opt['client_skelton'] ||= nil
114
+ else
115
+ raise ArgumentError.new("Unknown type #{ arg }")
116
+ end
117
+ when "--classdef", "--mapping_registry",
118
+ "--client_skelton", "--servant_skelton",
119
+ "--cgi_stub", "--servlet_stub", "--standalone_server_stub",
120
+ "--driver"
121
+ opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg
122
+ when "--drivername_postfix"
123
+ opt['drivername_postfix'] = arg
124
+ when "--force"
125
+ opt['force'] = true
126
+ when "--quiet"
127
+ opt['quiet'] = true
128
+ else
129
+ raise ArgumentError.new("Unknown type #{ arg }")
130
+ end
131
+ end
132
+ rescue
133
+ usage_exit
134
+ end
135
+ return wsdl, opt
136
+ end
137
+ end
138
+
139
+ WSDL2RubyApp.new.start
data/bin/xsd2ruby.rb ADDED
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: ASCII-8BIT
3
+ $:.unshift File.join(File.dirname(__FILE__),'../lib') if ENV['DEBUG_SOAP4R']
4
+
5
+ require 'getoptlong'
6
+ require 'logger'
7
+ require 'wsdl/xmlSchema/xsd2ruby'
8
+
9
+ class XSD2RubyApp < Logger::Application
10
+ private
11
+
12
+ OptSet = [
13
+ ['--xsd','-x', GetoptLong::REQUIRED_ARGUMENT],
14
+ ['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT],
15
+ ['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT],
16
+ ['--mapping_registry','-r', GetoptLong::NO_ARGUMENT],
17
+ ['--mapper','-p', GetoptLong::NO_ARGUMENT],
18
+ ['--force','-f', GetoptLong::NO_ARGUMENT],
19
+ ['--quiet','-q', GetoptLong::NO_ARGUMENT],
20
+ ]
21
+
22
+ def initialize
23
+ super('app')
24
+ STDERR.sync = true
25
+ self.level = Logger::FATAL
26
+ end
27
+
28
+ def run
29
+ @worker = WSDL::XMLSchema::XSD2Ruby.new
30
+ @worker.logger = @log
31
+ location, opt = parse_opt(GetoptLong.new(*OptSet))
32
+ usage_exit unless location
33
+ @worker.location = location
34
+ if opt['quiet']
35
+ self.level = Logger::FATAL
36
+ else
37
+ self.level = Logger::INFO
38
+ end
39
+ @worker.opt.update(opt)
40
+ @worker.run
41
+ 0
42
+ end
43
+
44
+ def usage_exit
45
+ puts <<__EOU__
46
+ Usage: #{ $0 } --xsd xsd_location [options]
47
+ xsd_location: filename or URL
48
+
49
+ Example:
50
+ #{ $0 } --xsd myapp.xsd --classdef foo
51
+
52
+ Options:
53
+ --xsd xsd_location
54
+ --classdef [filenameprefix]
55
+ --mapping_registry
56
+ --mapper
57
+ --module_path [Module::Path::Name]
58
+ --force
59
+ --quiet
60
+ __EOU__
61
+ exit 1
62
+ end
63
+
64
+ def parse_opt(getoptlong)
65
+ opt = {}
66
+ xsd = nil
67
+ begin
68
+ getoptlong.each do |name, arg|
69
+ case name
70
+ when "--xsd"
71
+ xsd = arg
72
+ when "--module_path"
73
+ opt['module_path'] = arg
74
+ when "--classdef", "--mapping_registry", "--mapper"
75
+ opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg
76
+ when "--force"
77
+ opt['force'] = true
78
+ when "--quiet"
79
+ opt['quiet'] = true
80
+ else
81
+ raise ArgumentError.new("Unknown type #{ arg }")
82
+ end
83
+ end
84
+ rescue
85
+ usage_exit
86
+ end
87
+ return xsd, opt
88
+ end
89
+ end
90
+
91
+ XSD2RubyApp.new.start
@@ -0,0 +1,109 @@
1
+ # encoding: ASCII-8BIT
2
+ # soap/attachment.rb: SOAP4R - SwA implementation.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/baseData'
11
+ require 'soap/mapping'
12
+
13
+
14
+ module SOAP
15
+
16
+
17
+ class SOAPAttachment < SOAPExternalReference
18
+ attr_reader :data
19
+
20
+ def initialize(value)
21
+ super()
22
+ @data = value
23
+ end
24
+
25
+ private
26
+
27
+ def external_contentid
28
+ @data.contentid
29
+ end
30
+ end
31
+
32
+
33
+ class Attachment
34
+ attr_reader :io
35
+ attr_accessor :contenttype
36
+
37
+ def initialize(string_or_readable = nil)
38
+ @string_or_readable = string_or_readable
39
+ @contenttype = "application/octet-stream"
40
+ @contentid = nil
41
+ @content = nil
42
+ end
43
+
44
+ def contentid
45
+ @contentid ||= Attachment.contentid(self)
46
+ end
47
+
48
+ def contentid=(contentid)
49
+ @contentid = contentid
50
+ end
51
+
52
+ def mime_contentid
53
+ '<' + contentid + '>'
54
+ end
55
+
56
+ def content
57
+ if @content == nil and @string_or_readable != nil
58
+ @content = @string_or_readable.respond_to?(:read) ?
59
+ @string_or_readable.read : @string_or_readable
60
+ end
61
+ @content
62
+ end
63
+
64
+ def to_s
65
+ content
66
+ end
67
+
68
+ def write(out)
69
+ out.write(content)
70
+ end
71
+
72
+ def save(filename)
73
+ File.open(filename, "wb") do |f|
74
+ write(f)
75
+ end
76
+ end
77
+
78
+ def self.contentid(obj)
79
+ # this needs to be fixed
80
+ [obj.__id__.to_s, Process.pid.to_s].join('.')
81
+ end
82
+
83
+ def self.mime_contentid(obj)
84
+ '<' + contentid(obj) + '>'
85
+ end
86
+ end
87
+
88
+
89
+ module Mapping
90
+ class AttachmentFactory < SOAP::Mapping::Factory
91
+ def obj2soap(soap_class, obj, info, map)
92
+ soap_obj = soap_class.new(obj)
93
+ mark_marshalled_obj(obj, soap_obj)
94
+ soap_obj
95
+ end
96
+
97
+ def soap2obj(obj_class, node, info, map)
98
+ obj = node.data
99
+ mark_unmarshalled_obj(node, obj)
100
+ return true, obj
101
+ end
102
+ end
103
+
104
+ DefaultRegistry.add(::SOAP::Attachment, ::SOAP::SOAPAttachment,
105
+ AttachmentFactory.new, nil)
106
+ end
107
+
108
+
109
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - attribute proxy interface.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ module SOAP
11
+
12
+
13
+ module AttrProxy
14
+ def self.included(klass)
15
+ klass.extend(AttrProxyClassSupport)
16
+ end
17
+
18
+ module AttrProxyClassSupport
19
+ def attr_proxy(symbol, assignable = false)
20
+ name = symbol.to_s
21
+ define_method(name) {
22
+ attrproxy.__send__(name)
23
+ }
24
+ if assignable
25
+ aname = name + '='
26
+ define_method(aname) { |rhs|
27
+ attrproxy.__send__(aname, rhs)
28
+ }
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+
35
+ end
@@ -0,0 +1,1095 @@
1
+ # encoding: ASCII-8BIT
2
+ # soap/baseData.rb: SOAP4R - Base type library
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/datatypes'
11
+ require 'soap/soap'
12
+ require 'xsd/codegen/gensupport'
13
+ require 'soap/mapping/mapping'
14
+
15
+
16
+ module SOAP
17
+
18
+
19
+ ###
20
+ ## Mix-in module for SOAP base type classes.
21
+ #
22
+ module SOAPModuleUtils
23
+ include SOAP
24
+
25
+ public
26
+
27
+ def decode(elename)
28
+ d = self.new
29
+ d.elename = elename
30
+ d
31
+ end
32
+
33
+ def to_data(str)
34
+ new(str).data
35
+ end
36
+ end
37
+
38
+
39
+ ###
40
+ ## for SOAP type(base and compound)
41
+ #
42
+ module SOAPType
43
+ attr_accessor :encodingstyle
44
+ attr_accessor :elename
45
+ attr_accessor :id
46
+ attr_reader :precedents
47
+ attr_accessor :root
48
+ attr_accessor :parent
49
+ attr_accessor :position
50
+ attr_reader :extraattr
51
+ attr_accessor :definedtype
52
+ attr_accessor :force_typed
53
+
54
+ def initialize(*arg)
55
+ super
56
+ @encodingstyle = nil
57
+ @elename = XSD::QName::EMPTY
58
+ @id = nil
59
+ @precedents = []
60
+ @root = false
61
+ @parent = nil
62
+ @position = nil
63
+ @definedtype = nil
64
+ @extraattr = {}
65
+ @force_typed = false
66
+ end
67
+
68
+ def inspect
69
+ if self.is_a?(XSD::NSDBase)
70
+ sprintf("#<%s:0x%x %s %s>", self.class.name, __id__, self.elename, self.type)
71
+ else
72
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename)
73
+ end
74
+ end
75
+
76
+ def rootnode
77
+ node = self
78
+ while node = node.parent
79
+ break if SOAPEnvelope === node
80
+ end
81
+ node
82
+ end
83
+ end
84
+
85
+
86
+ ###
87
+ ## for SOAP base type
88
+ #
89
+ module SOAPBasetype
90
+ include SOAPType
91
+ include SOAP
92
+
93
+ attr_accessor :qualified
94
+
95
+ def initialize(*arg)
96
+ super
97
+ @qualified = nil
98
+ end
99
+ end
100
+
101
+
102
+ ###
103
+ ## for SOAP compound type
104
+ #
105
+ module SOAPCompoundtype
106
+ include SOAPType
107
+ include SOAP
108
+
109
+ attr_accessor :qualified
110
+
111
+ def initialize(*arg)
112
+ super
113
+ @qualified = nil
114
+ end
115
+ end
116
+
117
+ # marker for compound types which have named accessor
118
+ module SOAPNameAccessible
119
+ end
120
+
121
+
122
+ ###
123
+ ## Convenience datatypes.
124
+ #
125
+ class SOAPReference < XSD::NSDBase
126
+ include SOAPBasetype
127
+ extend SOAPModuleUtils
128
+
129
+ public
130
+
131
+ attr_accessor :refid
132
+
133
+ # Override the definition in SOAPBasetype.
134
+ def initialize(obj = nil)
135
+ super()
136
+ @type = XSD::QName::EMPTY
137
+ @refid = nil
138
+ @obj = nil
139
+ __setobj__(obj) if obj
140
+ end
141
+
142
+ def __getobj__
143
+ @obj
144
+ end
145
+
146
+ def __setobj__(obj)
147
+ @obj = obj
148
+ @refid = @obj.id || SOAPReference.create_refid(@obj)
149
+ @obj.id = @refid unless @obj.id
150
+ @obj.precedents << self
151
+ # Copies NSDBase information
152
+ @obj.type = @type unless @obj.type
153
+ end
154
+
155
+ # Why don't I use delegate.rb?
156
+ # -> delegate requires target object type at initialize time.
157
+ # Why don't I use forwardable.rb?
158
+ # -> forwardable requires a list of forwarding methods.
159
+ #
160
+ # ToDo: Maybe I should use forwardable.rb and give it a methods list like
161
+ # delegate.rb...
162
+ #
163
+ def method_missing(msg_id, *params)
164
+ if @obj
165
+ @obj.send(msg_id, *params)
166
+ else
167
+ nil
168
+ end
169
+ end
170
+
171
+ # for referenced base type such as a long value from Axis.
172
+ # base2obj requires a node to respond to :data
173
+ def data
174
+ if @obj.respond_to?(:data)
175
+ @obj.data
176
+ end
177
+ end
178
+
179
+ def refidstr
180
+ '#' + @refid
181
+ end
182
+
183
+ def self.create_refid(obj)
184
+ 'id' + obj.__id__.to_s
185
+ end
186
+
187
+ def self.decode(elename, refidstr)
188
+ if /\A#(.*)\z/ =~ refidstr
189
+ refid = $1
190
+ elsif /\Acid:(.*)\z/ =~ refidstr
191
+ refid = $1
192
+ else
193
+ raise ArgumentError.new("illegal refid #{refidstr}")
194
+ end
195
+ d = super(elename)
196
+ d.refid = refid
197
+ d
198
+ end
199
+ end
200
+
201
+
202
+ class SOAPExternalReference < XSD::NSDBase
203
+ include SOAPBasetype
204
+ extend SOAPModuleUtils
205
+
206
+ def initialize
207
+ super()
208
+ @type = XSD::QName::EMPTY
209
+ end
210
+
211
+ def referred
212
+ rootnode.external_content[external_contentid] = self
213
+ end
214
+
215
+ def refidstr
216
+ 'cid:' + external_contentid
217
+ end
218
+
219
+ private
220
+
221
+ def external_contentid
222
+ raise NotImplementedError.new
223
+ end
224
+ end
225
+
226
+
227
+ class SOAPNil < XSD::XSDNil
228
+ include SOAPBasetype
229
+ extend SOAPModuleUtils
230
+
231
+ public
232
+
233
+ def initialize(value = nil)
234
+ super(value)
235
+ @extraattr[XSD::AttrNilName] = 'true'
236
+ end
237
+ end
238
+
239
+ # SOAPRawString is for sending raw string. In contrast to SOAPString,
240
+ # SOAP4R does not do XML encoding and does not convert its CES. The string it
241
+ # holds is embedded to XML instance directly as a 'xsd:string'.
242
+ class SOAPRawString < XSD::XSDString
243
+ include SOAPBasetype
244
+ extend SOAPModuleUtils
245
+ end
246
+
247
+
248
+ ###
249
+ ## Basic datatypes.
250
+ #
251
+ class SOAPAnySimpleType < XSD::XSDAnySimpleType
252
+ include SOAPBasetype
253
+ extend SOAPModuleUtils
254
+ end
255
+
256
+ class SOAPString < XSD::XSDString
257
+ include SOAPBasetype
258
+ extend SOAPModuleUtils
259
+ SOAPENCType = QName.new(EncodingNamespace, StringLiteral)
260
+ end
261
+
262
+ class SOAPNormalizedString < XSD::XSDNormalizedString
263
+ include SOAPBasetype
264
+ extend SOAPModuleUtils
265
+ SOAPENCType = QName.new(EncodingNamespace, NormalizedStringLiteral)
266
+ end
267
+
268
+ class SOAPToken < XSD::XSDToken
269
+ include SOAPBasetype
270
+ extend SOAPModuleUtils
271
+ SOAPENCType = QName.new(EncodingNamespace, TokenLiteral)
272
+ end
273
+
274
+ class SOAPLanguage < XSD::XSDLanguage
275
+ include SOAPBasetype
276
+ extend SOAPModuleUtils
277
+ SOAPENCType = QName.new(EncodingNamespace, LanguageLiteral)
278
+ end
279
+
280
+ class SOAPNMTOKEN < XSD::XSDNMTOKEN
281
+ include SOAPBasetype
282
+ extend SOAPModuleUtils
283
+ SOAPENCType = QName.new(EncodingNamespace, NMTOKENLiteral)
284
+ end
285
+
286
+ class SOAPNMTOKENS < XSD::XSDNMTOKENS
287
+ include SOAPBasetype
288
+ extend SOAPModuleUtils
289
+ SOAPENCType = QName.new(EncodingNamespace, NMTOKENSLiteral)
290
+ end
291
+
292
+ class SOAPName < XSD::XSDName
293
+ include SOAPBasetype
294
+ extend SOAPModuleUtils
295
+ SOAPENCType = QName.new(EncodingNamespace, NameLiteral)
296
+ end
297
+
298
+ class SOAPNCName < XSD::XSDNCName
299
+ include SOAPBasetype
300
+ extend SOAPModuleUtils
301
+ SOAPENCType = QName.new(EncodingNamespace, NCNameLiteral)
302
+ end
303
+
304
+ class SOAPID < XSD::XSDID
305
+ include SOAPBasetype
306
+ extend SOAPModuleUtils
307
+ SOAPENCType = QName.new(EncodingNamespace, IDLiteral)
308
+ end
309
+
310
+ class SOAPIDREF < XSD::XSDIDREF
311
+ include SOAPBasetype
312
+ extend SOAPModuleUtils
313
+ SOAPENCType = QName.new(EncodingNamespace, IDREFLiteral)
314
+ end
315
+
316
+ class SOAPIDREFS < XSD::XSDIDREFS
317
+ include SOAPBasetype
318
+ extend SOAPModuleUtils
319
+ SOAPENCType = QName.new(EncodingNamespace, IDREFSLiteral)
320
+ end
321
+
322
+ class SOAPENTITY < XSD::XSDENTITY
323
+ include SOAPBasetype
324
+ extend SOAPModuleUtils
325
+ SOAPENCType = QName.new(EncodingNamespace, ENTITYLiteral)
326
+ end
327
+
328
+ class SOAPENTITIES < XSD::XSDENTITIES
329
+ include SOAPBasetype
330
+ extend SOAPModuleUtils
331
+ SOAPENCType = QName.new(EncodingNamespace, ENTITIESLiteral)
332
+ end
333
+
334
+ class SOAPBoolean < XSD::XSDBoolean
335
+ include SOAPBasetype
336
+ extend SOAPModuleUtils
337
+ SOAPENCType = QName.new(EncodingNamespace, BooleanLiteral)
338
+ end
339
+
340
+ class SOAPDecimal < XSD::XSDDecimal
341
+ include SOAPBasetype
342
+ extend SOAPModuleUtils
343
+ SOAPENCType = QName.new(EncodingNamespace, DecimalLiteral)
344
+ end
345
+
346
+ class SOAPFloat < XSD::XSDFloat
347
+ include SOAPBasetype
348
+ extend SOAPModuleUtils
349
+ SOAPENCType = QName.new(EncodingNamespace, FloatLiteral)
350
+ end
351
+
352
+ class SOAPDouble < XSD::XSDDouble
353
+ include SOAPBasetype
354
+ extend SOAPModuleUtils
355
+ SOAPENCType = QName.new(EncodingNamespace, DoubleLiteral)
356
+ end
357
+
358
+ class SOAPDuration < XSD::XSDDuration
359
+ include SOAPBasetype
360
+ extend SOAPModuleUtils
361
+ SOAPENCType = QName.new(EncodingNamespace, DurationLiteral)
362
+ end
363
+
364
+ class SOAPDateTime < XSD::XSDDateTime
365
+ include SOAPBasetype
366
+ extend SOAPModuleUtils
367
+ SOAPENCType = QName.new(EncodingNamespace, DateTimeLiteral)
368
+ end
369
+
370
+ class SOAPTime < XSD::XSDTime
371
+ include SOAPBasetype
372
+ extend SOAPModuleUtils
373
+ SOAPENCType = QName.new(EncodingNamespace, TimeLiteral)
374
+ end
375
+
376
+ class SOAPDate < XSD::XSDDate
377
+ include SOAPBasetype
378
+ extend SOAPModuleUtils
379
+ SOAPENCType = QName.new(EncodingNamespace, DateLiteral)
380
+ end
381
+
382
+ class SOAPGYearMonth < XSD::XSDGYearMonth
383
+ include SOAPBasetype
384
+ extend SOAPModuleUtils
385
+ SOAPENCType = QName.new(EncodingNamespace, GYearMonthLiteral)
386
+ end
387
+
388
+ class SOAPGYear < XSD::XSDGYear
389
+ include SOAPBasetype
390
+ extend SOAPModuleUtils
391
+ SOAPENCType = QName.new(EncodingNamespace, GYearLiteral)
392
+ end
393
+
394
+ class SOAPGMonthDay < XSD::XSDGMonthDay
395
+ include SOAPBasetype
396
+ extend SOAPModuleUtils
397
+ SOAPENCType = QName.new(EncodingNamespace, GMonthDayLiteral)
398
+ end
399
+
400
+ class SOAPGDay < XSD::XSDGDay
401
+ include SOAPBasetype
402
+ extend SOAPModuleUtils
403
+ SOAPENCType = QName.new(EncodingNamespace, GDayLiteral)
404
+ end
405
+
406
+ class SOAPGMonth < XSD::XSDGMonth
407
+ include SOAPBasetype
408
+ extend SOAPModuleUtils
409
+ SOAPENCType = QName.new(EncodingNamespace, GMonthLiteral)
410
+ end
411
+
412
+ class SOAPHexBinary < XSD::XSDHexBinary
413
+ include SOAPBasetype
414
+ extend SOAPModuleUtils
415
+ SOAPENCType = QName.new(EncodingNamespace, HexBinaryLiteral)
416
+ end
417
+
418
+ class SOAPBase64 < XSD::XSDBase64Binary
419
+ include SOAPBasetype
420
+ extend SOAPModuleUtils
421
+ Type = SOAPENCType = QName.new(EncodingNamespace, Base64Literal)
422
+
423
+ public
424
+
425
+ def initialize(value = nil)
426
+ super(value)
427
+ @type = Type
428
+ end
429
+
430
+ def as_xsd
431
+ @type = XSD::XSDBase64Binary::Type
432
+ end
433
+ end
434
+
435
+ class SOAPAnyURI < XSD::XSDAnyURI
436
+ include SOAPBasetype
437
+ extend SOAPModuleUtils
438
+ SOAPENCType = QName.new(EncodingNamespace, AnyURILiteral)
439
+ end
440
+
441
+ class SOAPQName < XSD::XSDQName
442
+ include SOAPBasetype
443
+ extend SOAPModuleUtils
444
+ SOAPENCType = QName.new(EncodingNamespace, QNameLiteral)
445
+ end
446
+
447
+
448
+ class SOAPInteger < XSD::XSDInteger
449
+ include SOAPBasetype
450
+ extend SOAPModuleUtils
451
+ SOAPENCType = QName.new(EncodingNamespace, IntegerLiteral)
452
+ end
453
+
454
+ class SOAPNonPositiveInteger < XSD::XSDNonPositiveInteger
455
+ include SOAPBasetype
456
+ extend SOAPModuleUtils
457
+ SOAPENCType = QName.new(EncodingNamespace, NonPositiveIntegerLiteral)
458
+ end
459
+
460
+ class SOAPNegativeInteger < XSD::XSDNegativeInteger
461
+ include SOAPBasetype
462
+ extend SOAPModuleUtils
463
+ SOAPENCType = QName.new(EncodingNamespace, NegativeIntegerLiteral)
464
+ end
465
+
466
+ class SOAPLong < XSD::XSDLong
467
+ include SOAPBasetype
468
+ extend SOAPModuleUtils
469
+ SOAPENCType = QName.new(EncodingNamespace, LongLiteral)
470
+ end
471
+
472
+ class SOAPInt < XSD::XSDInt
473
+ include SOAPBasetype
474
+ extend SOAPModuleUtils
475
+ SOAPENCType = QName.new(EncodingNamespace, IntLiteral)
476
+ end
477
+
478
+ class SOAPShort < XSD::XSDShort
479
+ include SOAPBasetype
480
+ extend SOAPModuleUtils
481
+ SOAPENCType = QName.new(EncodingNamespace, ShortLiteral)
482
+ end
483
+
484
+ class SOAPByte < XSD::XSDByte
485
+ include SOAPBasetype
486
+ extend SOAPModuleUtils
487
+ SOAPENCType = QName.new(EncodingNamespace, ByteLiteral)
488
+ end
489
+
490
+ class SOAPNonNegativeInteger < XSD::XSDNonNegativeInteger
491
+ include SOAPBasetype
492
+ extend SOAPModuleUtils
493
+ SOAPENCType = QName.new(EncodingNamespace, NonNegativeIntegerLiteral)
494
+ end
495
+
496
+ class SOAPUnsignedLong < XSD::XSDUnsignedLong
497
+ include SOAPBasetype
498
+ extend SOAPModuleUtils
499
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedLongLiteral)
500
+ end
501
+
502
+ class SOAPUnsignedInt < XSD::XSDUnsignedInt
503
+ include SOAPBasetype
504
+ extend SOAPModuleUtils
505
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedIntLiteral)
506
+ end
507
+
508
+ class SOAPUnsignedShort < XSD::XSDUnsignedShort
509
+ include SOAPBasetype
510
+ extend SOAPModuleUtils
511
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedShortLiteral)
512
+ end
513
+
514
+ class SOAPUnsignedByte < XSD::XSDUnsignedByte
515
+ include SOAPBasetype
516
+ extend SOAPModuleUtils
517
+ SOAPENCType = QName.new(EncodingNamespace, UnsignedByteLiteral)
518
+ end
519
+
520
+ class SOAPPositiveInteger < XSD::XSDPositiveInteger
521
+ include SOAPBasetype
522
+ extend SOAPModuleUtils
523
+ SOAPENCType = QName.new(EncodingNamespace, PositiveIntegerLiteral)
524
+ end
525
+
526
+
527
+ ###
528
+ ## Compound datatypes.
529
+ #
530
+ class SOAPStruct < XSD::NSDBase
531
+ include Enumerable
532
+ include SOAPCompoundtype
533
+ include SOAPNameAccessible
534
+
535
+ public
536
+
537
+ def initialize(type = nil)
538
+ super()
539
+ @type = type || XSD::QName::EMPTY
540
+ @array = []
541
+ @data = []
542
+ end
543
+
544
+ def to_s
545
+ str = ''
546
+ self.each do |key, data|
547
+ str << "#{key}: #{data}\n"
548
+ end
549
+ str
550
+ end
551
+
552
+ def add(name, value)
553
+ value = SOAPNil.new if value.nil?
554
+ @array.push(name)
555
+ value.elename = value.elename.dup_name(name)
556
+ @data.push(value)
557
+ value.parent = self if value.respond_to?(:parent=)
558
+ value
559
+ end
560
+
561
+ def [](idx)
562
+ if idx.is_a?(Range)
563
+ @data[idx]
564
+ elsif idx.is_a?(Integer)
565
+ if (idx > @array.size)
566
+ raise ArrayIndexOutOfBoundsError.new('In ' << @type.name)
567
+ end
568
+ @data[idx]
569
+ else
570
+ if @array.include?(idx)
571
+ @data[@array.index(idx)]
572
+ else
573
+ nil
574
+ end
575
+ end
576
+ end
577
+
578
+ def []=(idx, data)
579
+ if @array.include?(idx)
580
+ data.parent = self if data.respond_to?(:parent=)
581
+ @data[@array.index(idx)] = data
582
+ else
583
+ add(idx, data)
584
+ end
585
+ end
586
+
587
+ def key?(name)
588
+ @array.include?(name)
589
+ end
590
+
591
+ def members
592
+ @array
593
+ end
594
+
595
+ def have_member
596
+ !@array.empty?
597
+ end
598
+
599
+ def to_obj
600
+ hash = {}
601
+ proptype = {}
602
+ each do |k, v|
603
+ value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
604
+ case proptype[k]
605
+ when :single
606
+ hash[k] = [hash[k], value]
607
+ proptype[k] = :multi
608
+ when :multi
609
+ hash[k] << value
610
+ else
611
+ hash[k] = value
612
+ proptype[k] = :single
613
+ end
614
+ end
615
+ hash
616
+ end
617
+
618
+ def each
619
+ idx = 0
620
+ while idx < @array.length
621
+ yield(@array[idx], @data[idx])
622
+ idx += 1
623
+ end
624
+ end
625
+
626
+ def replace
627
+ members.each do |member|
628
+ self[member] = yield(self[member])
629
+ end
630
+ end
631
+
632
+ def self.decode(elename, type)
633
+ s = SOAPStruct.new(type)
634
+ s.elename = elename
635
+ s
636
+ end
637
+ end
638
+
639
+
640
+ # SOAPElement is not typed so it is not derived from NSDBase.
641
+ class SOAPElement
642
+ include Enumerable
643
+ include SOAPCompoundtype
644
+ include SOAPNameAccessible
645
+
646
+ attr_accessor :type
647
+ # Text interface.
648
+ attr_accessor :text
649
+ alias data text
650
+
651
+ def initialize(elename, text = nil)
652
+ super()
653
+ if elename.nil?
654
+ elename = XSD::QName::EMPTY
655
+ else
656
+ elename = Mapping.to_qname(elename)
657
+ end
658
+ @encodingstyle = LiteralNamespace
659
+ @elename = elename
660
+ @type = nil
661
+
662
+ @array = []
663
+ @data = []
664
+ @text = text
665
+ end
666
+
667
+ def inspect
668
+ sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename) +
669
+ (@text ? " #{@text.inspect}" : '') +
670
+ @data.collect { |ele| "\n#{ele.inspect}" }.join.gsub(/^/, ' ')
671
+ end
672
+
673
+ def set(value)
674
+ @text = value
675
+ end
676
+
677
+ # Element interfaces.
678
+ def add(value)
679
+ name = value.elename.name
680
+ @array.push(name)
681
+ @data.push(value)
682
+ value.parent = self if value.respond_to?(:parent=)
683
+ value
684
+ end
685
+
686
+ def [](idx)
687
+ if @array.include?(idx)
688
+ @data[@array.index(idx)]
689
+ else
690
+ nil
691
+ end
692
+ end
693
+
694
+ def []=(idx, data)
695
+ if @array.include?(idx)
696
+ data.parent = self if data.respond_to?(:parent=)
697
+ @data[@array.index(idx)] = data
698
+ else
699
+ add(data)
700
+ end
701
+ end
702
+
703
+ def key?(name)
704
+ @array.include?(name)
705
+ end
706
+
707
+ def members
708
+ @array
709
+ end
710
+
711
+ def have_member
712
+ !@array.empty?
713
+ end
714
+
715
+ def to_obj
716
+ if !have_member
717
+ @text
718
+ else
719
+ hash = {}
720
+ proptype = {}
721
+ each do |k, v|
722
+ value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
723
+ case proptype[k]
724
+ when :single
725
+ hash[k] = [hash[k], value]
726
+ proptype[k] = :multi
727
+ when :multi
728
+ hash[k] << value
729
+ else
730
+ hash[k] = value
731
+ proptype[k] = :single
732
+ end
733
+ end
734
+ hash
735
+ end
736
+ end
737
+
738
+ def each
739
+ idx = 0
740
+ while idx < @array.length
741
+ yield(@array[idx], @data[idx])
742
+ idx += 1
743
+ end
744
+ end
745
+
746
+ def self.decode(elename)
747
+ o = SOAPElement.new(elename)
748
+ o
749
+ end
750
+
751
+ def self.from_objs(objs)
752
+ objs.collect { |value|
753
+ if value.is_a?(SOAPElement)
754
+ value
755
+ else
756
+ k, v = value
757
+ ele = from_obj(v)
758
+ ele.elename = XSD::QName.new(nil, k)
759
+ ele
760
+ end
761
+ }
762
+ end
763
+
764
+ # when obj is a Hash or an Array:
765
+ # when key starts with "xmlattr_":
766
+ # value is added as an XML attribute with the key name however the
767
+ # "xmlattr_" is dropped from the name.
768
+ # when key starts with "xmlele_":
769
+ # value is added as an XML element with the key name however the
770
+ # "xmlele_" is dropped from the name.
771
+ # if else:
772
+ # value is added as an XML element with the key name.
773
+ def self.from_obj(obj, namespace = nil)
774
+ return obj if obj.is_a?(SOAPElement)
775
+ o = SOAPElement.new(nil)
776
+ case obj
777
+ when nil
778
+ o.text = nil
779
+ when Hash, Array
780
+ obj.each do |name, value|
781
+ addname, is_attr = parse_name(name, namespace)
782
+ if value.is_a?(Array)
783
+ value.each do |subvalue|
784
+ if is_attr
785
+ o.extraattr[addname] = subvalue
786
+ else
787
+ child = from_obj(subvalue, namespace)
788
+ child.elename = addname
789
+ o.add(child)
790
+ end
791
+ end
792
+ else
793
+ if is_attr
794
+ o.extraattr[addname] = value
795
+ else
796
+ child = from_obj(value, namespace)
797
+ child.elename = addname
798
+ o.add(child)
799
+ end
800
+ end
801
+ end
802
+ else
803
+ o.text = obj.to_s
804
+ end
805
+ o
806
+ end
807
+
808
+ def self.parse_name(obj, namespace = nil)
809
+ qname = to_qname(obj, namespace)
810
+ if /\Axmlele_/ =~ qname.name
811
+ qname = XSD::QName.new(qname.namespace, qname.name.sub(/\Axmlele_/, ''))
812
+ return qname, false
813
+ elsif /\Axmlattr_/ =~ qname.name
814
+ qname = XSD::QName.new(qname.namespace, qname.name.sub(/\Axmlattr_/, ''))
815
+ return qname, true
816
+ else
817
+ return qname, false
818
+ end
819
+ end
820
+
821
+ def self.to_qname(obj, namespace = nil)
822
+ if obj.is_a?(XSD::QName)
823
+ obj
824
+ elsif /\A(.+):([^:]+)\z/ =~ obj.to_s
825
+ XSD::QName.new($1, $2)
826
+ else
827
+ XSD::QName.new(namespace, obj.to_s)
828
+ end
829
+ end
830
+ end
831
+
832
+
833
+ class SOAPRawData < SOAPElement
834
+ def initialize(obj)
835
+ super(XSD::QName::EMPTY)
836
+ @obj = obj
837
+ end
838
+
839
+ def to_xmlpart
840
+ @obj.to_xmlpart
841
+ end
842
+ end
843
+
844
+
845
+ class SOAPREXMLElementWrap
846
+ def initialize(ele)
847
+ @ele = ele
848
+ end
849
+
850
+ def to_xmlpart
851
+ @ele.to_s
852
+ end
853
+ end
854
+
855
+
856
+ class SOAPArray < XSD::NSDBase
857
+ include SOAPCompoundtype
858
+ include Enumerable
859
+
860
+ public
861
+
862
+ attr_accessor :sparse
863
+
864
+ attr_reader :offset, :rank
865
+ attr_accessor :size, :size_fixed
866
+ attr_reader :arytype
867
+
868
+ def initialize(type = nil, rank = 1, arytype = nil)
869
+ super()
870
+ @type = type || ValueArrayName
871
+ @rank = rank
872
+ @data = Array.new
873
+ @sparse = false
874
+ @offset = Array.new(rank, 0)
875
+ @size = Array.new(rank, 0)
876
+ @size_fixed = false
877
+ @position = nil
878
+ @arytype = arytype
879
+ end
880
+
881
+ def offset=(var)
882
+ @offset = var
883
+ @sparse = true
884
+ end
885
+
886
+ def add(value)
887
+ self[*(@offset)] = value
888
+ end
889
+
890
+ def have_member
891
+ !@data.empty?
892
+ end
893
+
894
+ def [](*idxary)
895
+ if idxary.size != @rank
896
+ raise ArgumentError.new("given #{idxary.size} params does not match rank: #{@rank}")
897
+ end
898
+ retrieve(idxary)
899
+ end
900
+
901
+ def []=(*idxary)
902
+ value = idxary.slice!(-1)
903
+ if idxary.size != @rank
904
+ raise ArgumentError.new("given #{idxary.size} params(#{idxary}) does not match rank: #{@rank}")
905
+ end
906
+ idx = 0
907
+ while idx < idxary.size
908
+ if idxary[idx] + 1 > @size[idx]
909
+ @size[idx] = idxary[idx] + 1
910
+ end
911
+ idx += 1
912
+ end
913
+ data = retrieve(idxary[0, idxary.size - 1])
914
+ data[idxary.last] = value
915
+ if value.is_a?(SOAPType)
916
+ value.elename = ITEM_NAME
917
+ # Sync type
918
+ unless @type.name
919
+ @type = XSD::QName.new(value.type.namespace,
920
+ SOAPArray.create_arytype(value.type.name, @rank))
921
+ end
922
+ value.type ||= @type
923
+ end
924
+ @offset = idxary
925
+ value.parent = self if value.respond_to?(:parent=)
926
+ offsetnext
927
+ end
928
+
929
+ def each
930
+ @data.each do |data|
931
+ yield(data)
932
+ end
933
+ end
934
+
935
+ def to_a
936
+ @data.dup
937
+ end
938
+
939
+ def replace
940
+ @data = deep_map(@data) do |ele|
941
+ yield(ele)
942
+ end
943
+ end
944
+
945
+ def deep_map(ary, &block)
946
+ ary.collect do |ele|
947
+ if ele.is_a?(Array)
948
+ deep_map(ele, &block)
949
+ else
950
+ new_obj = block.call(ele)
951
+ new_obj.elename = ITEM_NAME
952
+ new_obj
953
+ end
954
+ end
955
+ end
956
+
957
+ def include?(var)
958
+ traverse_data(@data) do |v, *rank|
959
+ if v.is_a?(SOAPBasetype) && v.data == var
960
+ return true
961
+ end
962
+ end
963
+ false
964
+ end
965
+
966
+ def traverse
967
+ traverse_data(@data) do |v, *rank|
968
+ unless @sparse
969
+ yield(v)
970
+ else
971
+ yield(v, *rank) if v && !v.is_a?(SOAPNil)
972
+ end
973
+ end
974
+ end
975
+
976
+ def soap2array(ary)
977
+ traverse_data(@data) do |v, *position|
978
+ iteary = ary
979
+ rank = 1
980
+ while rank < position.size
981
+ idx = position[rank - 1]
982
+ if iteary[idx].nil?
983
+ iteary = iteary[idx] = Array.new
984
+ else
985
+ iteary = iteary[idx]
986
+ end
987
+ rank += 1
988
+ end
989
+ if block_given?
990
+ iteary[position.last] = yield(v)
991
+ else
992
+ iteary[position.last] = v
993
+ end
994
+ end
995
+ end
996
+
997
+ def position
998
+ @position
999
+ end
1000
+
1001
+ private
1002
+
1003
+ ITEM_NAME = XSD::QName.new(nil, 'item')
1004
+
1005
+ def retrieve(idxary)
1006
+ data = @data
1007
+ rank = 1
1008
+ while rank <= idxary.size
1009
+ idx = idxary[rank - 1]
1010
+ if data[idx].nil?
1011
+ data = data[idx] = Array.new
1012
+ else
1013
+ data = data[idx]
1014
+ end
1015
+ rank += 1
1016
+ end
1017
+ data
1018
+ end
1019
+
1020
+ def traverse_data(data, rank = 1)
1021
+ idx = 0
1022
+ while idx < ranksize(rank)
1023
+ if rank < @rank and data[idx]
1024
+ traverse_data(data[idx], rank + 1) do |*v|
1025
+ v[1, 0] = idx
1026
+ yield(*v)
1027
+ end
1028
+ else
1029
+ yield(data[idx], idx)
1030
+ end
1031
+ idx += 1
1032
+ end
1033
+ end
1034
+
1035
+ def ranksize(rank)
1036
+ @size[rank - 1]
1037
+ end
1038
+
1039
+ def offsetnext
1040
+ move = false
1041
+ idx = @offset.size - 1
1042
+ while !move && idx >= 0
1043
+ @offset[idx] += 1
1044
+ if @size_fixed
1045
+ if @offset[idx] < @size[idx]
1046
+ move = true
1047
+ else
1048
+ @offset[idx] = 0
1049
+ idx -= 1
1050
+ end
1051
+ else
1052
+ move = true
1053
+ end
1054
+ end
1055
+ end
1056
+
1057
+ def self.decode(elename, type, arytype)
1058
+ typestr, nofary = parse_type(arytype.name)
1059
+ rank = nofary.count(',') + 1
1060
+ plain_arytype = XSD::QName.new(arytype.namespace, typestr)
1061
+ o = SOAPArray.new(type, rank, plain_arytype)
1062
+ size = []
1063
+ nofary.split(',').each do |s|
1064
+ if s.empty?
1065
+ size.clear
1066
+ break
1067
+ else
1068
+ size << s.to_i
1069
+ end
1070
+ end
1071
+ unless size.empty?
1072
+ o.size = size
1073
+ o.size_fixed = true
1074
+ end
1075
+ o.elename = elename
1076
+ o
1077
+ end
1078
+
1079
+ def self.create_arytype(typename, rank)
1080
+ "#{typename}[" << ',' * (rank - 1) << ']'
1081
+ end
1082
+
1083
+ TypeParseRegexp = Regexp.new('^(.+)\[([\d,]*)\]$', nil, 'n')
1084
+
1085
+ def self.parse_type(string)
1086
+ TypeParseRegexp =~ string
1087
+ return $1, $2
1088
+ end
1089
+ end
1090
+
1091
+
1092
+ require 'soap/mapping/typeMap'
1093
+
1094
+
1095
+ end