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,120 @@
1
+ # SOAP4R - EncodingStyle handler 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 'soap/soap'
10
+ require 'soap/baseData'
11
+ require 'soap/element'
12
+
13
+
14
+ module SOAP
15
+ module EncodingStyle
16
+
17
+
18
+ class Handler
19
+ @@handlers = {}
20
+
21
+ class EncodingStyleError < Error; end
22
+
23
+ class << self
24
+ def uri
25
+ self::Namespace
26
+ end
27
+
28
+ def handler(uri)
29
+ @@handlers[uri]
30
+ end
31
+
32
+ def each
33
+ @@handlers.each do |key, value|
34
+ yield(value)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def add_handler
41
+ @@handlers[self.uri] = self
42
+ end
43
+ end
44
+
45
+ attr_reader :charset
46
+ attr_accessor :generate_explicit_type
47
+ def decode_typemap=(definedtypes)
48
+ @decode_typemap = definedtypes
49
+ end
50
+
51
+ def initialize(charset)
52
+ @charset = charset
53
+ @generate_explicit_type = true
54
+ @decode_typemap = nil
55
+ end
56
+
57
+ ###
58
+ ## encode interface.
59
+ #
60
+ # Returns a XML instance as a string.
61
+ def encode_data(generator, ns, data, parent)
62
+ raise NotImplementError
63
+ end
64
+
65
+ def encode_data_end(generator, ns, data, parent)
66
+ raise NotImplementError
67
+ end
68
+
69
+ def encode_prologue
70
+ end
71
+
72
+ def encode_epilogue
73
+ end
74
+
75
+ ###
76
+ ## decode interface.
77
+ #
78
+ # Returns SOAP/OM data.
79
+ def decode_tag(ns, name, attrs, parent)
80
+ raise NotImplementError
81
+ end
82
+
83
+ def decode_tag_end(ns, name)
84
+ raise NotImplementError
85
+ end
86
+
87
+ def decode_text(ns, text)
88
+ raise NotImplementError
89
+ end
90
+
91
+ def decode_prologue
92
+ end
93
+
94
+ def decode_epilogue
95
+ end
96
+
97
+ def encode_attr_key(attrs, ns, qname)
98
+ if qname.namespace.nil?
99
+ qname.name
100
+ else
101
+ unless ns.assigned_as_tagged?(qname.namespace)
102
+ Generator.assign_ns!(attrs, ns, qname.namespace)
103
+ end
104
+ ns.name_attr(qname)
105
+ end
106
+ end
107
+
108
+ def encode_qname(attrs, ns, qname)
109
+ if qname.namespace.nil?
110
+ qname.name
111
+ else
112
+ Generator.assign_ns(attrs, ns, qname.namespace)
113
+ ns.name(qname)
114
+ end
115
+ end
116
+ end
117
+
118
+
119
+ end
120
+ end
@@ -0,0 +1,195 @@
1
+ # SOAP4R - XML Literal EncodingStyle handler 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 'soap/encodingstyle/handler'
10
+
11
+
12
+ module SOAP
13
+ module EncodingStyle
14
+
15
+
16
+ class LiteralHandler < Handler
17
+ Namespace = SOAP::LiteralNamespace
18
+ add_handler
19
+
20
+ def initialize(charset = nil)
21
+ super(charset)
22
+ @textbuf = []
23
+ end
24
+
25
+
26
+ ###
27
+ ## encode interface.
28
+ #
29
+ def encode_data(generator, ns, data, parent)
30
+ attrs = {}
31
+ name = generator.encode_name(ns, data, attrs)
32
+ if data.type and data.type.name and
33
+ (@generate_explicit_type or data.force_typed)
34
+ data.extraattr[XSD::AttrTypeName] = data.type
35
+ end
36
+ data.extraattr.each do |key, value|
37
+ keytag = key
38
+ if key.is_a?(XSD::QName)
39
+ keytag = encode_attr_key(attrs, ns, key)
40
+ end
41
+ if value.is_a?(XSD::QName)
42
+ value = encode_qname(attrs, ns, value)
43
+ end
44
+ attrs[keytag] = value
45
+ end
46
+ case data
47
+ when SOAPExternalReference
48
+ # do not encode SOAPExternalReference in
49
+ # literalHandler (which is used for literal service)
50
+ data.referred
51
+ when SOAPRawString
52
+ generator.encode_tag(name, attrs)
53
+ generator.encode_rawstring(data.to_s)
54
+ when XSD::XSDString
55
+ generator.encode_tag(name, attrs)
56
+ str = decode_str(data.to_s)
57
+ generator.encode_string(str)
58
+ when XSD::XSDAnySimpleType
59
+ generator.encode_tag(name, attrs)
60
+ generator.encode_string(data.to_s)
61
+ when SOAPStruct
62
+ generator.encode_tag(name, attrs)
63
+ data.each do |key, value|
64
+ generator.encode_child(ns, value, data)
65
+ end
66
+ when SOAPArray
67
+ generator.encode_tag(name, attrs)
68
+ data.traverse do |child, *rank|
69
+ data.position = nil
70
+ generator.encode_child(ns, child, data)
71
+ end
72
+ when SOAPElement
73
+ unless generator.use_default_namespace
74
+ # passes 2 times for simplifying namespace definition
75
+ data.each do |key, value|
76
+ if value.elename.namespace
77
+ Generator.assign_ns(attrs, ns, value.elename.namespace)
78
+ end
79
+ end
80
+ end
81
+ if data.text and data.text.is_a?(XSD::QName)
82
+ Generator.assign_ns(attrs, ns, data.text.namespace)
83
+ end
84
+ generator.encode_tag(name, attrs)
85
+ if data.text
86
+ if data.text.is_a?(XSD::QName)
87
+ text = ns.name(data.text)
88
+ else
89
+ text = data.text
90
+ end
91
+ generator.encode_string(text)
92
+ end
93
+ data.each do |key, value|
94
+ generator.encode_child(ns, value, data)
95
+ end
96
+ else
97
+ raise EncodingStyleError.new(
98
+ "unknown object:#{data} in this encodingStyle")
99
+ end
100
+ end
101
+
102
+ def encode_data_end(generator, ns, data, parent)
103
+ # do not encode SOAPExternalReference in
104
+ # literalHandler (which is used for literal service)
105
+ return nil if data.is_a?(SOAPExternalReference)
106
+ name = generator.encode_name_end(ns, data)
107
+ cr = (data.is_a?(SOAPCompoundtype) and data.have_member)
108
+ generator.encode_tag_end(name, cr)
109
+ end
110
+
111
+
112
+ ###
113
+ ## decode interface.
114
+ #
115
+ def decode_tag(ns, elename, attrs, parent)
116
+ @textbuf.clear
117
+ if attrs[XSD::AttrNilName] == 'true'
118
+ o = SOAPNil.decode(elename)
119
+ else
120
+ o = SOAPElement.decode(elename)
121
+ end
122
+ if definedtype = attrs[XSD::AttrTypeName]
123
+ o.type = ns.parse(definedtype)
124
+ end
125
+ o.parent = parent
126
+ o.extraattr.update(attrs)
127
+ decode_parent(parent, o)
128
+ o
129
+ end
130
+
131
+ def decode_tag_end(ns, node)
132
+ textbufstr = @textbuf.join
133
+ @textbuf.clear
134
+ o = node.node
135
+ decode_textbuf(o, textbufstr)
136
+ end
137
+
138
+ def decode_text(ns, text)
139
+ # @textbuf is set at decode_tag_end.
140
+ @textbuf << text
141
+ end
142
+
143
+ def decode_prologue
144
+ end
145
+
146
+ def decode_epilogue
147
+ end
148
+
149
+ def decode_parent(parent, node)
150
+ return unless parent.node
151
+ case parent.node
152
+ when SOAPElement
153
+ parent.node.add(node)
154
+ node.parent = parent.node
155
+ when SOAPStruct
156
+ parent.node.add(node.elename.name, node)
157
+ node.parent = parent.node
158
+ when SOAPArray
159
+ if node.position
160
+ parent.node[*(decode_arypos(node.position))] = node
161
+ parent.node.sparse = true
162
+ else
163
+ parent.node.add(node)
164
+ end
165
+ node.parent = parent.node
166
+ else
167
+ raise EncodingStyleError.new("illegal parent: #{parent.node}")
168
+ end
169
+ end
170
+
171
+ private
172
+
173
+ def decode_textbuf(node, textbufstr)
174
+ case node
175
+ when XSD::XSDString, SOAPElement
176
+ if @charset
177
+ node.set(decode_str(textbufstr))
178
+ else
179
+ node.set(textbufstr)
180
+ end
181
+ else
182
+ # Nothing to do...
183
+ end
184
+ end
185
+
186
+ def decode_str(str)
187
+ @charset ? XSD::Charset.encoding_from_xml(str, @charset) : str
188
+ end
189
+ end
190
+
191
+ LiteralHandler.new
192
+
193
+
194
+ end
195
+ end
@@ -0,0 +1,559 @@
1
+ # SOAP4R - SOAP EncodingStyle handler 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 'soap/encodingstyle/handler'
10
+ require 'soap/mapping/registry'
11
+
12
+
13
+ module SOAP
14
+ module EncodingStyle
15
+
16
+
17
+ class SOAPHandler < Handler
18
+ Namespace = SOAP::EncodingNamespace
19
+ add_handler
20
+
21
+ def initialize(charset = nil)
22
+ super(charset)
23
+ @refpool = []
24
+ @idpool = []
25
+ @textbuf = []
26
+ @is_first_top_ele = true
27
+ end
28
+
29
+
30
+ ###
31
+ ## encode interface.
32
+ #
33
+ def encode_data(generator, ns, data, parent)
34
+ attrs = encode_attrs(generator, ns, data, parent)
35
+ if parent && parent.is_a?(SOAPArray) && parent.position
36
+ attrs[ns.name(AttrPositionName)] = "[#{parent.position.join(',')}]"
37
+ end
38
+ name = generator.encode_name(ns, data, attrs)
39
+ case data
40
+ when SOAPReference
41
+ attrs['href'] = data.refidstr
42
+ generator.encode_tag(name, attrs)
43
+ when SOAPExternalReference
44
+ data.referred
45
+ attrs['href'] = data.refidstr
46
+ generator.encode_tag(name, attrs)
47
+ when SOAPRawString
48
+ generator.encode_tag(name, attrs)
49
+ generator.encode_rawstring(data.to_s)
50
+ when XSD::XSDString
51
+ generator.encode_tag(name, attrs)
52
+ generator.encode_string(@charset ?
53
+ XSD::Charset.encoding_to_xml(data.to_s, @charset) : data.to_s)
54
+ when XSD::XSDAnySimpleType
55
+ generator.encode_tag(name, attrs)
56
+ generator.encode_string(data.to_s)
57
+ when SOAPStruct
58
+ generator.encode_tag(name, attrs)
59
+ data.each do |key, value|
60
+ generator.encode_child(ns, value, data)
61
+ end
62
+ when SOAPArray
63
+ generator.encode_tag(name, attrs)
64
+ data.traverse do |child, *rank|
65
+ data.position = data.sparse ? rank : nil
66
+ generator.encode_child(ns, child, data)
67
+ end
68
+ else
69
+ raise EncodingStyleError.new(
70
+ "unknown object:#{data} in this encodingStyle")
71
+ end
72
+ end
73
+
74
+ def encode_data_end(generator, ns, data, parent)
75
+ name = generator.encode_name_end(ns, data)
76
+ cr = (data.is_a?(SOAPCompoundtype) and data.have_member)
77
+ generator.encode_tag_end(name, cr)
78
+ end
79
+
80
+
81
+ ###
82
+ ## decode interface.
83
+ #
84
+ class SOAPTemporalObject
85
+ attr_accessor :parent
86
+ attr_accessor :position
87
+ attr_accessor :id
88
+ attr_accessor :root
89
+
90
+ def initialize
91
+ @parent = nil
92
+ @position = nil
93
+ @id = nil
94
+ @root = nil
95
+ end
96
+ end
97
+
98
+ class SOAPUnknown < SOAPTemporalObject
99
+ attr_reader :type
100
+ attr_accessor :definedtype
101
+ attr_reader :extraattr
102
+
103
+ def initialize(handler, elename, type, extraattr)
104
+ super()
105
+ @handler = handler
106
+ @elename = elename
107
+ @type = type
108
+ @extraattr = extraattr
109
+ @definedtype = nil
110
+ end
111
+
112
+ def as_struct
113
+ if @extraattr[XSD::AttrNilName] == 'true'
114
+ return as_nil
115
+ end
116
+ o = SOAPStruct.decode(@elename, @type)
117
+ o.id = @id
118
+ o.root = @root
119
+ o.parent = @parent
120
+ o.position = @position
121
+ o.extraattr.update(@extraattr)
122
+ @handler.decode_parent(@parent, o)
123
+ o
124
+ end
125
+
126
+ def as_string
127
+ if @extraattr[XSD::AttrNilName] == 'true'
128
+ return as_nil
129
+ end
130
+ o = SOAPString.decode(@elename)
131
+ o.id = @id
132
+ o.root = @root
133
+ o.parent = @parent
134
+ o.position = @position
135
+ o.extraattr.update(@extraattr)
136
+ @handler.decode_parent(@parent, o)
137
+ o
138
+ end
139
+
140
+ def as_nil
141
+ o = SOAPNil.decode(@elename)
142
+ o.id = @id
143
+ o.root = @root
144
+ o.parent = @parent
145
+ o.position = @position
146
+ o.extraattr.update(@extraattr)
147
+ @handler.decode_parent(@parent, o)
148
+ o
149
+ end
150
+ end
151
+
152
+ def decode_tag(ns, elename, attrs, parent)
153
+ @textbuf.clear
154
+ is_nil, type, arytype, root, offset, position, href, id =
155
+ extract_attrs(ns, attrs)
156
+ o = nil
157
+ if is_nil
158
+ o = SOAPNil.decode(elename)
159
+ elsif href
160
+ o = SOAPReference.decode(elename, href)
161
+ @refpool << o
162
+ elsif @decode_typemap
163
+ o = decode_tag_by_wsdl(ns, elename, type, parent.node, arytype, attrs)
164
+ else
165
+ o = decode_tag_by_type(ns, elename, type, parent.node, arytype, attrs)
166
+ end
167
+
168
+ if o.is_a?(SOAPArray)
169
+ if offset
170
+ o.offset = decode_arypos(offset)
171
+ o.sparse = true
172
+ else
173
+ o.sparse = false
174
+ end
175
+ end
176
+
177
+ o.parent = parent
178
+ o.id = id
179
+ o.root = root
180
+ o.position = position
181
+
182
+ unless o.is_a?(SOAPTemporalObject)
183
+ @idpool << o if o.id
184
+ decode_parent(parent, o)
185
+ end
186
+ o
187
+ end
188
+
189
+ def decode_tag_end(ns, node)
190
+ textbufstr = @textbuf.join
191
+ @textbuf.clear
192
+ o = node.node
193
+ if o.is_a?(SOAPUnknown)
194
+ newnode = if /\A\s*\z/ =~ textbufstr
195
+ o.as_struct
196
+ else
197
+ o.as_string
198
+ end
199
+ if newnode.id
200
+ @idpool << newnode
201
+ end
202
+ node.replace_node(newnode)
203
+ o = node.node
204
+ end
205
+ decode_textbuf(o, textbufstr)
206
+ # unlink definedtype
207
+ o.definedtype = nil
208
+ end
209
+
210
+ def decode_text(ns, text)
211
+ @textbuf << text
212
+ end
213
+
214
+ def decode_prologue
215
+ @refpool.clear
216
+ @idpool.clear
217
+ @is_first_top_ele = true
218
+ end
219
+
220
+ def decode_epilogue
221
+ decode_resolve_id
222
+ end
223
+
224
+ def decode_parent(parent, node)
225
+ return unless parent.node
226
+ case parent.node
227
+ when SOAPUnknown
228
+ newparent = parent.node.as_struct
229
+ node.parent = newparent
230
+ if newparent.id
231
+ @idpool << newparent
232
+ end
233
+ parent.replace_node(newparent)
234
+ decode_parent(parent, node)
235
+ when SOAPStruct
236
+ parent.node.add(node.elename.name, node)
237
+ node.parent = parent.node
238
+ when SOAPArray
239
+ if node.position
240
+ parent.node[*(decode_arypos(node.position))] = node
241
+ parent.node.sparse = true
242
+ else
243
+ parent.node.add(node)
244
+ end
245
+ node.parent = parent.node
246
+ else
247
+ raise EncodingStyleError.new("illegal parent: #{parent.node}")
248
+ end
249
+ end
250
+
251
+ private
252
+
253
+ def content_ranksize(typename)
254
+ typename.scan(/\[[\d,]*\]$/)[0]
255
+ end
256
+
257
+ def content_typename(typename)
258
+ typename.sub(/\[,*\]$/, '')
259
+ end
260
+
261
+ def create_arytype(ns, data)
262
+ XSD::QName.new(data.arytype.namespace,
263
+ content_typename(data.arytype.name) + "[#{data.size.join(',')}]")
264
+ end
265
+
266
+ def encode_attrs(generator, ns, data, parent)
267
+ attrs = {}
268
+ return attrs if data.is_a?(SOAPReference)
269
+
270
+ if !parent || parent.encodingstyle != EncodingNamespace
271
+ if @generate_explicit_type
272
+ Generator.assign_ns(attrs, ns, EnvelopeNamespace)
273
+ attrs[ns.name(AttrEncodingStyleName)] = EncodingNamespace
274
+ end
275
+ data.encodingstyle = EncodingNamespace
276
+ end
277
+
278
+ if data.is_a?(SOAPNil)
279
+ attrs[ns.name(XSD::AttrNilName)] = XSD::NilValue
280
+ elsif @generate_explicit_type
281
+ if data.type.namespace
282
+ Generator.assign_ns(attrs, ns, data.type.namespace)
283
+ end
284
+ if data.is_a?(SOAPArray)
285
+ if data.arytype.namespace
286
+ Generator.assign_ns(attrs, ns, data.arytype.namespace)
287
+ end
288
+ Generator.assign_ns(attrs, ns, EncodingNamespace)
289
+ attrs[ns.name(AttrArrayTypeName)] = ns.name(create_arytype(ns, data))
290
+ if data.type.name
291
+ attrs[ns.name(XSD::AttrTypeName)] = ns.name(data.type)
292
+ end
293
+ elsif parent && parent.is_a?(SOAPArray) && (parent.arytype == data.type)
294
+ # No need to add.
295
+ elsif !data.type.namespace
296
+ # No need to add.
297
+ else
298
+ attrs[ns.name(XSD::AttrTypeName)] = ns.name(data.type)
299
+ end
300
+ end
301
+ data.extraattr.each do |key, value|
302
+ keytag = key
303
+ if key.is_a?(XSD::QName)
304
+ keytag = encode_attr_key(attrs, ns, key)
305
+ end
306
+ if value.is_a?(XSD::QName)
307
+ value = encode_qname(attrs, ns, value)
308
+ else
309
+ value = encode_attr_value(generator, ns, key, value)
310
+ end
311
+ attrs[keytag] = value
312
+ end
313
+ if data.id
314
+ attrs['id'] = data.id
315
+ end
316
+ attrs
317
+ end
318
+
319
+ def encode_attr_value(generator, ns, qname, value)
320
+ case value
321
+ when SOAPType
322
+ ref = SOAPReference.new(value)
323
+ generator.add_reftarget(qname.name, value)
324
+ ref.refidstr
325
+ else
326
+ value.to_s
327
+ end
328
+ end
329
+
330
+ def decode_tag_by_wsdl(ns, elename, typestr, parent, arytypestr, attrs)
331
+ o = nil
332
+ if parent.class == SOAPBody
333
+ # root element: should branch by root attribute?
334
+ if @is_first_top_ele
335
+ # Unqualified name is allowed here.
336
+ @is_first_top_ele = false
337
+ type = @decode_typemap[elename] ||
338
+ @decode_typemap.find_name(elename.name)
339
+ if type
340
+ o = SOAPStruct.new(elename)
341
+ o.elename = elename
342
+ o.definedtype = type
343
+ return o
344
+ end
345
+ end
346
+ # multi-ref element.
347
+ if typestr
348
+ typename = ns.parse(typestr)
349
+ typedef = @decode_typemap[typename]
350
+ if typedef
351
+ return decode_definedtype(elename, typename, typedef, arytypestr)
352
+ end
353
+ end
354
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
355
+ end
356
+
357
+ if parent.type == XSD::AnyTypeName
358
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
359
+ end
360
+
361
+ # parent.definedtype == nil means the parent is SOAPUnknown. SOAPUnknown
362
+ # is generated by decode_tag_by_type when its type is anyType.
363
+ parenttype = parent.definedtype || @decode_typemap[parent.type]
364
+ unless parenttype
365
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
366
+ end
367
+
368
+ definedtype_name = parenttype.child_type(elename)
369
+ if definedtype_name and (klass = TypeMap[definedtype_name])
370
+ return decode_basetype(klass, elename)
371
+ elsif definedtype_name == XSD::AnyTypeName
372
+ return decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
373
+ end
374
+
375
+ if definedtype_name
376
+ typedef = @decode_typemap[definedtype_name]
377
+ else
378
+ typedef = parenttype.child_defined_complextype(elename)
379
+ end
380
+ decode_definedtype(elename, definedtype_name, typedef, arytypestr)
381
+ end
382
+
383
+ def decode_definedtype(elename, typename, typedef, arytypestr)
384
+ unless typedef
385
+ raise EncodingStyleError.new("unknown type '#{typename}'")
386
+ end
387
+ if typedef.is_a?(::WSDL::XMLSchema::SimpleType)
388
+ decode_defined_simpletype(elename, typename, typedef, arytypestr)
389
+ else
390
+ decode_defined_complextype(elename, typename, typedef, arytypestr)
391
+ end
392
+ end
393
+
394
+ def decode_basetype(klass, elename)
395
+ klass.decode(elename)
396
+ end
397
+
398
+ def decode_defined_simpletype(elename, typename, typedef, arytypestr)
399
+ if typedef.base
400
+ o = decode_basetype(TypeMap[typedef.base], elename)
401
+ o.definedtype = typedef
402
+ o
403
+ else
404
+ raise RuntimeError.new("unsupported simpleType: #{typedef}")
405
+ end
406
+ end
407
+
408
+ def decode_defined_complextype(elename, typename, typedef, arytypestr)
409
+ case typedef.compoundtype
410
+ when :TYPE_STRUCT, :TYPE_MAP
411
+ o = SOAPStruct.decode(elename, typename)
412
+ o.definedtype = typedef
413
+ return o
414
+ when :TYPE_ARRAY
415
+ expected_arytype = typedef.find_arytype
416
+ if arytypestr
417
+ actual_arytype = XSD::QName.new(expected_arytype.namespace,
418
+ content_typename(expected_arytype.name) <<
419
+ content_ranksize(arytypestr))
420
+ o = SOAPArray.decode(elename, typename, actual_arytype)
421
+ else
422
+ o = SOAPArray.new(typename, 1, expected_arytype)
423
+ o.elename = elename
424
+ end
425
+ o.definedtype = typedef
426
+ return o
427
+ when :TYPE_EMPTY
428
+ o = SOAPNil.decode(elename)
429
+ o.definedtype = typedef
430
+ return o
431
+ else
432
+ raise RuntimeError.new(
433
+ "Unknown kind of complexType: #{typedef.compoundtype}")
434
+ end
435
+ nil
436
+ end
437
+
438
+ def decode_tag_by_type(ns, elename, typestr, parent, arytypestr, attrs)
439
+ if arytypestr
440
+ type = typestr ? ns.parse(typestr) : ValueArrayName
441
+ node = SOAPArray.decode(elename, type, ns.parse(arytypestr))
442
+ node.extraattr.update(attrs)
443
+ return node
444
+ end
445
+
446
+ type = nil
447
+ if typestr
448
+ type = ns.parse(typestr)
449
+ elsif parent.is_a?(SOAPArray)
450
+ type = parent.arytype
451
+ else
452
+ # Since it's in dynamic(without any type) encoding process,
453
+ # assumes entity as its type itself.
454
+ # <SOAP-ENC:Array ...> => type Array in SOAP-ENC.
455
+ # <Country xmlns="foo"> => type Country in foo.
456
+ type = elename
457
+ end
458
+
459
+ if klass = TypeMap[type]
460
+ node = decode_basetype(klass, elename)
461
+ node.extraattr.update(attrs)
462
+ return node
463
+ end
464
+
465
+ # Unknown type... Struct or String
466
+ SOAPUnknown.new(self, elename, type, attrs)
467
+ end
468
+
469
+ def decode_textbuf(node, textbufstr)
470
+ case node
471
+ when XSD::XSDHexBinary, XSD::XSDBase64Binary
472
+ node.set_encoded(textbufstr)
473
+ when XSD::XSDString
474
+ if @charset
475
+ textbufstr = XSD::Charset.encoding_from_xml(textbufstr, @charset)
476
+ end
477
+ if node.definedtype
478
+ node.definedtype.check_lexical_format(textbufstr)
479
+ end
480
+ node.set(textbufstr)
481
+ when SOAPNil
482
+ # Nothing to do.
483
+ when SOAPBasetype
484
+ node.set(textbufstr)
485
+ else
486
+ # Nothing to do...
487
+ end
488
+ end
489
+
490
+ NilLiteralMap = {
491
+ 'true' => true,
492
+ '1' => true,
493
+ 'false' => false,
494
+ '0' => false
495
+ }
496
+ RootLiteralMap = {
497
+ '1' => 1,
498
+ '0' => 0
499
+ }
500
+ def extract_attrs(ns, attrs)
501
+ is_nil = NilLiteralMap[attrs[XSD::AttrNilName]]
502
+ type = attrs[XSD::AttrTypeName]
503
+ arytype = attrs[AttrArrayTypeName]
504
+ root = attrs[AttrRootName]
505
+ offset = attrs[AttrOffsetName]
506
+ position = attrs[AttrPositionName]
507
+ href = attrs[AttrHrefName]
508
+ id = attrs[AttrIdName]
509
+ if attrs.key?(Mapping::RubyIVarName)
510
+ attrs[Mapping::RubyIVarName] =
511
+ decode_ref_value(ns, attrs[Mapping::RubyIVarName])
512
+ end
513
+ return is_nil, type, arytype, root, offset, position, href, id
514
+ end
515
+
516
+ def decode_ref_value(ns, value)
517
+ if /\A#/ =~ value
518
+ o = SOAPReference.decode(nil, value)
519
+ @refpool << o
520
+ o
521
+ else
522
+ value
523
+ end
524
+ end
525
+
526
+ def decode_arypos(position)
527
+ /^\[(.+)\]$/ =~ position
528
+ $1.split(',').collect { |s| s.to_i }
529
+ end
530
+
531
+ def decode_resolve_id
532
+ count = @refpool.length # To avoid infinite loop
533
+ while !@refpool.empty? && count > 0
534
+ @refpool = @refpool.find_all { |ref|
535
+ o = @idpool.find { |item|
536
+ item.id == ref.refid
537
+ }
538
+ if o.is_a?(SOAPReference)
539
+ true # link of link.
540
+ elsif o
541
+ ref.__setobj__(o)
542
+ false
543
+ elsif o = ref.rootnode.external_content[ref.refid]
544
+ ref.__setobj__(o)
545
+ false
546
+ else
547
+ raise EncodingStyleError.new("unresolved reference: #{ref.refid}")
548
+ end
549
+ }
550
+ count -= 1
551
+ end
552
+ end
553
+ end
554
+
555
+ SOAPHandler.new
556
+
557
+
558
+ end
559
+ end