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