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