soap4r 1.5.5.20061022

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. data/bin/wsdl2ruby.rb +131 -0
  2. data/bin/xsd2ruby.rb +82 -0
  3. data/lib/soap/XMLSchemaDatatypes.rb +9 -0
  4. data/lib/soap/XMLSchemaDatatypes1999.rb +10 -0
  5. data/lib/soap/attachment.rb +108 -0
  6. data/lib/soap/baseData.rb +992 -0
  7. data/lib/soap/cgistub.rb +9 -0
  8. data/lib/soap/charset.rb +9 -0
  9. data/lib/soap/compat.rb +182 -0
  10. data/lib/soap/driver.rb +9 -0
  11. data/lib/soap/element.rb +266 -0
  12. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  13. data/lib/soap/encodingstyle/handler.rb +109 -0
  14. data/lib/soap/encodingstyle/literalHandler.rb +241 -0
  15. data/lib/soap/encodingstyle/soapHandler.rb +598 -0
  16. data/lib/soap/generator.rb +264 -0
  17. data/lib/soap/header/handler.rb +60 -0
  18. data/lib/soap/header/handlerset.rb +70 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +119 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +531 -0
  23. data/lib/soap/mapping/factory.rb +372 -0
  24. data/lib/soap/mapping/literalregistry.rb +321 -0
  25. data/lib/soap/mapping/mapping.rb +561 -0
  26. data/lib/soap/mapping/registry.rb +258 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +475 -0
  28. data/lib/soap/mapping/typeMap.rb +82 -0
  29. data/lib/soap/mapping/wsdlencodedregistry.rb +253 -0
  30. data/lib/soap/mapping/wsdlliteralregistry.rb +246 -0
  31. data/lib/soap/mappingRegistry.rb +9 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/namespace.rb +9 -0
  35. data/lib/soap/netHttpClient.rb +204 -0
  36. data/lib/soap/parser.rb +251 -0
  37. data/lib/soap/processor.rb +66 -0
  38. data/lib/soap/property.rb +333 -0
  39. data/lib/soap/proxy.rb +14 -0
  40. data/lib/soap/qname.rb +9 -0
  41. data/lib/soap/rpc/cgistub.rb +214 -0
  42. data/lib/soap/rpc/driver.rb +245 -0
  43. data/lib/soap/rpc/element.rb +330 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/proxy.rb +563 -0
  46. data/lib/soap/rpc/router.rb +602 -0
  47. data/lib/soap/rpc/rpc.rb +25 -0
  48. data/lib/soap/rpc/soaplet.rb +162 -0
  49. data/lib/soap/rpc/standaloneServer.rb +43 -0
  50. data/lib/soap/rpcRouter.rb +9 -0
  51. data/lib/soap/rpcUtils.rb +9 -0
  52. data/lib/soap/server.rb +9 -0
  53. data/lib/soap/soap.rb +150 -0
  54. data/lib/soap/standaloneServer.rb +9 -0
  55. data/lib/soap/streamHandler.rb +258 -0
  56. data/lib/soap/wsdlDriver.rb +580 -0
  57. data/lib/wsdl/binding.rb +65 -0
  58. data/lib/wsdl/data.rb +64 -0
  59. data/lib/wsdl/definitions.rb +250 -0
  60. data/lib/wsdl/documentation.rb +32 -0
  61. data/lib/wsdl/import.rb +80 -0
  62. data/lib/wsdl/importer.rb +38 -0
  63. data/lib/wsdl/info.rb +39 -0
  64. data/lib/wsdl/message.rb +54 -0
  65. data/lib/wsdl/operation.rb +175 -0
  66. data/lib/wsdl/operationBinding.rb +116 -0
  67. data/lib/wsdl/param.rb +85 -0
  68. data/lib/wsdl/parser.rb +163 -0
  69. data/lib/wsdl/part.rb +52 -0
  70. data/lib/wsdl/port.rb +84 -0
  71. data/lib/wsdl/portType.rb +75 -0
  72. data/lib/wsdl/service.rb +61 -0
  73. data/lib/wsdl/soap/address.rb +40 -0
  74. data/lib/wsdl/soap/binding.rb +49 -0
  75. data/lib/wsdl/soap/body.rb +56 -0
  76. data/lib/wsdl/soap/cgiStubCreator.rb +88 -0
  77. data/lib/wsdl/soap/classDefCreator.rb +340 -0
  78. data/lib/wsdl/soap/classDefCreatorSupport.rb +131 -0
  79. data/lib/wsdl/soap/clientSkeltonCreator.rb +93 -0
  80. data/lib/wsdl/soap/complexType.rb +166 -0
  81. data/lib/wsdl/soap/data.rb +42 -0
  82. data/lib/wsdl/soap/definitions.rb +151 -0
  83. data/lib/wsdl/soap/driverCreator.rb +110 -0
  84. data/lib/wsdl/soap/element.rb +28 -0
  85. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +117 -0
  86. data/lib/wsdl/soap/fault.rb +56 -0
  87. data/lib/wsdl/soap/header.rb +86 -0
  88. data/lib/wsdl/soap/headerfault.rb +56 -0
  89. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +188 -0
  90. data/lib/wsdl/soap/mappingRegistryCreator.rb +53 -0
  91. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +233 -0
  92. data/lib/wsdl/soap/methodDefCreator.rb +253 -0
  93. data/lib/wsdl/soap/operation.rb +122 -0
  94. data/lib/wsdl/soap/servantSkeltonCreator.rb +78 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +98 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +196 -0
  97. data/lib/wsdl/types.rb +44 -0
  98. data/lib/wsdl/wsdl.rb +23 -0
  99. data/lib/wsdl/xmlSchema/all.rb +24 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  101. data/lib/wsdl/xmlSchema/any.rb +56 -0
  102. data/lib/wsdl/xmlSchema/attribute.rb +123 -0
  103. data/lib/wsdl/xmlSchema/choice.rb +55 -0
  104. data/lib/wsdl/xmlSchema/complexContent.rb +88 -0
  105. data/lib/wsdl/xmlSchema/complexExtension.rb +104 -0
  106. data/lib/wsdl/xmlSchema/complexRestriction.rb +92 -0
  107. data/lib/wsdl/xmlSchema/complexType.rb +152 -0
  108. data/lib/wsdl/xmlSchema/content.rb +74 -0
  109. data/lib/wsdl/xmlSchema/data.rb +90 -0
  110. data/lib/wsdl/xmlSchema/element.rb +158 -0
  111. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  112. data/lib/wsdl/xmlSchema/import.rb +65 -0
  113. data/lib/wsdl/xmlSchema/importer.rb +87 -0
  114. data/lib/wsdl/xmlSchema/include.rb +54 -0
  115. data/lib/wsdl/xmlSchema/length.rb +35 -0
  116. data/lib/wsdl/xmlSchema/list.rb +48 -0
  117. data/lib/wsdl/xmlSchema/maxlength.rb +35 -0
  118. data/lib/wsdl/xmlSchema/minlength.rb +35 -0
  119. data/lib/wsdl/xmlSchema/parser.rb +166 -0
  120. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  121. data/lib/wsdl/xmlSchema/schema.rb +144 -0
  122. data/lib/wsdl/xmlSchema/sequence.rb +51 -0
  123. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  124. data/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
  125. data/lib/wsdl/xmlSchema/simpleRestriction.rb +91 -0
  126. data/lib/wsdl/xmlSchema/simpleType.rb +80 -0
  127. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  128. data/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
  129. data/lib/xsd/charset.rb +187 -0
  130. data/lib/xsd/codegen.rb +12 -0
  131. data/lib/xsd/codegen/classdef.rb +203 -0
  132. data/lib/xsd/codegen/commentdef.rb +34 -0
  133. data/lib/xsd/codegen/gensupport.rb +168 -0
  134. data/lib/xsd/codegen/methoddef.rb +70 -0
  135. data/lib/xsd/codegen/moduledef.rb +191 -0
  136. data/lib/xsd/datatypes.rb +1282 -0
  137. data/lib/xsd/datatypes1999.rb +20 -0
  138. data/lib/xsd/iconvcharset.rb +33 -0
  139. data/lib/xsd/mapping.rb +42 -0
  140. data/lib/xsd/namedelements.rb +124 -0
  141. data/lib/xsd/ns.rb +146 -0
  142. data/lib/xsd/qname.rb +78 -0
  143. data/lib/xsd/xmlparser.rb +61 -0
  144. data/lib/xsd/xmlparser/parser.rb +96 -0
  145. data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
  146. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  147. data/lib/xsd/xmlparser/xmlscanner.rb +147 -0
  148. data/test/16runner.rb +68 -0
  149. data/test/interopR2/README.txt +2 -0
  150. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  151. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  152. data/test/interopR2/base.rb +288 -0
  153. data/test/interopR2/client.NetRemoting.rb +17 -0
  154. data/test/interopR2/client.NetRemoting.rb.result +3410 -0
  155. data/test/interopR2/client.NetRemoting_Base.log +6279 -0
  156. data/test/interopR2/client.NetRemoting_GroupB.log +1188 -0
  157. data/test/interopR2/client.rb +1228 -0
  158. data/test/interopR2/client4S4C.rb +15 -0
  159. data/test/interopR2/client4S4C2.rb +14 -0
  160. data/test/interopR2/client4S4C2_Base.log +4955 -0
  161. data/test/interopR2/client4S4C2_GroupB.log +1000 -0
  162. data/test/interopR2/client4S4C_Base.log +4635 -0
  163. data/test/interopR2/client4S4C_GroupB.log +900 -0
  164. data/test/interopR2/clientASP.NET.rb +17 -0
  165. data/test/interopR2/clientASP.NET_Base.log +5468 -0
  166. data/test/interopR2/clientASP.NET_GroupB.log +977 -0
  167. data/test/interopR2/clientApacheAxis.rb +16 -0
  168. data/test/interopR2/clientApacheAxis_Base.log +3171 -0
  169. data/test/interopR2/clientApacheAxis_GroupB.log +498 -0
  170. data/test/interopR2/clientApacheSOAP.rb +17 -0
  171. data/test/interopR2/clientApacheSOAP_Base.log +3171 -0
  172. data/test/interopR2/clientBEAWebLogic.rb +17 -0
  173. data/test/interopR2/clientBEAWebLogic_Base.log +3171 -0
  174. data/test/interopR2/clientBEAWebLogic_GroupB.log +498 -0
  175. data/test/interopR2/clientBase.rb +1970 -0
  176. data/test/interopR2/clientCapeConnect.rb +18 -0
  177. data/test/interopR2/clientCapeConnect_Base.log +2126 -0
  178. data/test/interopR2/clientDelphi.rb +19 -0
  179. data/test/interopR2/clientDelphi_Base.log +0 -0
  180. data/test/interopR2/clientEasySoap.rb +14 -0
  181. data/test/interopR2/clientEasySoap_Base.log +6187 -0
  182. data/test/interopR2/clientEasySoap_GroupB.log +1076 -0
  183. data/test/interopR2/clientFrontier.rb +25 -0
  184. data/test/interopR2/clientFrontier_Base.log +5188 -0
  185. data/test/interopR2/clientGLUE.rb +32 -0
  186. data/test/interopR2/clientHP.rb +13 -0
  187. data/test/interopR2/clientHP_Base.log +3171 -0
  188. data/test/interopR2/clientHP_GroupB.log +498 -0
  189. data/test/interopR2/clientJAX-RPC.rb +19 -0
  190. data/test/interopR2/clientJSOAP.rb +14 -0
  191. data/test/interopR2/clientJSOAP_Base.log +4465 -0
  192. data/test/interopR2/clientJSOAP_GroupB.log +824 -0
  193. data/test/interopR2/clientKafkaXSLT.rb +15 -0
  194. data/test/interopR2/clientKafkaXSLT_Base.log +10299 -0
  195. data/test/interopR2/clientKafkaXSLT_GroupB.log +1739 -0
  196. data/test/interopR2/clientMSSOAPToolkit2.0.rb +17 -0
  197. data/test/interopR2/clientMSSOAPToolkit2.0_Base.log +4805 -0
  198. data/test/interopR2/clientMSSOAPToolkit2.0_GroupB.log +871 -0
  199. data/test/interopR2/clientMSSOAPToolkit3.0.rb +17 -0
  200. data/test/interopR2/clientMSSOAPToolkit3.0_Base.log +5076 -0
  201. data/test/interopR2/clientMSSOAPToolkit3.0_GroupB.log +908 -0
  202. data/test/interopR2/clientNuSOAP.rb +19 -0
  203. data/test/interopR2/clientNuSOAP_Base.log +5076 -0
  204. data/test/interopR2/clientNuSOAP_GroupB.log +958 -0
  205. data/test/interopR2/clientNuWave.rb +15 -0
  206. data/test/interopR2/clientNuWave_Base.log +2019 -0
  207. data/test/interopR2/clientOpenLink.rb +15 -0
  208. data/test/interopR2/clientOpenLink_Base.log +6171 -0
  209. data/test/interopR2/clientOpenLink_GroupB.log +1094 -0
  210. data/test/interopR2/clientOracle.rb +15 -0
  211. data/test/interopR2/clientOracle_Base.log +5594 -0
  212. data/test/interopR2/clientPEAR.rb +18 -0
  213. data/test/interopR2/clientPEAR_Base.log +6261 -0
  214. data/test/interopR2/clientPEAR_GroupB.log +1106 -0
  215. data/test/interopR2/clientPhalanx.rb +18 -0
  216. data/test/interopR2/clientPhalanx_Base.log +41036 -0
  217. data/test/interopR2/clientPhalanx_GroupB.log +6519 -0
  218. data/test/interopR2/clientSIMACE.rb +18 -0
  219. data/test/interopR2/clientSIMACE_Base.log +6171 -0
  220. data/test/interopR2/clientSIMACE_GroupB.log +1093 -0
  221. data/test/interopR2/clientSOAP4R.rb +18 -0
  222. data/test/interopR2/clientSOAP4R.rb.result +3409 -0
  223. data/test/interopR2/clientSOAP4R_Base.log +6366 -0
  224. data/test/interopR2/clientSOAP4R_GroupB.log +1112 -0
  225. data/test/interopR2/clientSOAP__Lite.rb +14 -0
  226. data/test/interopR2/clientSQLData.rb +18 -0
  227. data/test/interopR2/clientSQLData_Base.log +4857 -0
  228. data/test/interopR2/clientSQLData_GroupB.log +770 -0
  229. data/test/interopR2/clientSilverStream.rb +17 -0
  230. data/test/interopR2/clientSilverStream_Base.log +3171 -0
  231. data/test/interopR2/clientSpray2001.rb +17 -0
  232. data/test/interopR2/clientSpray2001_Base.log +8187 -0
  233. data/test/interopR2/clientSpray2001_GroupB.log +1408 -0
  234. data/test/interopR2/clientSun.rb +19 -0
  235. data/test/interopR2/clientSun_Base.log +4641 -0
  236. data/test/interopR2/clientSun_GroupB.log +856 -0
  237. data/test/interopR2/clientVWOpentalkSoap.rb +19 -0
  238. data/test/interopR2/clientVWOpentalkSoap_Base.log +5402 -0
  239. data/test/interopR2/clientVWOpentalkSoap_GroupB.log +972 -0
  240. data/test/interopR2/clientWASP.rb +19 -0
  241. data/test/interopR2/clientWASPC.rb +18 -0
  242. data/test/interopR2/clientWASPC_Base.log +4187 -0
  243. data/test/interopR2/clientWASPC_GroupB.log +763 -0
  244. data/test/interopR2/clientWASP_Base.log +5414 -0
  245. data/test/interopR2/clientWASP_GroupB.log +970 -0
  246. data/test/interopR2/clientWebMethods.rb +15 -0
  247. data/test/interopR2/clientWebMethods_Base.log +3075 -0
  248. data/test/interopR2/clientWebMethods_GroupB.log +483 -0
  249. data/test/interopR2/clientWhiteMesa.rb +28 -0
  250. data/test/interopR2/clientWhiteMesa_Base.log +4359 -0
  251. data/test/interopR2/clientWhiteMesa_GroupB.log +808 -0
  252. data/test/interopR2/clientWingfoot.rb +15 -0
  253. data/test/interopR2/clientWingfoot_Base.log +4445 -0
  254. data/test/interopR2/clientWingfoot_GroupB.log +848 -0
  255. data/test/interopR2/clientXMLBus.rb +19 -0
  256. data/test/interopR2/clientXMLBus_Base.log +3075 -0
  257. data/test/interopR2/clientXMLBus_GroupB.log +483 -0
  258. data/test/interopR2/clientXMLRPC-EPI.rb +17 -0
  259. data/test/interopR2/clientXSOAP.rb +14 -0
  260. data/test/interopR2/clientXSOAP_Base.log +4445 -0
  261. data/test/interopR2/clientZSI.rb +19 -0
  262. data/test/interopR2/clienteSOAP.rb +18 -0
  263. data/test/interopR2/clienteSOAP_Base.log +8728 -0
  264. data/test/interopR2/clientgSOAP.rb +18 -0
  265. data/test/interopR2/clientgSOAP_Base.log +4689 -0
  266. data/test/interopR2/clientgSOAP_GroupB.log +1014 -0
  267. data/test/interopR2/clientkSOAP.rb +17 -0
  268. data/test/interopR2/clientkSOAP_Base.log +5625 -0
  269. data/test/interopR2/iSimonReg.rb +112 -0
  270. data/test/interopR2/interopResultBase.rb +114 -0
  271. data/test/interopR2/interopService.rb +247 -0
  272. data/test/interopR2/result_client.NetRemoting.txt +4593 -0
  273. data/test/interopR2/rwikiInteropService.rb +105 -0
  274. data/test/interopR2/server.cgi +270 -0
  275. data/test/interopR2/server.rb +274 -0
  276. data/test/interopR2/simonReg.rb +123 -0
  277. data/test/interopR2/test.sh +49 -0
  278. data/test/interopR4/client.rb +112 -0
  279. data/test/runner.rb +9 -0
  280. data/test/sm11/classDef.rb +156 -0
  281. data/test/sm11/client.rb +542 -0
  282. data/test/sm11/driver.rb +183 -0
  283. data/test/sm11/servant.rb +1067 -0
  284. data/test/sm11/server.rb +25 -0
  285. data/test/soap/asp.net/hello.wsdl +96 -0
  286. data/test/soap/asp.net/test_aspdotnet.rb +112 -0
  287. data/test/soap/calc/calc.rb +17 -0
  288. data/test/soap/calc/calc2.rb +29 -0
  289. data/test/soap/calc/server.cgi +13 -0
  290. data/test/soap/calc/server.rb +17 -0
  291. data/test/soap/calc/server2.rb +20 -0
  292. data/test/soap/calc/test_calc.rb +49 -0
  293. data/test/soap/calc/test_calc2.rb +53 -0
  294. data/test/soap/calc/test_calc_cgi.rb +69 -0
  295. data/test/soap/fault/test_customfault.rb +58 -0
  296. data/test/soap/header/server.cgi +119 -0
  297. data/test/soap/header/test_authheader.rb +240 -0
  298. data/test/soap/header/test_authheader_cgi.rb +121 -0
  299. data/test/soap/header/test_simplehandler.rb +116 -0
  300. data/test/soap/helloworld/hw_s.rb +16 -0
  301. data/test/soap/helloworld/test_helloworld.rb +41 -0
  302. data/test/soap/literalArrayMapping/amazonEc.rb +4778 -0
  303. data/test/soap/literalArrayMapping/amazonEcDriver.rb +172 -0
  304. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  305. data/test/soap/literalArrayMapping/test_definedarray.rb +36 -0
  306. data/test/soap/marshal/marshaltestlib.rb +494 -0
  307. data/test/soap/marshal/test_digraph.rb +56 -0
  308. data/test/soap/marshal/test_marshal.rb +26 -0
  309. data/test/soap/marshal/test_struct.rb +47 -0
  310. data/test/soap/ssl/README +1 -0
  311. data/test/soap/ssl/ca.cert +23 -0
  312. data/test/soap/ssl/client.cert +19 -0
  313. data/test/soap/ssl/client.key +15 -0
  314. data/test/soap/ssl/server.cert +19 -0
  315. data/test/soap/ssl/server.key +15 -0
  316. data/test/soap/ssl/sslsvr.rb +57 -0
  317. data/test/soap/ssl/subca.cert +21 -0
  318. data/test/soap/ssl/test_ssl.rb +245 -0
  319. data/test/soap/struct/test_struct.rb +77 -0
  320. data/test/soap/styleuse/client.rb +20 -0
  321. data/test/soap/styleuse/server.rb +86 -0
  322. data/test/soap/swa/test_file.rb +73 -0
  323. data/test/soap/test_basetype.rb +976 -0
  324. data/test/soap/test_custommap.rb +108 -0
  325. data/test/soap/test_empty.rb +79 -0
  326. data/test/soap/test_envelopenamespace.rb +92 -0
  327. data/test/soap/test_httpconfigloader.rb +39 -0
  328. data/test/soap/test_mapping.rb +59 -0
  329. data/test/soap/test_no_indent.rb +86 -0
  330. data/test/soap/test_property.rb +424 -0
  331. data/test/soap/test_response_as_xml.rb +95 -0
  332. data/test/soap/test_soapelement.rb +120 -0
  333. data/test/soap/test_streamhandler.rb +262 -0
  334. data/test/soap/test_styleuse.rb +333 -0
  335. data/test/soap/wsdlDriver/README.txt +2 -0
  336. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  337. data/test/soap/wsdlDriver/document.wsdl +54 -0
  338. data/test/soap/wsdlDriver/echo_version.rb +29 -0
  339. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  340. data/test/soap/wsdlDriver/test_calc.rb +100 -0
  341. data/test/soap/wsdlDriver/test_document.rb +78 -0
  342. data/test/soap/wsdlDriver/test_simpletype.rb +87 -0
  343. data/test/wsdl/abstract/abstract.wsdl +97 -0
  344. data/test/wsdl/abstract/test_abstract.rb +130 -0
  345. data/test/wsdl/any/any.wsdl +51 -0
  346. data/test/wsdl/any/expectedDriver.rb +46 -0
  347. data/test/wsdl/any/expectedEcho.rb +18 -0
  348. data/test/wsdl/any/expectedService.rb +42 -0
  349. data/test/wsdl/any/test_any.rb +193 -0
  350. data/test/wsdl/axisArray/axisArray.wsdl +60 -0
  351. data/test/wsdl/axisArray/itemList.rb +14 -0
  352. data/test/wsdl/axisArray/test_axisarray.rb +69 -0
  353. data/test/wsdl/choice/choice.wsdl +91 -0
  354. data/test/wsdl/choice/test_choice.rb +134 -0
  355. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  356. data/test/wsdl/complexcontent/test_echo.rb +101 -0
  357. data/test/wsdl/datetime/DatetimeService.rb +44 -0
  358. data/test/wsdl/datetime/datetime.rb +0 -0
  359. data/test/wsdl/datetime/datetime.wsdl +45 -0
  360. data/test/wsdl/datetime/datetimeServant.rb +21 -0
  361. data/test/wsdl/datetime/test_datetime.rb +82 -0
  362. data/test/wsdl/document/array/double.wsdl +72 -0
  363. data/test/wsdl/document/array/test_array.rb +117 -0
  364. data/test/wsdl/document/document.wsdl +74 -0
  365. data/test/wsdl/document/number.wsdl +54 -0
  366. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  367. data/test/wsdl/document/test_nosoapaction.rb +109 -0
  368. data/test/wsdl/document/test_number.rb +99 -0
  369. data/test/wsdl/document/test_rpc.rb +211 -0
  370. data/test/wsdl/emptycomplextype.wsdl +31 -0
  371. data/test/wsdl/list/list.wsdl +93 -0
  372. data/test/wsdl/list/test_list.rb +134 -0
  373. data/test/wsdl/map/map.wsdl +92 -0
  374. data/test/wsdl/map/map.xml +43 -0
  375. data/test/wsdl/map/test_map.rb +99 -0
  376. data/test/wsdl/marshal/person.wsdl +21 -0
  377. data/test/wsdl/marshal/person_org.rb +18 -0
  378. data/test/wsdl/marshal/test_wsdlmarshal.rb +79 -0
  379. data/test/wsdl/multiplefault.wsdl +68 -0
  380. data/test/wsdl/overload/overload.wsdl +80 -0
  381. data/test/wsdl/overload/test_overload.rb +118 -0
  382. data/test/wsdl/qualified/lp.wsdl +47 -0
  383. data/test/wsdl/qualified/lp.xsd +26 -0
  384. data/test/wsdl/qualified/np.wsdl +51 -0
  385. data/test/wsdl/qualified/test_qualified.rb +145 -0
  386. data/test/wsdl/qualified/test_unqualified.rb +159 -0
  387. data/test/wsdl/raa/RAA.rb +120 -0
  388. data/test/wsdl/raa/RAAServant.rb +107 -0
  389. data/test/wsdl/raa/RAAService.rb +120 -0
  390. data/test/wsdl/raa/README.txt +8 -0
  391. data/test/wsdl/raa/raa.wsdl +264 -0
  392. data/test/wsdl/raa/server.rb +103 -0
  393. data/test/wsdl/raa/test_raa.rb +91 -0
  394. data/test/wsdl/ref/expectedProduct.rb +158 -0
  395. data/test/wsdl/ref/product.wsdl +147 -0
  396. data/test/wsdl/ref/test_ref.rb +289 -0
  397. data/test/wsdl/rpc/rpc.wsdl +83 -0
  398. data/test/wsdl/rpc/test-rpc-lit.wsdl +364 -0
  399. data/test/wsdl/rpc/test_rpc.rb +173 -0
  400. data/test/wsdl/rpc/test_rpc_lit.rb +407 -0
  401. data/test/wsdl/simplecontent/simplecontent.wsdl +83 -0
  402. data/test/wsdl/simplecontent/test_simplecontent.rb +116 -0
  403. data/test/wsdl/simpletype/rpc/expectedClient.rb +34 -0
  404. data/test/wsdl/simpletype/rpc/expectedDriver.rb +55 -0
  405. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +19 -0
  406. data/test/wsdl/simpletype/rpc/expectedServant.rb +32 -0
  407. data/test/wsdl/simpletype/rpc/expectedService.rb +51 -0
  408. data/test/wsdl/simpletype/rpc/rpc.wsdl +80 -0
  409. data/test/wsdl/simpletype/rpc/test_rpc.rb +62 -0
  410. data/test/wsdl/simpletype/simpletype.wsdl +95 -0
  411. data/test/wsdl/simpletype/test_simpletype.rb +99 -0
  412. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  413. data/test/wsdl/soap/test_soapbodyparts.rb +79 -0
  414. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +19 -0
  415. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +34 -0
  416. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +55 -0
  417. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +32 -0
  418. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +44 -0
  419. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +51 -0
  420. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  421. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +31 -0
  422. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  423. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  424. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  425. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +96 -0
  426. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +79 -0
  427. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  428. data/test/wsdl/soaptype/test_soaptype.rb +160 -0
  429. data/test/wsdl/test_emptycomplextype.rb +21 -0
  430. data/test/wsdl/test_fault.rb +50 -0
  431. data/test/wsdl/test_multiplefault.rb +39 -0
  432. data/test/xsd/codegen/test_classdef.rb +214 -0
  433. data/test/xsd/noencoding.xml +4 -0
  434. data/test/xsd/test_noencoding.rb +32 -0
  435. data/test/xsd/test_ns.rb +20 -0
  436. data/test/xsd/test_xmlschemaparser.rb +22 -0
  437. data/test/xsd/test_xsd.rb +1523 -0
  438. data/test/xsd/xmllang.xml +43 -0
  439. data/test/xsd/xmlschema.xml +12 -0
  440. metadata +539 -0
