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,577 @@
1
+ # SOAP4R - Ruby type mapping utility.
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 'xsd/codegen/gensupport'
10
+ require 'soap/mapping/schemadefinition'
11
+
12
+
13
+ module SOAP
14
+
15
+
16
+ module Mapping
17
+ RubyTypeNamespace = 'http://www.ruby-lang.org/xmlns/ruby/type/1.6'
18
+ RubyTypeInstanceNamespace =
19
+ 'http://www.ruby-lang.org/xmlns/ruby/type-instance'
20
+ RubyCustomTypeNamespace = 'http://www.ruby-lang.org/xmlns/ruby/type/custom'
21
+ ApacheSOAPTypeNamespace = 'http://xml.apache.org/xml-soap'
22
+
23
+
24
+ module TraverseSupport
25
+ def mark_marshalled_obj(obj, soap_obj)
26
+ raise if obj.nil?
27
+ Thread.current[:SOAPMapping][:MarshalKey][obj.__id__] = soap_obj
28
+ end
29
+
30
+ def mark_unmarshalled_obj(node, obj)
31
+ return if obj.nil?
32
+ # node.id is not Object#id but SOAPReference#id
33
+ Thread.current[:SOAPMapping][:MarshalKey][node.id] = obj
34
+ end
35
+ end
36
+
37
+
38
+ EMPTY_OPT = {}.freeze
39
+ def self.obj2soap(obj, registry = nil, type = nil, opt = EMPTY_OPT)
40
+ registry ||= Mapping::DefaultRegistry
41
+ soap_obj = nil
42
+ protect_mapping(opt) do
43
+ soap_obj = _obj2soap(obj, registry, type)
44
+ end
45
+ soap_obj
46
+ end
47
+
48
+ def self.objs2soap(objs, registry = nil, types = nil, opt = EMPTY_OPT)
49
+ registry ||= Mapping::DefaultRegistry
50
+ ary = []
51
+ protect_mapping(opt) do
52
+ 0.upto(objs.length - 1) do |idx|
53
+ type = types ? types[idx] : nil
54
+ soap = _obj2soap(objs[idx], registry, type)
55
+ ary << soap
56
+ end
57
+ end
58
+ ary
59
+ end
60
+
61
+ def self.soap2obj(node, registry = nil, klass = nil, opt = EMPTY_OPT)
62
+ registry ||= Mapping::DefaultRegistry
63
+ obj = nil
64
+ protect_mapping(opt) do
65
+ obj = _soap2obj(node, registry, klass)
66
+ end
67
+ obj
68
+ end
69
+
70
+ def self.ary2soap(ary, type_ns = XSD::Namespace, typename = XSD::AnyTypeLiteral, registry = nil, opt = EMPTY_OPT)
71
+ registry ||= Mapping::DefaultRegistry
72
+ type = XSD::QName.new(type_ns, typename)
73
+ soap_ary = SOAPArray.new(ValueArrayName, 1, type)
74
+ protect_mapping(opt) do
75
+ ary.each do |ele|
76
+ soap_ary.add(_obj2soap(ele, registry, type))
77
+ end
78
+ end
79
+ soap_ary
80
+ end
81
+
82
+ def self.ary2md(ary, rank, type_ns = XSD::Namespace, typename = XSD::AnyTypeLiteral, registry = nil, opt = EMPTY_OPT)
83
+ registry ||= Mapping::DefaultRegistry
84
+ type = XSD::QName.new(type_ns, typename)
85
+ md_ary = SOAPArray.new(ValueArrayName, rank, type)
86
+ protect_mapping(opt) do
87
+ add_md_ary(md_ary, ary, [], registry)
88
+ end
89
+ md_ary
90
+ end
91
+
92
+ def self.fault2exception(fault, registry = nil)
93
+ registry ||= Mapping::DefaultRegistry
94
+ detail = ""
95
+ if fault.detail
96
+ begin
97
+ fault.detail.type ||= XSD::QName::EMPTY
98
+ detail = soap2obj(fault.detail, registry) || ""
99
+ rescue MappingError
100
+ detail = fault.detail
101
+ end
102
+ end
103
+ if detail.is_a?(Mapping::SOAPException)
104
+ begin
105
+ e = detail.to_e
106
+ remote_backtrace = e.backtrace
107
+ e.set_backtrace(nil)
108
+ raise e # ruby sets current caller as local backtrace of e => e2.
109
+ rescue Exception => e
110
+ e.set_backtrace(remote_backtrace + e.backtrace[1..-1])
111
+ raise
112
+ end
113
+ else
114
+ fault.detail = detail
115
+ fault.set_backtrace(
116
+ if detail.is_a?(Array)
117
+ detail
118
+ else
119
+ [detail.to_s]
120
+ end
121
+ )
122
+ raise
123
+ end
124
+ end
125
+
126
+ def self._obj2soap(obj, registry, type = nil)
127
+ if obj.respond_to?(:to_xmlpart)
128
+ SOAPRawData.new(obj)
129
+ elsif defined?(::REXML) and obj.is_a?(::REXML::Element)
130
+ SOAPRawData.new(SOAPREXMLElementWrap.new(obj))
131
+ elsif referent = Thread.current[:SOAPMapping][:MarshalKey][obj.__id__] and
132
+ !Thread.current[:SOAPMapping][:NoReference]
133
+ SOAPReference.new(referent)
134
+ elsif registry
135
+ registry.obj2soap(obj, type)
136
+ else
137
+ raise MappingError.new("no mapping registry given")
138
+ end
139
+ end
140
+
141
+ def self._soap2obj(node, registry, klass = nil)
142
+ if node.nil?
143
+ return nil
144
+ elsif node.is_a?(SOAPReference)
145
+ target = node.__getobj__
146
+ # target.id is not Object#id but SOAPReference#id
147
+ if referent = Thread.current[:SOAPMapping][:MarshalKey][target.id] and
148
+ !Thread.current[:SOAPMapping][:NoReference]
149
+ return referent
150
+ else
151
+ return _soap2obj(target, registry, klass)
152
+ end
153
+ end
154
+ return registry.soap2obj(node, klass)
155
+ end
156
+
157
+ def self.create_empty_object(klass)
158
+ klass.allocate
159
+ end
160
+
161
+ # Allow only (Letter | '_') (Letter | Digit | '-' | '_')* here.
162
+ # Caution: '.' is not allowed here.
163
+ # To follow XML spec., it should be NCName.
164
+ # (denied chars) => .[0-F][0-F]
165
+ # ex. a.b => a.2eb
166
+ #
167
+ def self.name2elename(name)
168
+ name = name.to_s
169
+ name.gsub(/([^a-zA-Z0-9:_\-]+)/n) {
170
+ '.' << $1.unpack('H2' * $1.size).join('.')
171
+ }.gsub(/::/n, '..').to_sym
172
+ end
173
+
174
+ def self.elename2name(name)
175
+ name.gsub(/\.\./n, '::').gsub(/((?:\.[0-9a-fA-F]{2})+)/n) {
176
+ [$1.delete('.')].pack('H*')
177
+ }
178
+ end
179
+
180
+ def self.const_from_name(name, lenient = false)
181
+ const = ::Object
182
+ name.sub(/\A::/, '').split('::').each do |const_str|
183
+ if /\A[A-Z]/ =~ const_str
184
+ begin
185
+ if const.const_defined?(const_str)
186
+ const = const.const_get(const_str)
187
+ next
188
+ end
189
+ rescue NameError
190
+ end
191
+ end
192
+ if lenient
193
+ const_str = Mapping.safeconstname(const_str)
194
+ if const.const_defined?(const_str)
195
+ const = const.const_get(const_str)
196
+ next
197
+ end
198
+ end
199
+ return nil
200
+ end
201
+ const
202
+ end
203
+
204
+ def self.class_from_name(name, lenient = false)
205
+ unless lenient
206
+ const = const_from_name_nonlenient(name)
207
+ else
208
+ const = const_from_name(name, true)
209
+ end
210
+ if const.is_a?(::Class)
211
+ const
212
+ else
213
+ nil
214
+ end
215
+ end
216
+
217
+ def self.module_from_name(name, lenient = false)
218
+ unless lenient
219
+ const = const_from_name_nonlenient(name)
220
+ else
221
+ const = const_from_name(name, true)
222
+ end
223
+ if const.is_a?(::Module)
224
+ const
225
+ else
226
+ nil
227
+ end
228
+ end
229
+
230
+ def self.const_from_name_nonlenient(name)
231
+ if Thread.current[:SOAPMapping]
232
+ Thread.current[:SOAPMapping][:ConstFromName][name] ||=
233
+ const_from_name(name)
234
+ else
235
+ const_from_name(name)
236
+ end
237
+ end
238
+
239
+ def self.class2qname(klass)
240
+ name = schema_type_definition(klass)
241
+ namespace = schema_ns_definition(klass)
242
+ XSD::QName.new(namespace, name)
243
+ end
244
+
245
+ def self.class2element(klass)
246
+ name = schema_type_definition(klass) ||
247
+ Mapping.name2elename(klass.name)
248
+ namespace = schema_ns_definition(klass) || RubyCustomTypeNamespace
249
+ XSD::QName.new(namespace, name)
250
+ end
251
+
252
+ def self.obj2element(obj)
253
+ name = namespace = nil
254
+ ivars = obj.instance_variables
255
+ if ivars.include?('@schema_type')
256
+ name = obj.instance_variable_get('@schema_type')
257
+ end
258
+ if ivars.include?('@schema_ns')
259
+ namespace = obj.instance_variable_get('@schema_ns')
260
+ end
261
+ if !name or !namespace
262
+ class2qname(obj.class)
263
+ else
264
+ XSD::QName.new(namespace, name)
265
+ end
266
+ end
267
+
268
+ def self.to_qname(obj, ns = nil)
269
+ if obj.is_a?(XSD::QName)
270
+ obj
271
+ else
272
+ XSD::QName.new(ns, obj)
273
+ end
274
+ end
275
+
276
+ def self.define_singleton_method(obj, name, &block)
277
+ sclass = (class << obj; self; end)
278
+ sclass.class_eval {
279
+ define_method(name, &block)
280
+ }
281
+ end
282
+
283
+ def self.get_attributes(obj)
284
+ if obj.is_a?(::Hash)
285
+ obj
286
+ else
287
+ rs = {}
288
+ obj.instance_variables.each do |ele|
289
+ rs[ele.sub(/^@/, '')] = obj.instance_variable_get(ele)
290
+ end
291
+ rs
292
+ end
293
+ end
294
+
295
+ EMPTY_ATTRIBUTES = {}.freeze
296
+ def self.get_attributes_for_any(obj)
297
+ if obj.respond_to?(:__xmlele_any)
298
+ obj.__xmlele_any || EMPTY_ATTRIBUTES
299
+ else
300
+ get_attributes(obj)
301
+ end
302
+ end
303
+
304
+ def self.get_attribute(obj, attr_name)
305
+ case obj
306
+ when ::SOAP::Mapping::Object
307
+ return obj[attr_name]
308
+ when ::Hash
309
+ return obj[attr_name] || obj[attr_name.intern]
310
+ else
311
+ if obj.respond_to?(attr_name)
312
+ return obj.__send__(attr_name)
313
+ end
314
+ iv = obj.instance_variables
315
+ name = Mapping.safevarname(attr_name)
316
+ if iv.include?("@#{name}")
317
+ return obj.instance_variable_get("@#{name}")
318
+ elsif iv.include?("@#{attr_name}")
319
+ return obj.instance_variable_get("@#{attr_name}")
320
+ end
321
+ if obj.respond_to?(name)
322
+ return obj.__send__(name)
323
+ end
324
+ nil
325
+ end
326
+ end
327
+
328
+ def self.set_attributes(obj, values)
329
+ case obj
330
+ when ::SOAP::Mapping::Object
331
+ values.each do |attr_name, value|
332
+ obj.__add_xmlele_value(attr_name, value)
333
+ end
334
+ else
335
+ values.each do |attr_name, value|
336
+ # untaint depends GenSupport.safevarname
337
+ name = Mapping.safevarname(attr_name).untaint
338
+ setter = name + "="
339
+ if obj.respond_to?(setter)
340
+ obj.__send__(setter, value)
341
+ else
342
+ obj.instance_variable_set('@' + name, value)
343
+ begin
344
+ unless obj.respond_to?(name)
345
+ obj.instance_eval <<-EOS
346
+ def #{name}
347
+ @#{name}
348
+ end
349
+ EOS
350
+ end
351
+ unless self.respond_to?(name + "=")
352
+ obj.instance_eval <<-EOS
353
+ def #{name}=(value)
354
+ @#{name} = value
355
+ end
356
+ EOS
357
+ end
358
+ rescue TypeError
359
+ # singleton class may not exist (e.g. Float)
360
+ end
361
+ end
362
+ end
363
+ end
364
+ end
365
+
366
+ def self.safeconstname(name)
367
+ Thread.current[:SOAPMapping][:SafeConstName][name] ||=
368
+ XSD::CodeGen::GenSupport.safeconstname(name)
369
+ end
370
+
371
+ def self.safemethodname(name)
372
+ Thread.current[:SOAPMapping][:SafeMethodName][name] ||=
373
+ XSD::CodeGen::GenSupport.safemethodname(name)
374
+ end
375
+
376
+ def self.safevarname(name)
377
+ Thread.current[:SOAPMapping][:SafeVarName][name] ||=
378
+ XSD::CodeGen::GenSupport.safevarname(name)
379
+ end
380
+
381
+ def self.root_type_hint
382
+ Thread.current[:SOAPMapping][:RootTypeHint]
383
+ end
384
+
385
+ def self.reset_root_type_hint
386
+ Thread.current[:SOAPMapping][:RootTypeHint] = false
387
+ end
388
+
389
+ def self.external_ces
390
+ Thread.current[:SOAPMapping][:ExternalCES]
391
+ end
392
+
393
+ def self.schema_ns_definition(klass)
394
+ class_schema_variable(:schema_ns, klass)
395
+ end
396
+
397
+ def self.schema_name_definition(klass)
398
+ class_schema_variable(:schema_name, klass)
399
+ end
400
+
401
+ def self.schema_type_definition(klass)
402
+ class_schema_variable(:schema_type, klass)
403
+ end
404
+
405
+ def self.schema_qualified_definition(klass)
406
+ class_schema_variable(:schema_qualified, klass)
407
+ end
408
+
409
+ def self.schema_element_definition(klass)
410
+ class_schema_variable(:schema_element, klass)
411
+ end
412
+
413
+ def self.schema_attribute_definition(klass)
414
+ class_schema_variable(:schema_attribute, klass)
415
+ end
416
+
417
+ def self.schema_definition_classdef(klass)
418
+ if Thread.current[:SOAPMapping][:SchemaDefinition].key?(klass)
419
+ return Thread.current[:SOAPMapping][:SchemaDefinition][klass]
420
+ end
421
+ schema_ns = schema_ns_definition(klass)
422
+ schema_name = schema_name_definition(klass)
423
+ schema_type = schema_type_definition(klass)
424
+ qualified = schema_qualified_definition(klass)
425
+ elements = schema_element_definition(klass)
426
+ attributes = schema_attribute_definition(klass)
427
+ return nil if schema_name.nil? and schema_type.nil?
428
+ schema_name = Mapping.to_qname(schema_name, schema_ns) if schema_name
429
+ schema_type = Mapping.to_qname(schema_type, schema_ns) if schema_type
430
+ definition = create_schema_definition(klass,
431
+ :schema_name => schema_name,
432
+ :schema_type => schema_type,
433
+ :is_anonymous => false,
434
+ :schema_qualified => qualified,
435
+ :schema_element => elements,
436
+ :schema_attribute => attributes
437
+ )
438
+ Thread.current[:SOAPMapping][:SchemaDefinition][klass] = definition
439
+ definition
440
+ end
441
+
442
+ def self.create_schema_definition(klass, definition)
443
+ schema_ns = definition[:schema_ns]
444
+ schema_name = definition[:schema_name]
445
+ schema_type = definition[:schema_type]
446
+ is_anonymous = definition[:is_anonymous]
447
+ schema_basetype = definition[:schema_basetype]
448
+ schema_qualified = definition[:schema_qualified]
449
+ schema_element = definition[:schema_element]
450
+ schema_attributes = definition[:schema_attribute]
451
+ definition = SchemaDefinition.new(klass, schema_name, schema_type, is_anonymous, schema_qualified)
452
+ definition.basetype = schema_basetype
453
+ definition.attributes = schema_attributes
454
+ if schema_element
455
+ if schema_element.respond_to?(:is_concrete_definition) and
456
+ schema_element.is_concrete_definition
457
+ definition.elements = schema_element
458
+ else
459
+ default_ns = schema_name.namespace if schema_name
460
+ default_ns ||= schema_type.namespace if schema_type
461
+ definition.elements = parse_schema_definition(schema_element, default_ns)
462
+ if klass < ::Array
463
+ definition.elements.set_array
464
+ end
465
+ end
466
+ end
467
+ definition
468
+ end
469
+
470
+ # returns SchemaComplexTypeDefinition
471
+ def self.parse_schema_definition(schema_element, default_ns)
472
+ definition = nil
473
+ if schema_element[0] == :choice
474
+ schema_element.shift
475
+ definition = SchemaChoiceDefinition.new
476
+ else
477
+ definition = SchemaSequenceDefinition.new
478
+ end
479
+ schema_element.each do |ele|
480
+ element_definition = parse_schema_element_definition(ele, default_ns)
481
+ definition << element_definition
482
+ end
483
+ definition
484
+ end
485
+
486
+ # returns SchemaElementDefinition
487
+ def self.parse_schema_element_definition(schema_element, default_ns)
488
+ if schema_element[0] == :choice
489
+ parse_schema_definition(schema_element, default_ns)
490
+ elsif schema_element[0].is_a?(Array)
491
+ parse_schema_definition(schema_element, default_ns)
492
+ else
493
+ varname, info, occurrence = schema_element
494
+ mapped_class_str, elename = info
495
+ if occurrence
496
+ minoccurs, maxoccurs = occurrence
497
+ else
498
+ minoccurs, maxoccurs = 1, 1
499
+ end
500
+ as_any = as_array = false
501
+ if /\[\]$/ =~ mapped_class_str
502
+ mapped_class_str = mapped_class_str.sub(/\[\]$/, '')
503
+ if mapped_class_str.empty?
504
+ mapped_class_str = nil
505
+ end
506
+ as_array = true
507
+ end
508
+ if mapped_class_str
509
+ mapped_class = Mapping.class_from_name(mapped_class_str)
510
+ if mapped_class.nil?
511
+ warn("cannot find mapped class: #{mapped_class_str}")
512
+ end
513
+ end
514
+ if elename == XSD::AnyTypeName
515
+ as_any = true
516
+ elsif elename.nil?
517
+ elename = XSD::QName.new(default_ns, varname)
518
+ end
519
+ SchemaElementDefinition.new(
520
+ varname, mapped_class, elename, minoccurs, maxoccurs, as_any, as_array)
521
+ end
522
+ end
523
+
524
+ class << Mapping
525
+ public
526
+
527
+ def protect_threadvars(*symbols)
528
+ backup = {}
529
+ begin
530
+ symbols.each do |sym|
531
+ backup[sym] = Thread.current[sym]
532
+ end
533
+ yield
534
+ ensure
535
+ symbols.each do |sym|
536
+ Thread.current[sym] = backup[sym]
537
+ end
538
+ end
539
+ end
540
+
541
+ private
542
+
543
+ def class_schema_variable(sym, klass)
544
+ var = "@@#{sym}"
545
+ klass.class_variables.include?(var) ? klass.class_eval(var) : nil
546
+ end
547
+
548
+ def protect_mapping(opt)
549
+ protect_threadvars(:SOAPMapping) do
550
+ data = Thread.current[:SOAPMapping] = {}
551
+ data[:MarshalKey] = {}
552
+ data[:ExternalCES] = opt[:external_ces] || XSD::Charset.encoding
553
+ data[:NoReference] = opt[:no_reference]
554
+ data[:RootTypeHint] = opt[:root_type_hint]
555
+ data[:SchemaDefinition] = {}
556
+ data[:SafeConstName] = {}
557
+ data[:SafeMethodName] = {}
558
+ data[:SafeVarName] = {}
559
+ data[:ConstFromName] = {}
560
+ yield
561
+ end
562
+ end
563
+
564
+ def add_md_ary(md_ary, ary, indices, registry)
565
+ for idx in 0..(ary.size - 1)
566
+ if ary[idx].is_a?(Array)
567
+ add_md_ary(md_ary, ary[idx], indices + [idx], registry)
568
+ else
569
+ md_ary[*(indices + [idx])] = _obj2soap(ary[idx], registry)
570
+ end
571
+ end
572
+ end
573
+ end
574
+ end
575
+
576
+
577
+ end