tomdz-soap4r 1.5.8.20111103171510

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. data/bin/wsdl2ruby.rb +139 -0
  2. data/bin/xsd2ruby.rb +91 -0
  3. data/lib/soap/attachment.rb +109 -0
  4. data/lib/soap/attrproxy.rb +35 -0
  5. data/lib/soap/baseData.rb +1095 -0
  6. data/lib/soap/element.rb +278 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  8. data/lib/soap/encodingstyle/handler.rb +121 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  11. data/lib/soap/filter.rb +14 -0
  12. data/lib/soap/filter/filterchain.rb +52 -0
  13. data/lib/soap/filter/handler.rb +32 -0
  14. data/lib/soap/filter/streamhandler.rb +30 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +62 -0
  17. data/lib/soap/header/handlerset.rb +71 -0
  18. data/lib/soap/header/mappinghandler.rb +48 -0
  19. data/lib/soap/header/simplehandler.rb +45 -0
  20. data/lib/soap/httpconfigloader.rb +140 -0
  21. data/lib/soap/mapping.rb +13 -0
  22. data/lib/soap/mapping/encodedregistry.rb +539 -0
  23. data/lib/soap/mapping/factory.rb +389 -0
  24. data/lib/soap/mapping/literalregistry.rb +392 -0
  25. data/lib/soap/mapping/mapping.rb +577 -0
  26. data/lib/soap/mapping/registry.rb +296 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +171 -0
  29. data/lib/soap/mapping/typeMap.rb +107 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  32. data/lib/soap/marshal.rb +60 -0
  33. data/lib/soap/mimemessage.rb +243 -0
  34. data/lib/soap/nestedexception.rb +43 -0
  35. data/lib/soap/netHttpClient.rb +242 -0
  36. data/lib/soap/ns.rb +39 -0
  37. data/lib/soap/parser.rb +253 -0
  38. data/lib/soap/processor.rb +67 -0
  39. data/lib/soap/property.rb +340 -0
  40. data/lib/soap/proxy.rb +15 -0
  41. data/lib/soap/rpc/cgistub.rb +248 -0
  42. data/lib/soap/rpc/driver.rb +222 -0
  43. data/lib/soap/rpc/element.rb +375 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/methodDef.rb +69 -0
  46. data/lib/soap/rpc/proxy.rb +573 -0
  47. data/lib/soap/rpc/router.rb +663 -0
  48. data/lib/soap/rpc/rpc.rb +26 -0
  49. data/lib/soap/rpc/soaplet.rb +201 -0
  50. data/lib/soap/rpc/standaloneServer.rb +44 -0
  51. data/lib/soap/soap.rb +154 -0
  52. data/lib/soap/streamHandler.rb +302 -0
  53. data/lib/soap/version.rb +9 -0
  54. data/lib/soap/wsdlDriver.rb +165 -0
  55. data/lib/wsdl/binding.rb +66 -0
  56. data/lib/wsdl/data.rb +65 -0
  57. data/lib/wsdl/definitions.rb +237 -0
  58. data/lib/wsdl/documentation.rb +33 -0
  59. data/lib/wsdl/import.rb +81 -0
  60. data/lib/wsdl/importer.rb +39 -0
  61. data/lib/wsdl/info.rb +51 -0
  62. data/lib/wsdl/message.rb +55 -0
  63. data/lib/wsdl/operation.rb +152 -0
  64. data/lib/wsdl/operationBinding.rb +241 -0
  65. data/lib/wsdl/param.rb +94 -0
  66. data/lib/wsdl/parser.rb +165 -0
  67. data/lib/wsdl/part.rb +53 -0
  68. data/lib/wsdl/port.rb +67 -0
  69. data/lib/wsdl/portType.rb +76 -0
  70. data/lib/wsdl/service.rb +62 -0
  71. data/lib/wsdl/soap/address.rb +41 -0
  72. data/lib/wsdl/soap/binding.rb +50 -0
  73. data/lib/wsdl/soap/body.rb +59 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +434 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +241 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +55 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  79. data/lib/wsdl/soap/complexType.rb +174 -0
  80. data/lib/wsdl/soap/data.rb +43 -0
  81. data/lib/wsdl/soap/definitions.rb +201 -0
  82. data/lib/wsdl/soap/driverCreator.rb +121 -0
  83. data/lib/wsdl/soap/element.rb +34 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  85. data/lib/wsdl/soap/fault.rb +57 -0
  86. data/lib/wsdl/soap/header.rb +87 -0
  87. data/lib/wsdl/soap/headerfault.rb +57 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +377 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  92. data/lib/wsdl/soap/operation.rb +113 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +226 -0
  97. data/lib/wsdl/types.rb +45 -0
  98. data/lib/wsdl/wsdl.rb +25 -0
  99. data/lib/wsdl/xmlSchema/all.rb +25 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  101. data/lib/wsdl/xmlSchema/any.rb +62 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  110. data/lib/wsdl/xmlSchema/content.rb +96 -0
  111. data/lib/wsdl/xmlSchema/data.rb +117 -0
  112. data/lib/wsdl/xmlSchema/element.rb +154 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  115. data/lib/wsdl/xmlSchema/group.rb +101 -0
  116. data/lib/wsdl/xmlSchema/import.rb +54 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +46 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  119. data/lib/wsdl/xmlSchema/include.rb +49 -0
  120. data/lib/wsdl/xmlSchema/length.rb +38 -0
  121. data/lib/wsdl/xmlSchema/list.rb +49 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  138. data/lib/wsdl/xmlSchema/union.rb +36 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +176 -0
  142. data/lib/xsd/charset.rb +190 -0
  143. data/lib/xsd/codegen.rb +13 -0
  144. data/lib/xsd/codegen/classdef.rb +209 -0
  145. data/lib/xsd/codegen/commentdef.rb +35 -0
  146. data/lib/xsd/codegen/gensupport.rb +277 -0
  147. data/lib/xsd/codegen/methoddef.rb +71 -0
  148. data/lib/xsd/codegen/moduledef.rb +209 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +21 -0
  151. data/lib/xsd/iconvcharset.rb +34 -0
  152. data/lib/xsd/mapping.rb +69 -0
  153. data/lib/xsd/namedelements.rb +133 -0
  154. data/lib/xsd/ns.rb +183 -0
  155. data/lib/xsd/qname.rb +80 -0
  156. data/lib/xsd/xmlparser.rb +77 -0
  157. data/lib/xsd/xmlparser/libxmlparser.rb +116 -0
  158. data/lib/xsd/xmlparser/parser.rb +101 -0
  159. data/lib/xsd/xmlparser/rexmlparser.rb +59 -0
  160. data/lib/xsd/xmlparser/xmlparser.rb +51 -0
  161. data/lib/xsd/xmlparser/xmlscanner.rb +150 -0
  162. data/test/16runner.rb +69 -0
  163. data/test/helper.rb +7 -0
  164. data/test/interopR2/README.txt +2 -0
  165. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  166. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  167. data/test/interopR2/base.rb +289 -0
  168. data/test/interopR2/client.NetRemoting.rb +18 -0
  169. data/test/interopR2/client.rb +1235 -0
  170. data/test/interopR2/client4S4C.rb +16 -0
  171. data/test/interopR2/client4S4C2.rb +15 -0
  172. data/test/interopR2/clientASP.NET.rb +18 -0
  173. data/test/interopR2/clientApacheAxis.rb +17 -0
  174. data/test/interopR2/clientApacheSOAP.rb +18 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +18 -0
  176. data/test/interopR2/clientBase.rb +1968 -0
  177. data/test/interopR2/clientCapeConnect.rb +19 -0
  178. data/test/interopR2/clientDelphi.rb +20 -0
  179. data/test/interopR2/clientEasySoap.rb +15 -0
  180. data/test/interopR2/clientFrontier.rb +26 -0
  181. data/test/interopR2/clientGLUE.rb +33 -0
  182. data/test/interopR2/clientHP.rb +14 -0
  183. data/test/interopR2/clientJAX-RPC.rb +20 -0
  184. data/test/interopR2/clientJSOAP.rb +15 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +16 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +18 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +18 -0
  188. data/test/interopR2/clientNuSOAP.rb +20 -0
  189. data/test/interopR2/clientNuWave.rb +16 -0
  190. data/test/interopR2/clientOpenLink.rb +16 -0
  191. data/test/interopR2/clientOracle.rb +16 -0
  192. data/test/interopR2/clientPEAR.rb +19 -0
  193. data/test/interopR2/clientPhalanx.rb +19 -0
  194. data/test/interopR2/clientSIMACE.rb +19 -0
  195. data/test/interopR2/clientSOAP4R.rb +19 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +15 -0
  197. data/test/interopR2/clientSQLData.rb +19 -0
  198. data/test/interopR2/clientSilverStream.rb +18 -0
  199. data/test/interopR2/clientSpray2001.rb +18 -0
  200. data/test/interopR2/clientSun.rb +20 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +20 -0
  202. data/test/interopR2/clientWASP.rb +20 -0
  203. data/test/interopR2/clientWASPC.rb +19 -0
  204. data/test/interopR2/clientWebMethods.rb +16 -0
  205. data/test/interopR2/clientWhiteMesa.rb +29 -0
  206. data/test/interopR2/clientWingfoot.rb +16 -0
  207. data/test/interopR2/clientXMLBus.rb +20 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +18 -0
  209. data/test/interopR2/clientXSOAP.rb +15 -0
  210. data/test/interopR2/clientZSI.rb +20 -0
  211. data/test/interopR2/clienteSOAP.rb +19 -0
  212. data/test/interopR2/clientgSOAP.rb +19 -0
  213. data/test/interopR2/clientkSOAP.rb +18 -0
  214. data/test/interopR2/iSimonReg.rb +113 -0
  215. data/test/interopR2/interopResultBase.rb +115 -0
  216. data/test/interopR2/interopService.rb +248 -0
  217. data/test/interopR2/rwikiInteropService.rb +106 -0
  218. data/test/interopR2/server.cgi +271 -0
  219. data/test/interopR2/server.rb +276 -0
  220. data/test/interopR2/simonReg.rb +124 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +113 -0
  223. data/test/runner.rb +8 -0
  224. data/test/sm11/classDef.rb +157 -0
  225. data/test/sm11/client.rb +543 -0
  226. data/test/sm11/driver.rb +184 -0
  227. data/test/sm11/servant.rb +1068 -0
  228. data/test/sm11/server.rb +26 -0
  229. data/test/soap/asp.net/hello.wsdl +96 -0
  230. data/test/soap/asp.net/test_aspdotnet.rb +124 -0
  231. data/test/soap/auth/htdigest +2 -0
  232. data/test/soap/auth/htpasswd +2 -0
  233. data/test/soap/auth/test_basic.rb +118 -0
  234. data/test/soap/auth/test_digest.rb +119 -0
  235. data/test/soap/calc/calc.rb +18 -0
  236. data/test/soap/calc/calc2.rb +30 -0
  237. data/test/soap/calc/server.cgi +16 -0
  238. data/test/soap/calc/server.rb +18 -0
  239. data/test/soap/calc/server2.rb +21 -0
  240. data/test/soap/calc/test_calc.rb +53 -0
  241. data/test/soap/calc/test_calc2.rb +57 -0
  242. data/test/soap/calc/test_calc_cgi.rb +72 -0
  243. data/test/soap/case/test_mapping.rb +58 -0
  244. data/test/soap/fault/test_customfault.rb +61 -0
  245. data/test/soap/fault/test_fault.rb +47 -0
  246. data/test/soap/fault/test_soaparray.rb +36 -0
  247. data/test/soap/filter/test_filter.rb +147 -0
  248. data/test/soap/header/server.cgi +121 -0
  249. data/test/soap/header/test_authheader.rb +241 -0
  250. data/test/soap/header/test_authheader_cgi.rb +122 -0
  251. data/test/soap/header/test_simplehandler.rb +117 -0
  252. data/test/soap/helloworld/hw_s.rb +17 -0
  253. data/test/soap/helloworld/test_helloworld.rb +45 -0
  254. data/test/soap/htpasswd +2 -0
  255. data/test/soap/literalArrayMapping/amazonEc.rb +4779 -0
  256. data/test/soap/literalArrayMapping/amazonEcDriver.rb +173 -0
  257. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  258. data/test/soap/literalArrayMapping/test_definedarray.rb +35 -0
  259. data/test/soap/marshal/marshaltestlib.rb +498 -0
  260. data/test/soap/marshal/test_digraph.rb +57 -0
  261. data/test/soap/marshal/test_marshal.rb +28 -0
  262. data/test/soap/marshal/test_struct.rb +48 -0
  263. data/test/soap/ssl/README +1 -0
  264. data/test/soap/ssl/ca.cert +23 -0
  265. data/test/soap/ssl/client.cert +19 -0
  266. data/test/soap/ssl/client.key +15 -0
  267. data/test/soap/ssl/server.cert +19 -0
  268. data/test/soap/ssl/server.key +15 -0
  269. data/test/soap/ssl/sslsvr.rb +59 -0
  270. data/test/soap/ssl/subca.cert +21 -0
  271. data/test/soap/ssl/test_ssl.rb +236 -0
  272. data/test/soap/struct/test_struct.rb +71 -0
  273. data/test/soap/styleuse/client.rb +21 -0
  274. data/test/soap/styleuse/server.rb +87 -0
  275. data/test/soap/swa/test_file.rb +76 -0
  276. data/test/soap/test_basetype.rb +1091 -0
  277. data/test/soap/test_cookie.rb +113 -0
  278. data/test/soap/test_custom_ns.rb +106 -0
  279. data/test/soap/test_custommap.rb +111 -0
  280. data/test/soap/test_empty.rb +106 -0
  281. data/test/soap/test_envelopenamespace.rb +86 -0
  282. data/test/soap/test_extraattr.rb +55 -0
  283. data/test/soap/test_generator.rb +32 -0
  284. data/test/soap/test_httpconfigloader.rb +72 -0
  285. data/test/soap/test_mapping.rb +132 -0
  286. data/test/soap/test_nestedexception.rb +71 -0
  287. data/test/soap/test_nil.rb +71 -0
  288. data/test/soap/test_no_indent.rb +89 -0
  289. data/test/soap/test_property.rb +429 -0
  290. data/test/soap/test_response_as_xml.rb +118 -0
  291. data/test/soap/test_soapelement.rb +139 -0
  292. data/test/soap/test_streamhandler.rb +271 -0
  293. data/test/soap/test_styleuse.rb +327 -0
  294. data/test/soap/wsdlDriver/README.txt +2 -0
  295. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  296. data/test/soap/wsdlDriver/document.wsdl +54 -0
  297. data/test/soap/wsdlDriver/echo_version.rb +30 -0
  298. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  299. data/test/soap/wsdlDriver/test_calc.rb +72 -0
  300. data/test/soap/wsdlDriver/test_document.rb +72 -0
  301. data/test/soap/wsdlDriver/test_simpletype.rb +82 -0
  302. data/test/testutil.rb +55 -0
  303. data/test/wsdl/abstract/abstract.wsdl +176 -0
  304. data/test/wsdl/abstract/test_abstract.rb +160 -0
  305. data/test/wsdl/anonymous/expectedClassDef.rb +129 -0
  306. data/test/wsdl/anonymous/expectedDriver.rb +60 -0
  307. data/test/wsdl/anonymous/expectedMappingRegistry.rb +177 -0
  308. data/test/wsdl/anonymous/lp.wsdl +147 -0
  309. data/test/wsdl/anonymous/test_anonymous.rb +131 -0
  310. data/test/wsdl/any/any.wsdl +114 -0
  311. data/test/wsdl/any/expectedDriver.rb +69 -0
  312. data/test/wsdl/any/expectedEcho.rb +58 -0
  313. data/test/wsdl/any/expectedMappingRegistry.rb +64 -0
  314. data/test/wsdl/any/expectedService.rb +70 -0
  315. data/test/wsdl/any/test_any.rb +194 -0
  316. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  317. data/test/wsdl/axisArray/test_axisarray.rb +125 -0
  318. data/test/wsdl/choice/choice.wsdl +167 -0
  319. data/test/wsdl/choice/test_choice.rb +311 -0
  320. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  321. data/test/wsdl/complexcontent/test_echo.rb +91 -0
  322. data/test/wsdl/datetime/DatetimeService.rb +45 -0
  323. data/test/wsdl/datetime/datetime.rb +0 -0
  324. data/test/wsdl/datetime/datetime.wsdl +45 -0
  325. data/test/wsdl/datetime/datetimeServant.rb +23 -0
  326. data/test/wsdl/datetime/test_datetime.rb +88 -0
  327. data/test/wsdl/document/array/double.wsdl +161 -0
  328. data/test/wsdl/document/array/test_array.rb +202 -0
  329. data/test/wsdl/document/document.wsdl +76 -0
  330. data/test/wsdl/document/number.wsdl +54 -0
  331. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  332. data/test/wsdl/document/test_nosoapaction.rb +103 -0
  333. data/test/wsdl/document/test_number.rb +93 -0
  334. data/test/wsdl/document/test_rpc.rb +356 -0
  335. data/test/wsdl/emptycomplextype.wsdl +31 -0
  336. data/test/wsdl/fault/fault.wsdl +79 -0
  337. data/test/wsdl/fault/multifault.wsdl +96 -0
  338. data/test/wsdl/fault/test_fault.rb +120 -0
  339. data/test/wsdl/fault/test_multifault.rb +135 -0
  340. data/test/wsdl/group/expectedClassdef.rb +59 -0
  341. data/test/wsdl/group/expectedDriver.rb +52 -0
  342. data/test/wsdl/group/expectedMappingRegistry.rb +68 -0
  343. data/test/wsdl/group/group.wsdl +88 -0
  344. data/test/wsdl/group/test_rpc.rb +146 -0
  345. data/test/wsdl/list/list.wsdl +93 -0
  346. data/test/wsdl/list/test_list.rb +125 -0
  347. data/test/wsdl/map/map.wsdl +92 -0
  348. data/test/wsdl/map/map.xml +43 -0
  349. data/test/wsdl/map/test_map.rb +100 -0
  350. data/test/wsdl/marshal/person.wsdl +21 -0
  351. data/test/wsdl/marshal/person_org.rb +24 -0
  352. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  353. data/test/wsdl/multiplefault.wsdl +75 -0
  354. data/test/wsdl/oneway/oneway.wsdl +36 -0
  355. data/test/wsdl/oneway/test_oneway.rb +109 -0
  356. data/test/wsdl/overload/expectedClient.rb +38 -0
  357. data/test/wsdl/overload/expectedDriver.rb +62 -0
  358. data/test/wsdl/overload/expectedServant.rb +36 -0
  359. data/test/wsdl/overload/overload.wsdl +70 -0
  360. data/test/wsdl/overload/test_overload.rb +132 -0
  361. data/test/wsdl/qualified/lp.wsdl +47 -0
  362. data/test/wsdl/qualified/lp.xsd +26 -0
  363. data/test/wsdl/qualified/np.wsdl +51 -0
  364. data/test/wsdl/qualified/test_qualified.rb +138 -0
  365. data/test/wsdl/qualified/test_unqualified.rb +139 -0
  366. data/test/wsdl/raa/RAAService.rb +126 -0
  367. data/test/wsdl/raa/README.txt +8 -0
  368. data/test/wsdl/raa/expectedClassDef.rb +101 -0
  369. data/test/wsdl/raa/expectedDriver.rb +97 -0
  370. data/test/wsdl/raa/expectedMappingRegistry.rb +122 -0
  371. data/test/wsdl/raa/raa.wsdl +264 -0
  372. data/test/wsdl/raa/test_raa.rb +127 -0
  373. data/test/wsdl/ref/expectedDriver.rb +52 -0
  374. data/test/wsdl/ref/expectedProduct.rb +244 -0
  375. data/test/wsdl/ref/product.wsdl +147 -0
  376. data/test/wsdl/ref/test_ref.rb +269 -0
  377. data/test/wsdl/rpc/rpc.wsdl +109 -0
  378. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  379. data/test/wsdl/rpc/test_rpc.rb +177 -0
  380. data/test/wsdl/rpc/test_rpc_lit.rb +471 -0
  381. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  382. data/test/wsdl/simplecontent/test_simplecontent.rb +103 -0
  383. data/test/wsdl/simpletype/rpc/expectedClient.rb +35 -0
  384. data/test/wsdl/simpletype/rpc/expectedDriver.rb +59 -0
  385. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +37 -0
  386. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +58 -0
  387. data/test/wsdl/simpletype/rpc/expectedServant.rb +33 -0
  388. data/test/wsdl/simpletype/rpc/expectedService.rb +56 -0
  389. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  390. data/test/wsdl/simpletype/rpc/test_rpc.rb +53 -0
  391. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  392. data/test/wsdl/simpletype/test_simpletype.rb +93 -0
  393. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  394. data/test/wsdl/soap/test_soapbodyparts.rb +80 -0
  395. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +22 -0
  396. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +35 -0
  397. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +59 -0
  398. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +37 -0
  399. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +33 -0
  400. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +49 -0
  401. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +56 -0
  402. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  403. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +38 -0
  404. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  405. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  406. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  407. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +84 -0
  408. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +103 -0
  409. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  410. data/test/wsdl/soaptype/test_soaptype.rb +179 -0
  411. data/test/wsdl/test_emptycomplextype.rb +22 -0
  412. data/test/wsdl/test_fault.rb +51 -0
  413. data/test/wsdl/test_multiplefault.rb +42 -0
  414. data/test/xsd/codegen/test_classdef.rb +245 -0
  415. data/test/xsd/noencoding.xml +4 -0
  416. data/test/xsd/test_noencoding.rb +33 -0
  417. data/test/xsd/test_ns.rb +42 -0
  418. data/test/xsd/test_xmlschemaparser.rb +23 -0
  419. data/test/xsd/test_xsd.rb +1639 -0
  420. data/test/xsd/xmllang.xml +43 -0
  421. data/test/xsd/xmlschema.xml +12 -0
  422. data/test/xsd/xsd2ruby/expected_mysample.rb +66 -0
  423. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +12 -0
  424. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +52 -0
  425. data/test/xsd/xsd2ruby/section.xsd +49 -0
  426. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +91 -0
  427. metadata +490 -0