@@ -0,0 +1,598 @@
1
+ # SOAP4R - SOAP EncodingStyle handler library
2
+ # Copyright (C) 2001, 2003, 2005 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'soap/encodingstyle/handler'
10
+
11
+
12
+ module SOAP
13
+ module EncodingStyle
14
+
15
+
16
+ class SOAPHandler < Handler
17
+ Namespace = SOAP::EncodingNamespace
18
+ add_handler
19
+
20
+ def initialize(charset = nil)
21
+ super(charset)
22
+ @refpool = []
23
+ @idpool = []
24
+ @textbuf = []
25
+ @is_first_top_ele = true
26
+ end
27
+
28
+
29
+ ###
30
+ ## encode interface.
31
+ #
32
+ def encode_data(generator, ns, data, parent)
33
+ attrs = encode_attrs(generator, ns, data, parent)
34
+ if parent && parent.is_a?(SOAPArray) && parent.position
35
+ attrs[ns.name(AttrPositionName)] = "[#{parent.position.join(',')}]"
36
+ end
37
+ name = generator.encode_name(ns, data, attrs)
38
+ case data
39
+ when SOAPReference
40
+ attrs['href'] = data.refidstr
41
+ generator.encode_tag(name, attrs)
42
+ when SOAPExternalReference
43
+ data.referred
44
+ attrs['href'] = data.refidstr
45
+ generator.encode_tag(name, attrs)
46
+ when SOAPRawString
47
+ generator.encode_tag(name, attrs)
48
+ generator.encode_rawstring(data.to_s)
49
+ when XSD::XSDString
50
+ generator.encode_tag(name, attrs)
51
+ generator.encode_string(@charset ?
52
+ XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s)
53
+ when XSD::XSDAnySimpleType
54
+ generator.encode_tag(name, attrs)
55
+ generator.encode_string(data.to_s)
56
+ when SOAPStruct
57
+ generator.encode_tag(name, attrs)
58
+ data.each do |key, value|
59
+ generator.encode_child(ns, value, data)
60
+ end
61
+ when SOAPArray
62
+ generator.encode_tag(name, attrs)
63
+ data.traverse do |child, *rank|
64
+ data.position = data.sparse ? rank : nil
65
+ generator.encode_child(ns, child, data)
66
+ end
67
+ else
68
+ raise EncodingStyleError.new(
69
+ "unknown object:#{data} in this encodingStyle")
70
+ end
71
+ end
72
+
73
+ def encode_data_end(generator, ns, data, parent)
74
+ name = generator.encode_name_end(ns, data)
75
+ cr = data.is_a?(SOAPCompoundtype)
76
+ generator.encode_tag_end(name, cr)
77
+ end
78
+
79
+
80
+ ###
81
+ ## decode interface.
82
+ #
83
+ class SOAPTemporalObject
84
+ attr_accessor :parent
85
+ attr_accessor :position
86
+ attr_accessor :id
87
+ attr_accessor :root
88
+
89
+ def initialize
90
+ @parent = nil
91
+ @position = nil
92
+ @id = nil
93
+ @root = nil
94
+ end
95
+ end
96
+
97
+ class SOAPUnknown < SOAPTemporalObject
98
+ attr_reader :type
99
+ attr_accessor :definedtype
100
+ attr_reader :extraattr
101
+
102
+ def initialize(handler, elename, type, extraattr)
103
+ super()
104
+ @handler = handler
105
+ @elename = elename
106
+ @type = type
107
+ @extraattr = extraattr
108
+ @definedtype = nil
109
+ end
110
+
111
+ def as_struct
112
+ if @extraattr[XSD::AttrNilName] == 'true'
113
+ return as_nil
114
+ end
115
+ o = SOAPStruct.decode(@elename, @type)
116
+ o.id = @id
117
+ o.root = @root
118
+ o.parent = @parent
119
+ o.position = @position
120
+ o.extraattr.update(@extraattr)
121
+ @handler.decode_parent(@parent, o)
122
+ o
123
+ end
124
+
125
+ def as_string
126
+ if @extraattr[XSD::AttrNilName] == 'true'
127
+ return as_nil
128
+ end
129
+ o = SOAPString.decode(@elename)
130
+ o.id = @id
131
+ o.root = @root
132
+ o.parent = @parent
133
+ o.position = @position
134
+ o.extraattr.update(@extraattr)
135
+ @handler.decode_parent(@parent, o)
136
+ o
137
+ end
138
+
139
+ def as_nil
140
+ o = SOAPNil.decode(@elename)
141
+ o.id = @id
142
+ o.root = @root
143
+ o.parent = @parent
144
+ o.position = @position
145
+ o.extraattr.update(@extraattr)
146
+ @handler.decode_parent(@parent, o)
147
+ o
148
+ end
149
+ end
150
+
151
+ def decode_tag(ns, elename, attrs, parent)
152
+ @textbuf.clear
153
+ is_nil, type, arytype, root, offset, position, href, id, extraattr =
154
+ decode_attrs(ns, attrs)
155
+ o = nil
156
+ if is_nil
157
+ o = SOAPNil.decode(elename)
158
+ elsif href
159
+ o = SOAPReference.decode(elename, href)
160
+ @refpool << o
161
+ elsif @decode_typemap
162
+ o = decode_tag_by_wsdl(ns, elename, type, parent.node, arytype, extraattr)
163
+ else
164
+ o = decode_tag_by_type(ns, elename, type, parent.node, arytype, extraattr)
165
+ end
166
+
167
+ if o.is_a?(SOAPArray)
168
+ if offset
169
+ o.offset = decode_arypos(offset)
170
+ o.sparse = true
171
+ else
172
+ o.sparse = false
173
+ end
174
+ end
175
+
176
+ o.parent = parent
177
+ o.id = id
178
+ o.root = root
179
+ o.position = position
180
+
181
+ unless o.is_a?(SOAPTemporalObject)
182
+ @idpool << o if o.id
183
+ decode_parent(parent, o)
184
+ end
185
+ o
186
+ end
187
+
188
+ def decode_tag_end(ns, node)
189
+ o = node.node
190
+ if o.is_a?(SOAPUnknown)
191
+ newnode = if /\A\s*\z/ =~ @textbuf.join
192
+ o.as_struct
193
+ else
194
+ o.as_string
195
+ end
196
+ if newnode.id
197
+ @idpool << newnode
198
+ end
199
+ node.replace_node(newnode)
200
+ o = node.node
201
+ end
202
+ decode_textbuf(o)
203
+ # unlink definedtype
204
+ o.definedtype = nil
205
+ end
206
+
207
+ def decode_text(ns, text)
208
+ @textbuf << text
209
+ end
210
+
211
+ def decode_prologue
212
+ @refpool.clear
213
+ @idpool.clear
214
+ @is_first_top_ele = true
215
+ end
216
+
217
+ def decode_epilogue
218
+ decode_resolve_id
219
+ end
220
+
221
+ def decode_parent(parent, node)
222
+ return unless parent.node
223
+ case parent.node
224
+ when SOAPUnknown
225
+ newparent = parent.node.as_struct
226
+ node.parent = newparent
227
+ if newparent.id
228
+ @idpool << newparent
229
+ end
230
+ parent.replace_node(newparent)
231
+ decode_parent(parent, node)
232
+ when SOAPStruct
233
+ parent.node.add(node.elename.name, node)
234
+ node.parent = parent.node
235
+ when SOAPArray
236
+ if node.position
237
+ parent.node[*(decode_arypos(node.position))] = node
238
+ parent.node.sparse = true
239
+ else
240
+ parent.node.add(node)
241
+ end
242
+ node.parent = parent.node
243
+ else
244
+ raise EncodingStyleError.new("illegal parent: #{parent.node}")
245
+ end
246
+ end
247
+
248
+ private
249
+
250
+ def content_ranksize(typename)
251
+ typename.scan(/\[[\d,]*\]$/)[0]
252
+ end
253
+
254
+ def content_typename(typename)
255
+ typename.sub(/\[,*\]$/, '')
256
+ end
257
+
258
+ def create_arytype(ns, data)
259
+ XSD::QName.new(data.arytype.namespace,
260
+ content_typename(data.arytype.name) + "[#{data.size.join(',')}]")
261
+ end
262
+
263
+ def encode_attrs(generator, ns, data, parent)
264
+ attrs = {}
265
+ return attrs if data.is_a?(SOAPReference)
266
+
267
+ if !parent || parent.encodingstyle != EncodingNamespace
268
+ if @generate_explicit_type
269
+ SOAPGenerator.assign_ns(attrs, ns, EnvelopeNamespace)
270
+ attrs[ns.name(AttrEncodingStyleName)] = EncodingNamespace
271
+ end
272
+ data.encodingstyle = EncodingNamespace
273
+ end
274
+
275
+ if data.is_a?(SOAPNil)
276
+ attrs[ns.name(XSD::AttrNilName)] = XSD::NilValue
277
+ elsif @generate_explicit_type
278
+ if data.type.namespace
279
+ SOAPGenerator.assign_ns(attrs, ns, data.type.namespace)
280
+ end
281
+ if data.is_a?(SOAPArray)
282
+ if data.arytype.namespace
283
+ SOAPGenerator.assign_ns(attrs, ns, data.arytype.namespace)
284
+ end
285
+ SOAPGenerator.assign_ns(attrs, ns, EncodingNamespace)
286
+ attrs[ns.name(AttrArrayTypeName)] = ns.name(create_arytype(ns, data))
287
+ if data.type.name
288
+ attrs[ns.name(XSD::AttrTypeName)] = ns.name(data.type)
289
+ end
290
+ elsif parent && parent.is_a?(SOAPArray) && (parent.arytype == data.type)
291
+ # No need to add.
292
+ elsif !data.type.namespace
293
+ # No need to add.
294
+ else
295
+ attrs[ns.name(XSD::AttrTypeName)] = ns.name(data.type)
296
+ end
297
+ end
298
+
299
+ data.extraattr.each do |key, value|
300
+ if key.is_a?(XSD::QName)
301
+ keytag = encode_qname(attrs, ns, key)
302
+ end
303
+ attrs[keytag] = encode_attr_value(generator, ns, key, value)
304
+ end
305
+ if data.id
306
+ attrs['id'] = data.id
307
+ end
308
+ attrs
309
+ end
310
+
311
+ def encode_attr_value(generator, ns, qname, value)
312
+ case value
313
+ when SOAPType
314
+ ref = SOAPReference.new(value)
315
+ generator.add_reftarget(qname.name, value)
316
+ ref.refidstr
317
+ when XSD::QName
318
+ encode_qname(attrs, ns, value)
319
+ else
320
+ value.to_s
321
+ end
322
+ end
323
+
324
+ def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, extraattr)
325
+ o = nil
326
+ if parent.class == SOAPBody
327
+ # root element: should branch by root attribute?
328
+ if @is_first_top_ele
329
+ # Unqualified name is allowed here.
330
+ @is_first_top_ele = false
331
+ type = @decode_typemap[elename] ||
332
+ @decode_typemap.find_name(elename.name)
333
+ if type
334
+ o = SOAPStruct.new(elename)
335
+ o.definedtype = type
336
+ return o
337
+ end
338
+ end
339
+ # multi-ref element.
340
+ if typestr
341
+ typename = ns.parse(typestr)
342
+ typedef = @decode_typemap[typename]
343
+ if typedef
344
+ return decode_definedtype(elename, typename, typedef, arytypestr)
345
+ end
346
+ end
347
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
348
+ extraattr)
349
+ end
350
+
351
+ if parent.type == XSD::AnyTypeName
352
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
353
+ extraattr)
354
+ end
355
+
356
+ # parent.definedtype == nil means the parent is SOAPUnknown. SOAPUnknown
357
+ # is generated by decode_tag_by_type when its type is anyType.
358
+ parenttype = parent.definedtype || @decode_typemap[parent.type]
359
+ unless parenttype
360
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
361
+ extraattr)
362
+ end
363
+
364
+ definedtype_name = parenttype.child_type(elename)
365
+ if definedtype_name and (klass = TypeMap[definedtype_name])
366
+ return decode_basetype(klass, elename)
367
+ elsif definedtype_name == XSD::AnyTypeName
368
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr,
369
+ extraattr)
370
+ end
371
+
372
+ if definedtype_name
373
+ typedef = @decode_typemap[definedtype_name]
374
+ else
375
+ typedef = parenttype.child_defined_complextype(elename)
376
+ end
377
+ decode_definedtype(elename, definedtype_name, typedef, arytypestr)
378
+ end
379
+
380
+ def decode_definedtype(elename, typename, typedef, arytypestr)
381
+ unless typedef
382
+ raise EncodingStyleError.new("unknown type '#{typename}'")
383
+ end
384
+ if typedef.is_a?(::WSDL::XMLSchema::SimpleType)
385
+ decode_defined_simpletype(elename, typename, typedef, arytypestr)
386
+ else
387
+ decode_defined_complextype(elename, typename, typedef, arytypestr)
388
+ end
389
+ end
390
+
391
+ def decode_basetype(klass, elename)
392
+ klass.decode(elename)
393
+ end
394
+
395
+ def decode_defined_simpletype(elename, typename, typedef, arytypestr)
396
+ if typedef.base
397
+ o = decode_basetype(TypeMap[typedef.base], elename)
398
+ o.definedtype = typedef
399
+ o
400
+ else
401
+ raise RuntimeError.new("unsupported simpleType: #{typedef}")
402
+ end
403
+ end
404
+
405
+ def decode_defined_complextype(elename, typename, typedef, arytypestr)
406
+ case typedef.compoundtype
407
+ when :TYPE_STRUCT, :TYPE_MAP
408
+ o = SOAPStruct.decode(elename, typename)
409
+ o.definedtype = typedef
410
+ return o
411
+ when :TYPE_ARRAY
412
+ expected_arytype = typedef.find_arytype
413
+ if arytypestr
414
+ actual_arytype = XSD::QName.new(expected_arytype.namespace,
415
+ content_typename(expected_arytype.name) <<
416
+ content_ranksize(arytypestr))
417
+ o = SOAPArray.decode(elename, typename, actual_arytype)
418
+ else
419
+ o = SOAPArray.new(typename, 1, expected_arytype)
420
+ o.elename = elename
421
+ end
422
+ o.definedtype = typedef
423
+ return o
424
+ when :TYPE_EMPTY
425
+ o = SOAPNil.decode(elename)
426
+ o.definedtype = typedef
427
+ return o
428
+ else
429
+ raise RuntimeError.new(
430
+ "Unknown kind of complexType: #{typedef.compoundtype}")
431
+ end
432
+ nil
433
+ end
434
+
435
+ def decode_tag_by_type(ns, elename, typestr, parent, arytypestr, extraattr)
436
+ if arytypestr
437
+ type = typestr ? ns.parse(typestr) : ValueArrayName
438
+ node = SOAPArray.decode(elename, type, ns.parse(arytypestr))
439
+ node.extraattr.update(extraattr)
440
+ return node
441
+ end
442
+
443
+ type = nil
444
+ if typestr
445
+ type = ns.parse(typestr)
446
+ elsif parent.is_a?(SOAPArray)
447
+ type = parent.arytype
448
+ else
449
+ # Since it's in dynamic(without any type) encoding process,
450
+ # assumes entity as its type itself.
451
+ # <SOAP-ENC:Array ...> => type Array in SOAP-ENC.
452
+ # <Country xmlns="foo"> => type Country in foo.
453
+ type = elename
454
+ end
455
+
456
+ if klass = TypeMap[type]
457
+ node = decode_basetype(klass, elename)
458
+ node.extraattr.update(extraattr)
459
+ return node
460
+ end
461
+
462
+ # Unknown type... Struct or String
463
+ SOAPUnknown.new(self, elename, type, extraattr)
464
+ end
465
+
466
+ def decode_textbuf(node)
467
+ textbufstr = @textbuf.join
468
+ case node
469
+ when XSD::XSDHexBinary, XSD::XSDBase64Binary
470
+ node.set_encoded(textbufstr)
471
+ when XSD::XSDString
472
+ if @charset
473
+ textbufstr = XSD::Charset.encoding_from_xml(textbufstr, @charset)
474
+ end
475
+ if node.definedtype
476
+ node.definedtype.check_lexical_format(textbufstr)
477
+ end
478
+ node.set(textbufstr)
479
+ when SOAPNil
480
+ # Nothing to do.
481
+ when SOAPBasetype
482
+ node.set(textbufstr)
483
+ else
484
+ # Nothing to do...
485
+ end
486
+ @textbuf.clear
487
+ end
488
+
489
+ NilLiteralMap = {
490
+ 'true' => true,
491
+ '1' => true,
492
+ 'false' => false,
493
+ '0' => false
494
+ }
495
+ RootLiteralMap = {
496
+ '1' => 1,
497
+ '0' => 0
498
+ }
499
+ def decode_attrs(ns, attrs)
500
+ is_nil = false
501
+ type = nil
502
+ arytype = nil
503
+ root = nil
504
+ offset = nil
505
+ position = nil
506
+ href = nil
507
+ id = nil
508
+ extraattr = {}
509
+
510
+ attrs.each do |key, value|
511
+ qname = ns.parse(key)
512
+ case qname.namespace
513
+ when XSD::InstanceNamespace
514
+ case qname.name
515
+ when XSD::NilLiteral
516
+ is_nil = NilLiteralMap[value] or
517
+ raise EncodingStyleError.new("cannot accept attribute value: #{value} as the value of xsi:#{XSD::NilLiteral} (expected 'true', 'false', '1', or '0')")
518
+ next
519
+ when XSD::AttrType
520
+ type = value
521
+ next
522
+ end
523
+ when EncodingNamespace
524
+ case qname.name
525
+ when AttrArrayType
526
+ arytype = value
527
+ next
528
+ when AttrRoot
529
+ root = RootLiteralMap[value] or
530
+ raise EncodingStyleError.new(
531
+ "illegal root attribute value: #{value}")
532
+ next
533
+ when AttrOffset
534
+ offset = value
535
+ next
536
+ when AttrPosition
537
+ position = value
538
+ next
539
+ end
540
+ end
541
+ if key == 'href'
542
+ href = value
543
+ next
544
+ elsif key == 'id'
545
+ id = value
546
+ next
547
+ end
548
+ qname = ns.parse_local(key)
549
+ extraattr[qname] = decode_attr_value(ns, qname, value)
550
+ end
551
+
552
+ return is_nil, type, arytype, root, offset, position, href, id, extraattr
553
+ end
554
+
555
+ def decode_attr_value(ns, qname, value)
556
+ if /\A#/ =~ value
557
+ o = SOAPReference.decode(nil, value)
558
+ @refpool << o
559
+ o
560
+ else
561
+ value
562
+ end
563
+ end
564
+
565
+ def decode_arypos(position)
566
+ /^\[(.+)\]$/ =~ position
567
+ $1.split(',').collect { |s| s.to_i }
568
+ end
569
+
570
+ def decode_resolve_id
571
+ count = @refpool.length # To avoid infinite loop
572
+ while !@refpool.empty? && count > 0
573
+ @refpool = @refpool.find_all { |ref|
574
+ o = @idpool.find { |item|
575
+ item.id == ref.refid
576
+ }
577
+ if o.is_a?(SOAPReference)
578
+ true # link of link.
579
+ elsif o
580
+ ref.__setobj__(o)
581
+ false
582
+ elsif o = ref.rootnode.external_content[ref.refid]
583
+ ref.__setobj__(o)
584
+ false
585
+ else
586
+ raise EncodingStyleError.new("unresolved reference: #{ref.refid}")
587
+ end
588
+ }
589
+ count -= 1
590
+ end
591
+ end
592
+ end
593
+
594
+ SOAPHandler.new
595
+
596
+
597
+ end
598
+ end