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,62 @@
1
+ # encoding: ASCII-8BIT
2
+ # WSDL4R - WSDL service definition.
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 'wsdl/info'
11
+ require 'xsd/namedelements'
12
+
13
+
14
+ module WSDL
15
+
16
+
17
+ class Service < Info
18
+ attr_reader :name # required
19
+ attr_reader :ports
20
+ attr_reader :soap_address
21
+
22
+ def initialize
23
+ super
24
+ @name = nil
25
+ @ports = XSD::NamedElements.new
26
+ @soap_address = nil
27
+ end
28
+
29
+ def targetnamespace
30
+ parent.targetnamespace
31
+ end
32
+
33
+ def parse_element(element)
34
+ case element
35
+ when PortName
36
+ o = Port.new
37
+ @ports << o
38
+ o
39
+ when SOAPAddressName
40
+ o = WSDL::SOAP::Address.new
41
+ @soap_address = o
42
+ o
43
+ when DocumentationName
44
+ o = Documentation.new
45
+ o
46
+ else
47
+ nil
48
+ end
49
+ end
50
+
51
+ def parse_attr(attr, value)
52
+ case attr
53
+ when NameAttrName
54
+ @name = XSD::QName.new(targetnamespace, value.source)
55
+ else
56
+ nil
57
+ end
58
+ end
59
+ end
60
+
61
+
62
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: ASCII-8BIT
2
+ # WSDL4R - WSDL SOAP address definition.
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 'wsdl/info'
11
+
12
+
13
+ module WSDL
14
+ module SOAP
15
+
16
+
17
+ class Address < Info
18
+ attr_reader :location
19
+
20
+ def initialize
21
+ super
22
+ @location = nil
23
+ end
24
+
25
+ def parse_element(element)
26
+ nil
27
+ end
28
+
29
+ def parse_attr(attr, value)
30
+ case attr
31
+ when LocationAttrName
32
+ @location = value.source
33
+ else
34
+ nil
35
+ end
36
+ end
37
+ end
38
+
39
+
40
+ end
41
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: ASCII-8BIT
2
+ # WSDL4R - WSDL SOAP binding definition.
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 'wsdl/info'
11
+
12
+
13
+ module WSDL
14
+ module SOAP
15
+
16
+
17
+ class Binding < Info
18
+ attr_reader :style
19
+ attr_reader :transport
20
+
21
+ def initialize
22
+ super
23
+ @style = nil
24
+ @transport = nil
25
+ end
26
+
27
+ def parse_element(element)
28
+ nil
29
+ end
30
+
31
+ def parse_attr(attr, value)
32
+ case attr
33
+ when StyleAttrName
34
+ if ["document", "rpc"].include?(value.source)
35
+ @style = value.source.intern
36
+ else
37
+ raise Parser::AttributeConstraintError.new(
38
+ "Unexpected value #{ value }.")
39
+ end
40
+ when TransportAttrName
41
+ @transport = value.source
42
+ else
43
+ nil
44
+ end
45
+ end
46
+ end
47
+
48
+
49
+ end
50
+ end
@@ -0,0 +1,59 @@
1
+ # encoding: ASCII-8BIT
2
+ # WSDL4R - WSDL SOAP body definition.
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 'wsdl/info'
11
+
12
+
13
+ module WSDL
14
+ module SOAP
15
+
16
+
17
+ class Body < Info
18
+ attr_reader :parts
19
+ attr_reader :use # required
20
+ attr_reader :encodingstyle
21
+ attr_reader :namespace
22
+
23
+ def initialize
24
+ super
25
+ @parts = nil
26
+ @use = nil
27
+ @encodingstyle = nil
28
+ @namespace = nil
29
+ end
30
+
31
+ def parse_element(element)
32
+ nil
33
+ end
34
+
35
+ def parse_attr(attr, value)
36
+ case attr
37
+ when PartsAttrName
38
+ @parts = value.source
39
+ when UseAttrName
40
+ if ['literal', 'encoded'].include?(value.source)
41
+ @use = value.source.intern
42
+ else
43
+ raise RuntimeError.new("unknown use of soap:body: #{value.source}")
44
+ end
45
+ when EncodingStyleAttrName
46
+ @encodingstyle = value.source
47
+ @encodingstyle = nil if @encodingstyle.to_s.empty?
48
+ value.source
49
+ when NamespaceAttrName
50
+ @namespace = value.source
51
+ else
52
+ nil
53
+ end
54
+ end
55
+ end
56
+
57
+
58
+ end
59
+ end
@@ -0,0 +1,93 @@
1
+ # encoding: ASCII-8BIT
2
+ # WSDL4R - Creating CGI stub code from WSDL.
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 'wsdl/info'
11
+ require 'wsdl/soap/mappingRegistryCreator'
12
+ require 'wsdl/soap/methodDefCreator'
13
+ require 'wsdl/soap/classDefCreatorSupport'
14
+
15
+
16
+ module WSDL
17
+ module SOAP
18
+
19
+
20
+ class CGIStubCreator
21
+ include ClassDefCreatorSupport
22
+
23
+ attr_reader :definitions
24
+
25
+ def initialize(definitions, name_creator, modulepath = nil)
26
+ @definitions = definitions
27
+ @name_creator = name_creator
28
+ @modulepath = modulepath
29
+ end
30
+
31
+ def dump(service_name)
32
+ warn("CGI stub can have only 1 port. Creating stub for the first port... Rests are ignored.")
33
+ services = @definitions.service(service_name)
34
+ unless services
35
+ raise RuntimeError.new("service not defined: #{service_name}")
36
+ end
37
+ ports = services.ports
38
+ if ports.empty?
39
+ raise RuntimeError.new("ports not found for #{service_name}")
40
+ end
41
+ port = ports[0]
42
+ if port.porttype.nil?
43
+ raise RuntimeError.new("porttype not found for #{port}")
44
+ end
45
+ dump_porttype(port.porttype)
46
+ end
47
+
48
+ private
49
+
50
+ def dump_porttype(porttype)
51
+ class_name = mapped_class_name(porttype.name, @modulepath)
52
+ defined_const = {}
53
+ methoddef = MethodDefCreator.new(@definitions, @name_creator, @modulepath, defined_const).dump(porttype.name)
54
+ wsdl_name = @definitions.name ? @definitions.name.name : 'default'
55
+ mrname = safeconstname(wsdl_name + 'MappingRegistry')
56
+ c1 = XSD::CodeGen::ClassDef.new(class_name)
57
+ c1.def_require("soap/rpc/cgistub")
58
+ c1.def_code <<-EOD
59
+ Methods = [
60
+ #{methoddef.gsub(/^/, " ")}
61
+ ]
62
+ EOD
63
+ defined_const.each do |ns, tag|
64
+ c1.def_const(tag, dq(ns))
65
+ end
66
+ c2 = XSD::CodeGen::ClassDef.new(class_name + "App",
67
+ "::SOAP::RPC::CGIStub")
68
+ c2.def_method("initialize", "*arg") do
69
+ <<-EOD
70
+ super(*arg)
71
+ servant = #{class_name}.new
72
+ #{class_name}::Methods.each do |definitions|
73
+ opt = definitions.last
74
+ if opt[:request_style] == :document
75
+ @router.add_document_operation(servant, *definitions)
76
+ else
77
+ @router.add_rpc_operation(servant, *definitions)
78
+ end
79
+ end
80
+ self.mapping_registry = #{mrname}::EncodedRegistry
81
+ self.literal_mapping_registry = #{mrname}::LiteralRegistry
82
+ self.level = Logger::Severity::ERROR
83
+ EOD
84
+ end
85
+ c1.dump + "\n" + c2.dump + format(<<-EOD)
86
+ #{class_name}App.new('app', nil).start
87
+ EOD
88
+ end
89
+ end
90
+
91
+
92
+ end
93
+ end
@@ -0,0 +1,434 @@
1
+ # encoding: ASCII-8BIT
2
+ # WSDL4R - Creating class definition from WSDL
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 'wsdl/data'
11
+ require 'wsdl/soap/classDefCreatorSupport'
12
+ require 'xsd/codegen'
13
+ require 'set'
14
+
15
+
16
+ module WSDL
17
+ module SOAP
18
+
19
+
20
+ class ClassDefCreator
21
+ include ClassDefCreatorSupport
22
+ include XSD::CodeGen
23
+
24
+ def initialize(definitions, name_creator, modulepath = nil)
25
+ @definitions = definitions
26
+ @name_creator = name_creator
27
+ @modulepath = modulepath
28
+ @elements = definitions.collect_elements
29
+ @elements.uniq!
30
+ @attributes = definitions.collect_attributes
31
+ @attributes.uniq!
32
+ @simpletypes = definitions.collect_simpletypes
33
+ @simpletypes.uniq!
34
+ @complextypes = definitions.collect_complextypes
35
+ @complextypes.uniq!
36
+ @modelgroups = definitions.collect_modelgroups
37
+ @modelgroups.uniq!
38
+ @faulttypes = nil
39
+ if definitions.respond_to?(:collect_faulttypes)
40
+ @faulttypes = definitions.collect_faulttypes
41
+ end
42
+ @defined_const = {}
43
+ end
44
+
45
+ def dump(type = nil)
46
+ result = "require 'xsd/qname'\n"
47
+ # cannot use @modulepath because of multiple classes
48
+ if @modulepath
49
+ result << "\n"
50
+ result << modulepath_split(@modulepath).collect { |ele| "module #{ele}" }.join("; ")
51
+ result << "\n\n"
52
+ end
53
+ str = dump_group(type)
54
+ unless str.empty?
55
+ result << "\n" unless result.empty?
56
+ result << str
57
+ end
58
+ str = dump_complextype(type)
59
+ unless str.empty?
60
+ result << "\n" unless result.empty?
61
+ result << str
62
+ end
63
+ str = dump_simpletype(type)
64
+ unless str.empty?
65
+ result << "\n" unless result.empty?
66
+ result << str
67
+ end
68
+ str = dump_element(type)
69
+ unless str.empty?
70
+ result << "\n" unless result.empty?
71
+ result << str
72
+ end
73
+ str = dump_attribute(type)
74
+ unless str.empty?
75
+ result << "\n" unless result.empty?
76
+ result << str
77
+ end
78
+ if @modulepath
79
+ result << "\n\n"
80
+ result << modulepath_split(@modulepath).collect { |ele| "end" }.join("; ")
81
+ result << "\n"
82
+ end
83
+ result
84
+ end
85
+
86
+ private
87
+
88
+ def dump_element(target = nil)
89
+ @elements.collect { |ele|
90
+ next if @complextypes[ele.name]
91
+ next if target and target != ele.name
92
+ c = create_elementdef(@modulepath, ele)
93
+ c ? c.dump : nil
94
+ }.compact.join("\n")
95
+ end
96
+
97
+ def dump_attribute(target = nil)
98
+ @attributes.collect { |attribute|
99
+ next if target and target != attribute.name
100
+ if attribute.local_simpletype
101
+ c = create_simpletypedef(@modulepath, attribute.name, attribute.local_simpletype)
102
+ end
103
+ c ? c.dump : nil
104
+ }.compact.join("\n")
105
+ end
106
+
107
+ def dump_simpletype(target = nil)
108
+ @simpletypes.collect { |type|
109
+ next if target and target != type.name
110
+ c = create_simpletypedef(@modulepath, type.name, type)
111
+ c ? c.dump : nil
112
+ }.compact.join("\n")
113
+ end
114
+
115
+ def dump_complextype(target = nil)
116
+ definitions = sort_dependency(@complextypes).collect { |type|
117
+ next if target and target != type.name
118
+ c = create_complextypedef(@modulepath, type.name, type)
119
+ c ? c.dump : nil
120
+ }.compact.join("\n")
121
+ end
122
+
123
+ def dump_group(target = nil)
124
+ definitions = @modelgroups.collect { |group|
125
+ # TODO: not dumped for now but may be useful in the future
126
+ }.compact.join("\n")
127
+ end
128
+
129
+ def create_elementdef(mpath, ele)
130
+ qualified = (ele.elementform == 'qualified')
131
+ if ele.local_complextype
132
+ create_complextypedef(mpath, ele.name, ele.local_complextype, qualified)
133
+ elsif ele.local_simpletype
134
+ create_simpletypedef(mpath, ele.name, ele.local_simpletype, qualified)
135
+ elsif ele.empty?
136
+ create_simpleclassdef(mpath, ele.name, nil)
137
+ else
138
+ # ignores type only element
139
+ nil
140
+ end
141
+ end
142
+
143
+ def create_simpletypedef(mpath, qname, simpletype, qualified = false)
144
+ if simpletype.restriction
145
+ create_simpletypedef_restriction(mpath, qname, simpletype, qualified)
146
+ elsif simpletype.list
147
+ create_simpletypedef_list(mpath, qname, simpletype, qualified)
148
+ elsif simpletype.union
149
+ create_simpletypedef_union(mpath, qname, simpletype, qualified)
150
+ else
151
+ raise RuntimeError.new("unknown kind of simpletype: #{simpletype}")
152
+ end
153
+ end
154
+
155
+ def create_simpletypedef_restriction(mpath, qname, typedef, qualified)
156
+ restriction = typedef.restriction
157
+ unless restriction.enumeration?
158
+ # not supported. minlength?
159
+ return nil
160
+ end
161
+ classname = mapped_class_basename(qname, mpath)
162
+ c = ClassDef.new(classname, '::String')
163
+ c.comment = "#{qname}"
164
+ define_classenum_restriction(c, classname, restriction.enumeration)
165
+ c
166
+ end
167
+
168
+ def create_simpletypedef_list(mpath, qname, typedef, qualified)
169
+ list = typedef.list
170
+ classname = mapped_class_basename(qname, mpath)
171
+ c = ClassDef.new(classname, '::Array')
172
+ c.comment = "#{qname}"
173
+ if simpletype = list.local_simpletype
174
+ if simpletype.restriction.nil?
175
+ raise RuntimeError.new(
176
+ "unknown kind of simpletype: #{simpletype}")
177
+ end
178
+ define_stringenum_restriction(c, simpletype.restriction.enumeration)
179
+ c.comment << "\n contains list of #{classname}::*"
180
+ elsif list.itemtype
181
+ c.comment << "\n contains list of #{mapped_class_basename(list.itemtype, mpath)}::*"
182
+ else
183
+ raise RuntimeError.new("unknown kind of list: #{list}")
184
+ end
185
+ c
186
+ end
187
+
188
+ def create_simpletypedef_union(mpath, qname, typedef, qualified)
189
+ union = typedef.union
190
+ classname = mapped_class_basename(qname, mpath)
191
+ c = ClassDef.new(classname, '::String')
192
+ c.comment = "#{qname}"
193
+ if union.member_types
194
+ # fixme
195
+ c.comment << "\n any of #{union.member_types}"
196
+ end
197
+ c
198
+ end
199
+
200
+ def define_stringenum_restriction(c, enumeration)
201
+ const = {}
202
+ enumeration.each do |value|
203
+ constname = safeconstname(value)
204
+ const[constname] ||= 0
205
+ if (const[constname] += 1) > 1
206
+ constname += "_#{const[constname]}"
207
+ end
208
+ c.def_const(constname, ndq(value))
209
+ end
210
+ end
211
+
212
+ def define_classenum_restriction(c, classname, enumeration)
213
+ const = {}
214
+ enumeration.each do |value|
215
+ constname = safeconstname(value)
216
+ const[constname] ||= 0
217
+ if (const[constname] += 1) > 1
218
+ constname += "_#{const[constname]}"
219
+ end
220
+ c.def_const(constname, "new(#{ndq(value)})")
221
+ end
222
+ end
223
+
224
+ def create_simpleclassdef(mpath, qname, type_or_element)
225
+ classname = mapped_class_basename(qname, mpath)
226
+ c = ClassDef.new(classname, '::String')
227
+ c.comment = "#{qname}"
228
+ init_lines = []
229
+ if type_or_element and !type_or_element.attributes.empty?
230
+ define_attribute(c, type_or_element.attributes)
231
+ init_lines << "@__xmlattr = {}"
232
+ end
233
+ c.def_method('initialize', '*arg') do
234
+ "super\n" + init_lines.join("\n")
235
+ end
236
+ c
237
+ end
238
+
239
+ def create_complextypedef(mpath, qname, type, qualified = false)
240
+ case type.compoundtype
241
+ when :TYPE_STRUCT, :TYPE_EMPTY
242
+ create_structdef(mpath, qname, type, qualified)
243
+ when :TYPE_ARRAY
244
+ create_arraydef(mpath, qname, type)
245
+ when :TYPE_SIMPLE
246
+ create_simpleclassdef(mpath, qname, type)
247
+ when :TYPE_MAP
248
+ # mapped as a general Hash
249
+ nil
250
+ else
251
+ raise RuntimeError.new(
252
+ "unknown kind of complexContent: #{type.compoundtype}")
253
+ end
254
+ end
255
+
256
+ def create_structdef(mpath, qname, typedef, qualified = false)
257
+ classname = mapped_class_basename(qname, mpath)
258
+ baseclassname = nil
259
+ if typedef.complexcontent
260
+ if base = typedef.complexcontent.base
261
+ # :TYPE_ARRAY must not be derived (#424)
262
+ basedef = @complextypes[base]
263
+ if basedef and basedef.compoundtype != :TYPE_ARRAY
264
+ # baseclass should be a toplevel complexType
265
+ baseclassname = mapped_class_basename(base, @modulepath)
266
+ end
267
+ end
268
+ end
269
+ if @faulttypes and @faulttypes.index(qname)
270
+ c = ClassDef.new(classname, '::StandardError')
271
+ else
272
+ c = ClassDef.new(classname, baseclassname)
273
+ end
274
+ c.comment = "#{qname}"
275
+ c.comment << "\nabstract" if typedef.abstract
276
+ parentmodule = mapped_class_name(qname, mpath)
277
+ init_lines, init_params =
278
+ parse_elements(c, typedef.elements, qname.namespace, parentmodule)
279
+ unless typedef.attributes.empty?
280
+ define_attribute(c, typedef.attributes)
281
+ init_lines << "@__xmlattr = {}"
282
+ end
283
+ c.def_method('initialize', *init_params) do
284
+ init_lines.join("\n")
285
+ end
286
+ c
287
+ end
288
+
289
+ def parse_elements(c, elements, base_namespace, mpath, as_array = false)
290
+ init_lines = []
291
+ init_params = []
292
+ any = false
293
+ elements.each do |element|
294
+ case element
295
+ when XMLSchema::Any
296
+ # only 1 <any/> is allowed for now.
297
+ raise RuntimeError.new("duplicated 'any'") if any
298
+ any = true
299
+ attrname = '__xmlele_any'
300
+ c.def_attr(attrname, false, attrname)
301
+ c.def_method('set_any', 'elements') do
302
+ '@__xmlele_any = elements'
303
+ end
304
+ init_lines << "@__xmlele_any = nil"
305
+ when XMLSchema::Element
306
+ next if element.ref == SchemaName
307
+ name = name_element(element).name
308
+ typebase = @modulepath
309
+ if element.anonymous_type?
310
+ inner = create_elementdef(mpath, element)
311
+ unless as_array
312
+ inner.comment = "inner class for member: #{name}\n" + inner.comment
313
+ end
314
+ c.innermodule << inner
315
+ typebase = mpath
316
+ end
317
+ unless as_array
318
+ attrname = safemethodname(name)
319
+ varname = safevarname(name)
320
+ c.def_attr(attrname, true, varname)
321
+ init_lines << "@#{varname} = #{varname}"
322
+ if element.map_as_array?
323
+ init_params << "#{varname} = []"
324
+ else
325
+ init_params << "#{varname} = nil"
326
+ end
327
+ c.comment << "\n #{attrname} - #{create_type_name(typebase, element) || '(any)'}"
328
+ end
329
+ when WSDL::XMLSchema::Sequence
330
+ child_init_lines, child_init_params =
331
+ parse_elements(c, element.elements, base_namespace, mpath, as_array)
332
+ init_lines.concat(child_init_lines)
333
+ init_params.concat(child_init_params)
334
+ when WSDL::XMLSchema::Choice
335
+ child_init_lines, child_init_params =
336
+ parse_elements(c, element.elements, base_namespace, mpath, as_array)
337
+ init_lines.concat(child_init_lines)
338
+ init_params.concat(child_init_params)
339
+ when WSDL::XMLSchema::Group
340
+ if element.content.nil?
341
+ warn("no group definition found: #{element}")
342
+ next
343
+ end
344
+ child_init_lines, child_init_params =
345
+ parse_elements(c, element.content.elements, base_namespace, mpath, as_array)
346
+ init_lines.concat(child_init_lines)
347
+ init_params.concat(child_init_params)
348
+ else
349
+ raise RuntimeError.new("unknown type: #{element}")
350
+ end
351
+ end
352
+ [init_lines, init_params]
353
+ end
354
+
355
+ def define_attribute(c, attributes)
356
+ const = {}
357
+ unless attributes.empty?
358
+ c.def_method("__xmlattr") do <<-__EOD__
359
+ @__xmlattr ||= {}
360
+ __EOD__
361
+ end
362
+ end
363
+ attributes.each do |attribute|
364
+ name = name_attribute(attribute)
365
+ methodname = safemethodname('xmlattr_' + name.name)
366
+ constname = 'Attr' + safeconstname(name.name)
367
+ const[constname] ||= 0
368
+ if (const[constname] += 1) > 1
369
+ constname += "_#{const[constname]}"
370
+ end
371
+ c.def_const(constname, dqname(name))
372
+ c.def_method(methodname) do <<-__EOD__
373
+ __xmlattr[#{constname}]
374
+ __EOD__
375
+ end
376
+ c.def_method(methodname + '=', 'value') do <<-__EOD__
377
+ __xmlattr[#{constname}] = value
378
+ __EOD__
379
+ end
380
+ c.comment << "\n #{methodname} - #{attribute_basetype(attribute) || '(any)'}"
381
+ end
382
+ end
383
+
384
+ def create_arraydef(mpath, qname, typedef)
385
+ classname = mapped_class_basename(qname, mpath)
386
+ c = ClassDef.new(classname, '::Array')
387
+ c.comment = "#{qname}"
388
+ parentmodule = mapped_class_name(qname, mpath)
389
+ parse_elements(c, typedef.elements, qname.namespace, parentmodule, true)
390
+ c
391
+ end
392
+
393
+ def sort_dependency(types)
394
+ dep = {}
395
+ root = []
396
+ types.each do |type|
397
+ if type.complexcontent and (base = type.complexcontent.base)
398
+ dep[base] ||= []
399
+ dep[base] << type
400
+ else
401
+ root << type
402
+ end
403
+ end
404
+ sorted = []
405
+ root.each do |type|
406
+ sorted.concat(collect_dependency(type, dep))
407
+ end
408
+ sorted.concat(dep.values.flatten)
409
+ sorted
410
+ end
411
+
412
+ # removes collected key from dep
413
+ def collect_dependency(type, dep)
414
+ result = [type]
415
+ return result unless dep.key?(type.name)
416
+ dep[type.name].each do |deptype|
417
+ result.concat(collect_dependency(deptype, dep))
418
+ end
419
+ dep.delete(type.name)
420
+ result
421
+ end
422
+
423
+ def modulepath_split(modulepath)
424
+ if modulepath.is_a?(::Array)
425
+ modulepath
426
+ else
427
+ modulepath.to_s.split('::')
428
+ end
429
+ end
430
+ end
431
+
432
+
433
+ end
434
+ end