@@ -0,0 +1,121 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - EncodingStyle handler library
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/soap'
11
+ require 'soap/baseData'
12
+ require 'soap/element'
13
+
14
+
15
+ module SOAP
16
+ module EncodingStyle
17
+
18
+
19
+ class Handler
20
+ @@handlers = {}
21
+
22
+ class EncodingStyleError < Error; end
23
+
24
+ class << self
25
+ def uri
26
+ self::Namespace
27
+ end
28
+
29
+ def handler(uri)
30
+ @@handlers[uri]
31
+ end
32
+
33
+ def each
34
+ @@handlers.each do |key, value|
35
+ yield(value)
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def add_handler
42
+ @@handlers[self.uri] = self
43
+ end
44
+ end
45
+
46
+ attr_reader :charset
47
+ attr_accessor :generate_explicit_type
48
+ def decode_typemap=(definedtypes)
49
+ @decode_typemap = definedtypes
50
+ end
51
+
52
+ def initialize(charset)
53
+ @charset = charset
54
+ @generate_explicit_type = true
55
+ @decode_typemap = nil
56
+ end
57
+
58
+ ###
59
+ ## encode interface.
60
+ #
61
+ # Returns a XML instance as a string.
62
+ def encode_data(generator, ns, data, parent)
63
+ raise NotImplementError
64
+ end
65
+
66
+ def encode_data_end(generator, ns, data, parent)
67
+ raise NotImplementError
68
+ end
69
+
70
+ def encode_prologue
71
+ end
72
+
73
+ def encode_epilogue
74
+ end
75
+
76
+ ###
77
+ ## decode interface.
78
+ #
79
+ # Returns SOAP/OM data.
80
+ def decode_tag(ns, name, attrs, parent)
81
+ raise NotImplementError
82
+ end
83
+
84
+ def decode_tag_end(ns, name)
85
+ raise NotImplementError
86
+ end
87
+
88
+ def decode_text(ns, text)
89
+ raise NotImplementError
90
+ end
91
+
92
+ def decode_prologue
93
+ end
94
+
95
+ def decode_epilogue
96
+ end
97
+
98
+ def encode_attr_key(attrs, ns, qname)
99
+ if qname.namespace.nil?
100
+ qname.name
101
+ else
102
+ unless ns.assigned_as_tagged?(qname.namespace)
103
+ Generator.assign_ns!(attrs, ns, qname.namespace)
104
+ end
105
+ ns.name_attr(qname)
106
+ end
107
+ end
108
+
109
+ def encode_qname(attrs, ns, qname)
110
+ if qname.namespace.nil?
111
+ qname.name
112
+ else
113
+ Generator.assign_ns(attrs, ns, qname.namespace)
114
+ ns.name(qname)
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ end
121
+ end
@@ -0,0 +1,196 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - XML Literal EncodingStyle handler library
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/encodingstyle/handler'
11
+
12
+
13
+ module SOAP
14
+ module EncodingStyle
15
+
16
+
17
+ class LiteralHandler < Handler
18
+ Namespace = SOAP::LiteralNamespace
19
+ add_handler
20
+
21
+ def initialize(charset = nil)
22
+ super(charset)
23
+ @textbuf = []
24
+ end
25
+
26
+
27
+ ###
28
+ ## encode interface.
29
+ #
30
+ def encode_data(generator, ns, data, parent)
31
+ attrs = {}
32
+ name = generator.encode_name(ns, data, attrs)
33
+ if data.type and data.type.name and
34
+ (@generate_explicit_type or data.force_typed)
35
+ data.extraattr[XSD::AttrTypeName] = data.type
36
+ end
37
+ data.extraattr.each do |key, value|
38
+ keytag = key
39
+ if key.is_a?(XSD::QName)
40
+ keytag = encode_attr_key(attrs, ns, key)
41
+ end
42
+ if value.is_a?(XSD::QName)
43
+ value = encode_qname(attrs, ns, value)
44
+ end
45
+ attrs[keytag] = value
46
+ end
47
+ case data
48
+ when SOAPExternalReference
49
+ # do not encode SOAPExternalReference in
50
+ # literalHandler (which is used for literal service)
51
+ data.referred
52
+ when SOAPRawString
53
+ generator.encode_tag(name, attrs)
54
+ generator.encode_rawstring(data.to_s)
55
+ when XSD::XSDString
56
+ generator.encode_tag(name, attrs)
57
+ str = decode_str(data.to_s)
58
+ generator.encode_string(str)
59
+ when XSD::XSDAnySimpleType
60
+ generator.encode_tag(name, attrs)
61
+ generator.encode_string(data.to_s)
62
+ when SOAPStruct
63
+ generator.encode_tag(name, attrs)
64
+ data.each do |key, value|
65
+ generator.encode_child(ns, value, data)
66
+ end
67
+ when SOAPArray
68
+ generator.encode_tag(name, attrs)
69
+ data.traverse do |child, *rank|
70
+ data.position = nil
71
+ generator.encode_child(ns, child, data)
72
+ end
73
+ when SOAPElement
74
+ unless generator.use_default_namespace
75
+ # passes 2 times for simplifying namespace definition
76
+ data.each do |key, value|
77
+ if value.elename.namespace
78
+ Generator.assign_ns(attrs, ns, value.elename.namespace)
79
+ end
80
+ end
81
+ end
82
+ if data.text and data.text.is_a?(XSD::QName)
83
+ Generator.assign_ns(attrs, ns, data.text.namespace)
84
+ end
85
+ generator.encode_tag(name, attrs)
86
+ if data.text
87
+ if data.text.is_a?(XSD::QName)
88
+ text = ns.name(data.text)
89
+ else
90
+ text = data.text
91
+ end
92
+ generator.encode_string(text)
93
+ end
94
+ data.each do |key, value|
95
+ generator.encode_child(ns, value, data)
96
+ end
97
+ else
98
+ raise EncodingStyleError.new(
99
+ "unknown object:#{data} in this encodingStyle")
100
+ end
101
+ end
102
+
103
+ def encode_data_end(generator, ns, data, parent)
104
+ # do not encode SOAPExternalReference in
105
+ # literalHandler (which is used for literal service)
106
+ return nil if data.is_a?(SOAPExternalReference)
107
+ name = generator.encode_name_end(ns, data)
108
+ cr = (data.is_a?(SOAPCompoundtype) and data.have_member)
109
+ generator.encode_tag_end(name, cr)
110
+ end
111
+
112
+
113
+ ###
114
+ ## decode interface.
115
+ #
116
+ def decode_tag(ns, elename, attrs, parent)
117
+ @textbuf.clear
118
+ if attrs[XSD::AttrNilName] == 'true'
119
+ o = SOAPNil.decode(elename)
120
+ else
121
+ o = SOAPElement.decode(elename)
122
+ end
123
+ if definedtype = attrs[XSD::AttrTypeName]
124
+ o.type = ns.parse(definedtype)
125
+ end
126
+ o.parent = parent
127
+ o.extraattr.update(attrs)
128
+ decode_parent(parent, o)
129
+ o
130
+ end
131
+
132
+ def decode_tag_end(ns, node)
133
+ textbufstr = @textbuf.join
134
+ @textbuf.clear
135
+ o = node.node
136
+ decode_textbuf(o, textbufstr)
137
+ end
138
+
139
+ def decode_text(ns, text)
140
+ # @textbuf is set at decode_tag_end.
141
+ @textbuf << text
142
+ end
143
+
144
+ def decode_prologue
145
+ end
146
+
147
+ def decode_epilogue
148
+ end
149
+
150
+ def decode_parent(parent, node)
151
+ return unless parent.node
152
+ case parent.node
153
+ when SOAPElement
154
+ parent.node.add(node)
155
+ node.parent = parent.node
156
+ when SOAPStruct
157
+ parent.node.add(node.elename.name, node)
158
+ node.parent = parent.node
159
+ when SOAPArray
160
+ if node.position
161
+ parent.node[*(decode_arypos(node.position))] = node
162
+ parent.node.sparse = true
163
+ else
164
+ parent.node.add(node)
165
+ end
166
+ node.parent = parent.node
167
+ else
168
+ raise EncodingStyleError.new("illegal parent: #{parent.node}")
169
+ end
170
+ end
171
+
172
+ private
173
+
174
+ def decode_textbuf(node, textbufstr)
175
+ case node
176
+ when XSD::XSDString, SOAPElement
177
+ if @charset
178
+ node.set(decode_str(textbufstr))
179
+ else
180
+ node.set(textbufstr)
181
+ end
182
+ else
183
+ # Nothing to do...
184
+ end
185
+ end
186
+
187
+ def decode_str(str)
188
+ @charset ? XSD::Charset.encoding_from_xml(str, @charset) : str
189
+ end
190
+ end
191
+
192
+ LiteralHandler.new
193
+
194
+
195
+ end
196
+ end
@@ -0,0 +1,560 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - SOAP EncodingStyle handler library
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/encodingstyle/handler'
11
+ require 'soap/mapping/registry'
12
+
13
+
14
+ module SOAP
15
+ module EncodingStyle
16
+
17
+
18
+ class SOAPHandler < Handler
19
+ Namespace = SOAP::EncodingNamespace
20
+ add_handler
21
+
22
+ def initialize(charset = nil)
23
+ super(charset)
24
+ @refpool = []
25
+ @idpool = []
26
+ @textbuf = []
27
+ @is_first_top_ele = true
28
+ end
29
+
30
+
31
+ ###
32
+ ## encode interface.
33
+ #
34
+ def encode_data(generator, ns, data, parent)
35
+ attrs = encode_attrs(generator, ns, data, parent)
36
+ if parent && parent.is_a?(SOAPArray) && parent.position
37
+ attrs[ns.name(AttrPositionName)] = "[#{parent.position.join(',')}]"
38
+ end
39
+ name = generator.encode_name(ns, data, attrs)
40
+ case data
41
+ when SOAPReference
42
+ attrs['href'] = data.refidstr
43
+ generator.encode_tag(name, attrs)
44
+ when SOAPExternalReference
45
+ data.referred
46
+ attrs['href'] = data.refidstr
47
+ generator.encode_tag(name, attrs)
48
+ when SOAPRawString
49
+ generator.encode_tag(name, attrs)
50
+ generator.encode_rawstring(data.to_s)
51
+ when XSD::XSDString
52
+ generator.encode_tag(name, attrs)
53
+ generator.encode_string(@charset ?
54
+ XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s)
55
+ when XSD::XSDAnySimpleType
56
+ generator.encode_tag(name, attrs)
57
+ generator.encode_string(data.to_s)
58
+ when SOAPStruct
59
+ generator.encode_tag(name, attrs)
60
+ data.each do |key, value|
61
+ generator.encode_child(ns, value, data)
62
+ end
63
+ when SOAPArray
64
+ generator.encode_tag(name, attrs)
65
+ data.traverse do |child, *rank|
66
+ data.position = data.sparse ? rank : nil
67
+ generator.encode_child(ns, child, data)
68
+ end
69
+ else
70
+ raise EncodingStyleError.new(
71
+ "unknown object:#{data} in this encodingStyle")
72
+ end
73
+ end
74
+
75
+ def encode_data_end(generator, ns, data, parent)
76
+ name = generator.encode_name_end(ns, data)
77
+ cr = (data.is_a?(SOAPCompoundtype) and data.have_member)
78
+ generator.encode_tag_end(name, cr)
79
+ end
80
+
81
+
82
+ ###
83
+ ## decode interface.
84
+ #
85
+ class SOAPTemporalObject
86
+ attr_accessor :parent
87
+ attr_accessor :position
88
+ attr_accessor :id
89
+ attr_accessor :root
90
+
91
+ def initialize
92
+ @parent = nil
93
+ @position = nil
94
+ @id = nil
95
+ @root = nil
96
+ end
97
+ end
98
+
99
+ class SOAPUnknown < SOAPTemporalObject
100
+ attr_reader :type
101
+ attr_accessor :definedtype
102
+ attr_reader :extraattr
103
+
104
+ def initialize(handler, elename, type, extraattr)
105
+ super()
106
+ @handler = handler
107
+ @elename = elename
108
+ @type = type
109
+ @extraattr = extraattr
110
+ @definedtype = nil
111
+ end
112
+
113
+ def as_struct
114
+ if @extraattr[XSD::AttrNilName] == 'true'
115
+ return as_nil
116
+ end
117
+ o = SOAPStruct.decode(@elename, @type)
118
+ o.id = @id
119
+ o.root = @root
120
+ o.parent = @parent
121
+ o.position = @position
122
+ o.extraattr.update(@extraattr)
123
+ @handler.decode_parent(@parent, o)
124
+ o
125
+ end
126
+
127
+ def as_string
128
+ if @extraattr[XSD::AttrNilName] == 'true'
129
+ return as_nil
130
+ end
131
+ o = SOAPString.decode(@elename)
132
+ o.id = @id
133
+ o.root = @root
134
+ o.parent = @parent
135
+ o.position = @position
136
+ o.extraattr.update(@extraattr)
137
+ @handler.decode_parent(@parent, o)
138
+ o
139
+ end
140
+
141
+ def as_nil
142
+ o = SOAPNil.decode(@elename)
143
+ o.id = @id
144
+ o.root = @root
145
+ o.parent = @parent
146
+ o.position = @position
147
+ o.extraattr.update(@extraattr)
148
+ @handler.decode_parent(@parent, o)
149
+ o
150
+ end
151
+ end
152
+
153
+ def decode_tag(ns, elename, attrs, parent)
154
+ @textbuf.clear
155
+ is_nil, type, arytype, root, offset, position, href, id =
156
+ extract_attrs(ns, attrs)
157
+ o = nil
158
+ if is_nil
159
+ o = SOAPNil.decode(elename)
160
+ elsif href
161
+ o = SOAPReference.decode(elename, href)
162
+ @refpool << o
163
+ elsif @decode_typemap
164
+ o = decode_tag_by_wsdl(ns, elename, type, parent.node, arytype, attrs)
165
+ else
166
+ o = decode_tag_by_type(ns, elename, type, parent.node, arytype, attrs)
167
+ end
168
+
169
+ if o.is_a?(SOAPArray)
170
+ if offset
171
+ o.offset = decode_arypos(offset)
172
+ o.sparse = true
173
+ else
174
+ o.sparse = false
175
+ end
176
+ end
177
+
178
+ o.parent = parent
179
+ o.id = id
180
+ o.root = root
181
+ o.position = position
182
+
183
+ unless o.is_a?(SOAPTemporalObject)
184
+ @idpool << o if o.id
185
+ decode_parent(parent, o)
186
+ end
187
+ o
188
+ end
189
+
190
+ def decode_tag_end(ns, node)
191
+ textbufstr = @textbuf.join
192
+ @textbuf.clear
193
+ o = node.node
194
+ if o.is_a?(SOAPUnknown)
195
+ newnode = if /\A\s*\z/ =~ textbufstr
196
+ o.as_struct
197
+ else
198
+ o.as_string
199
+ end
200
+ if newnode.id
201
+ @idpool << newnode
202
+ end
203
+ node.replace_node(newnode)
204
+ o = node.node
205
+ end
206
+ decode_textbuf(o, textbufstr)
207
+ # unlink definedtype
208
+ o.definedtype = nil
209
+ end
210
+
211
+ def decode_text(ns, text)
212
+ @textbuf << text
213
+ end
214
+
215
+ def decode_prologue
216
+ @refpool.clear
217
+ @idpool.clear
218
+ @is_first_top_ele = true
219
+ end
220
+
221
+ def decode_epilogue
222
+ decode_resolve_id
223
+ end
224
+
225
+ def decode_parent(parent, node)
226
+ return unless parent.node
227
+ case parent.node
228
+ when SOAPUnknown
229
+ newparent = parent.node.as_struct
230
+ node.parent = newparent
231
+ if newparent.id
232
+ @idpool << newparent
233
+ end
234
+ parent.replace_node(newparent)
235
+ decode_parent(parent, node)
236
+ when SOAPStruct
237
+ parent.node.add(node.elename.name, node)
238
+ node.parent = parent.node
239
+ when SOAPArray
240
+ if node.position
241
+ parent.node[*(decode_arypos(node.position))] = node
242
+ parent.node.sparse = true
243
+ else
244
+ parent.node.add(node)
245
+ end
246
+ node.parent = parent.node
247
+ else
248
+ raise EncodingStyleError.new("illegal parent: #{parent.node}")
249
+ end
250
+ end
251
+
252
+ private
253
+
254
+ def content_ranksize(typename)
255
+ typename.scan(/\[[\d,]*\]$/)[0]
256
+ end
257
+
258
+ def content_typename(typename)
259
+ typename.sub(/\[,*\]$/, '')
260
+ end
261
+
262
+ def create_arytype(ns, data)
263
+ XSD::QName.new(data.arytype.namespace,
264
+ content_typename(data.arytype.name) + "[#{data.size.join(',')}]")
265
+ end
266
+
267
+ def encode_attrs(generator, ns, data, parent)
268
+ attrs = {}
269
+ return attrs if data.is_a?(SOAPReference)
270
+
271
+ if !parent || parent.encodingstyle != EncodingNamespace
272
+ if @generate_explicit_type
273
+ Generator.assign_ns(attrs, ns, EnvelopeNamespace)
274
+ attrs[ns.name(AttrEncodingStyleName)] = EncodingNamespace
275
+ end
276
+ data.encodingstyle = EncodingNamespace
277
+ end
278
+
279
+ if data.is_a?(SOAPNil)
280
+ attrs[ns.name(XSD::AttrNilName)] = XSD::NilValue
281
+ elsif @generate_explicit_type
282
+ if data.type.namespace
283
+ Generator.assign_ns(attrs, ns, data.type.namespace)
284
+ end
285
+ if data.is_a?(SOAPArray)
286
+ if data.arytype.namespace
287
+ Generator.assign_ns(attrs, ns, data.arytype.namespace)
288
+ end
289
+ Generator.assign_ns(attrs, ns, EncodingNamespace)
290
+ attrs[ns.name(AttrArrayTypeName)] = ns.name(create_arytype(ns, data))
291
+ if data.type.name
292
+ attrs[ns.name(XSD::AttrTypeName)] = ns.name(data.type)
293
+ end
294
+ elsif parent && parent.is_a?(SOAPArray) && (parent.arytype == data.type)
295
+ # No need to add.
296
+ elsif !data.type.namespace
297
+ # No need to add.
298
+ else
299
+ attrs[ns.name(XSD::AttrTypeName)] = ns.name(data.type)
300
+ end
301
+ end
302
+ data.extraattr.each do |key, value|
303
+ keytag = key
304
+ if key.is_a?(XSD::QName)
305
+ keytag = encode_attr_key(attrs, ns, key)
306
+ end
307
+ if value.is_a?(XSD::QName)
308
+ value = encode_qname(attrs, ns, value)
309
+ else
310
+ value = encode_attr_value(generator, ns, key, value)
311
+ end
312
+ attrs[keytag] = value
313
+ end
314
+ if data.id
315
+ attrs['id'] = data.id
316
+ end
317
+ attrs
318
+ end
319
+
320
+ def encode_attr_value(generator, ns, qname, value)
321
+ case value
322
+ when SOAPType
323
+ ref = SOAPReference.new(value)
324
+ generator.add_reftarget(qname.name, value)
325
+ ref.refidstr
326
+ else
327
+ value.to_s
328
+ end
329
+ end
330
+
331
+ def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, attrs)
332
+ o = nil
333
+ if parent.class == SOAPBody
334
+ # root element: should branch by root attribute?
335
+ if @is_first_top_ele
336
+ # Unqualified name is allowed here.
337
+ @is_first_top_ele = false
338
+ type = @decode_typemap[elename] ||
339
+ @decode_typemap.find_name(elename.name)
340
+ if type
341
+ o = SOAPStruct.new(elename)
342
+ o.elename = elename
343
+ o.definedtype = type
344
+ return o
345
+ end
346
+ end
347
+ # multi-ref element.
348
+ if typestr
349
+ typename = ns.parse(typestr)
350
+ typedef = @decode_typemap[typename]
351
+ if typedef
352
+ return decode_definedtype(elename, typename, typedef, arytypestr)
353
+ end
354
+ end
355
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
356
+ end
357
+
358
+ if parent.type == XSD::AnyTypeName
359
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
360
+ end
361
+
362
+ # parent.definedtype == nil means the parent is SOAPUnknown. SOAPUnknown
363
+ # is generated by decode_tag_by_type when its type is anyType.
364
+ parenttype = parent.definedtype || @decode_typemap[parent.type]
365
+ unless parenttype
366
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
367
+ end
368
+
369
+ definedtype_name = parenttype.child_type(elename)
370
+ if definedtype_name and (klass = TypeMap[definedtype_name])
371
+ return decode_basetype(klass, elename)
372
+ elsif definedtype_name == XSD::AnyTypeName
373
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
374
+ end
375
+
376
+ if definedtype_name
377
+ typedef = @decode_typemap[definedtype_name]
378
+ else
379
+ typedef = parenttype.child_defined_complextype(elename)
380
+ end
381
+ decode_definedtype(elename, definedtype_name, typedef, arytypestr)
382
+ end
383
+
384
+ def decode_definedtype(elename, typename, typedef, arytypestr)
385
+ unless typedef
386
+ raise EncodingStyleError.new("unknown type '#{typename}'")
387
+ end
388
+ if typedef.is_a?(::WSDL::XMLSchema::SimpleType)
389
+ decode_defined_simpletype(elename, typename, typedef, arytypestr)
390
+ else
391
+ decode_defined_complextype(elename, typename, typedef, arytypestr)
392
+ end
393
+ end
394
+
395
+ def decode_basetype(klass, elename)
396
+ klass.decode(elename)
397
+ end
398
+
399
+ def decode_defined_simpletype(elename, typename, typedef, arytypestr)
400
+ if typedef.base
401
+ o = decode_basetype(TypeMap[typedef.base], elename)
402
+ o.definedtype = typedef
403
+ o
404
+ else
405
+ raise RuntimeError.new("unsupported simpleType: #{typedef}")
406
+ end
407
+ end
408
+
409
+ def decode_defined_complextype(elename, typename, typedef, arytypestr)
410
+ case typedef.compoundtype
411
+ when :TYPE_STRUCT, :TYPE_MAP
412
+ o = SOAPStruct.decode(elename, typename)
413
+ o.definedtype = typedef
414
+ return o
415
+ when :TYPE_ARRAY
416
+ expected_arytype = typedef.find_arytype
417
+ if arytypestr
418
+ actual_arytype = XSD::QName.new(expected_arytype.namespace,
419
+ content_typename(expected_arytype.name) <<
420
+ content_ranksize(arytypestr))
421
+ o = SOAPArray.decode(elename, typename, actual_arytype)
422
+ else
423
+ o = SOAPArray.new(typename, 1, expected_arytype)
424
+ o.elename = elename
425
+ end
426
+ o.definedtype = typedef
427
+ return o
428
+ when :TYPE_EMPTY
429
+ o = SOAPNil.decode(elename)
430
+ o.definedtype = typedef
431
+ return o
432
+ else
433
+ raise RuntimeError.new(
434
+ "Unknown kind of complexType: #{typedef.compoundtype}")
435
+ end
436
+ nil
437
+ end
438
+
439
+ def decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
440
+ if arytypestr
441
+ type = typestr ? ns.parse(typestr) : ValueArrayName
442
+ node = SOAPArray.decode(elename, type, ns.parse(arytypestr))
443
+ node.extraattr.update(attrs)
444
+ return node
445
+ end
446
+
447
+ type = nil
448
+ if typestr
449
+ type = ns.parse(typestr)
450
+ elsif parent.is_a?(SOAPArray)
451
+ type = parent.arytype
452
+ else
453
+ # Since it's in dynamic(without any type) encoding process,
454
+ # assumes entity as its type itself.
455
+ # <SOAP-ENC:Array ...> => type Array in SOAP-ENC.
456
+ # <Country xmlns="foo"> => type Country in foo.
457
+ type = elename
458
+ end
459
+
460
+ if klass = TypeMap[type]
461
+ node = decode_basetype(klass, elename)
462
+ node.extraattr.update(attrs)
463
+ return node
464
+ end
465
+
466
+ # Unknown type... Struct or String
467
+ SOAPUnknown.new(self, elename, type, attrs)
468
+ end
469
+
470
+ def decode_textbuf(node, textbufstr)
471
+ case node
472
+ when XSD::XSDHexBinary, XSD::XSDBase64Binary
473
+ node.set_encoded(textbufstr)
474
+ when XSD::XSDString
475
+ if @charset
476
+ textbufstr = XSD::Charset.encoding_from_xml(textbufstr, @charset)
477
+ end
478
+ if node.definedtype
479
+ node.definedtype.check_lexical_format(textbufstr)
480
+ end
481
+ node.set(textbufstr)
482
+ when SOAPNil
483
+ # Nothing to do.
484
+ when SOAPBasetype
485
+ node.set(textbufstr)
486
+ else
487
+ # Nothing to do...
488
+ end
489
+ end
490
+
491
+ NilLiteralMap = {
492
+ 'true' => true,
493
+ '1' => true,
494
+ 'false' => false,
495
+ '0' => false
496
+ }
497
+ RootLiteralMap = {
498
+ '1' => 1,
499
+ '0' => 0
500
+ }
501
+ def extract_attrs(ns, attrs)
502
+ is_nil = NilLiteralMap[attrs[XSD::AttrNilName]]
503
+ type = attrs[XSD::AttrTypeName]
504
+ arytype = attrs[AttrArrayTypeName]
505
+ root = attrs[AttrRootName]
506
+ offset = attrs[AttrOffsetName]
507
+ position = attrs[AttrPositionName]
508
+ href = attrs[AttrHrefName]
509
+ id = attrs[AttrIdName]
510
+ if attrs.key?(Mapping::RubyIVarName)
511
+ attrs[Mapping::RubyIVarName] =
512
+ decode_ref_value(ns, attrs[Mapping::RubyIVarName])
513
+ end
514
+ return is_nil, type, arytype, root, offset, position, href, id
515
+ end
516
+
517
+ def decode_ref_value(ns, value)
518
+ if /\A#/ =~ value
519
+ o = SOAPReference.decode(nil, value)
520
+ @refpool << o
521
+ o
522
+ else
523
+ value
524
+ end
525
+ end
526
+
527
+ def decode_arypos(position)
528
+ /^\[(.+)\]$/ =~ position
529
+ $1.split(',').collect { |s| s.to_i }
530
+ end
531
+
532
+ def decode_resolve_id
533
+ count = @refpool.length # To avoid infinite loop
534
+ while !@refpool.empty? && count > 0
535
+ @refpool = @refpool.find_all { |ref|
536
+ o = @idpool.find { |item|
537
+ item.id == ref.refid
538
+ }
539
+ if o.is_a?(SOAPReference)
540
+ true # link of link.
541
+ elsif o
542
+ ref.__setobj__(o)
543
+ false
544
+ elsif o = ref.rootnode.external_content[ref.refid]
545
+ ref.__setobj__(o)
546
+ false
547
+ else
548
+ raise EncodingStyleError.new("unresolved reference: #{ref.refid}")
549
+ end
550
+ }
551
+ count -= 1
552
+ end
553
+ end
554
+ end
555
+
556
+ SOAPHandler.new
557
+
558
+
559
+ end
560
+ end