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,70 @@
1
+ # SOAP4R - SOAP Header handler set
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/namedelements'
10
+
11
+
12
+ module SOAP
13
+ module Header
14
+
15
+
16
+ class HandlerSet
17
+ def initialize
18
+ @store = XSD::NamedElements.new
19
+ end
20
+
21
+ def dup
22
+ obj = HandlerSet.new
23
+ obj.store = @store.dup
24
+ obj
25
+ end
26
+
27
+ def add(handler)
28
+ @store << handler
29
+ end
30
+ alias << add
31
+
32
+ def delete(handler)
33
+ @store.delete(handler)
34
+ end
35
+
36
+ def include?(handler)
37
+ @store.include?(handler)
38
+ end
39
+
40
+ # returns: Array of SOAPHeaderItem
41
+ def on_outbound(header)
42
+ @store.collect { |handler|
43
+ handler.on_outbound_headeritem(header)
44
+ }.compact
45
+ end
46
+
47
+ # header: SOAPHeaderItem enumerable object
48
+ def on_inbound(header)
49
+ header.each do |name, item|
50
+ handler = @store.find { |handler|
51
+ handler.elename == item.element.elename
52
+ }
53
+ if handler
54
+ handler.on_inbound_headeritem(header, item)
55
+ elsif item.mustunderstand
56
+ raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s)
57
+ end
58
+ end
59
+ end
60
+
61
+ protected
62
+
63
+ def store=(store)
64
+ @store = store
65
+ end
66
+ end
67
+
68
+
69
+ end
70
+ end
@@ -0,0 +1,47 @@
1
+ # SOAP4R - SOAP Mapping header item handler
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'soap/header/handler'
10
+ require 'soap/mapping/mapping'
11
+
12
+
13
+ module SOAP
14
+ module Header
15
+
16
+
17
+ class MappingHandler < SOAP::Header::Handler
18
+ attr_accessor :registry
19
+
20
+ def initialize(elename, registry = nil)
21
+ super(elename)
22
+ @registry = registry
23
+ end
24
+
25
+ # Should return an Object for mapping
26
+ def on_mapping_outbound
27
+ nil
28
+ end
29
+
30
+ # Given header is a mapped Object
31
+ def on_mapping_inbound(obj, mustunderstand)
32
+ end
33
+
34
+ def on_outbound
35
+ obj = on_mapping_outbound
36
+ obj ? SOAP::Mapping.obj2soap(obj, @registry, @elename) : nil
37
+ end
38
+
39
+ def on_inbound(header, mustunderstand)
40
+ obj = SOAP::Mapping.soap2obj(header, @registry)
41
+ on_mapping_inbound(obj, mustunderstand)
42
+ end
43
+ end
44
+
45
+
46
+ end
47
+ end
@@ -0,0 +1,44 @@
1
+ # SOAP4R - SOAP Simple header item handler
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'soap/header/handler'
10
+ require 'soap/baseData'
11
+
12
+
13
+ module SOAP
14
+ module Header
15
+
16
+
17
+ class SimpleHandler < SOAP::Header::Handler
18
+ def initialize(elename)
19
+ super(elename)
20
+ end
21
+
22
+ # Should return a Hash, String or nil.
23
+ def on_simple_outbound
24
+ nil
25
+ end
26
+
27
+ # Given header is a Hash, String or nil.
28
+ def on_simple_inbound(header, mustunderstand)
29
+ end
30
+
31
+ def on_outbound
32
+ h = on_simple_outbound
33
+ h ? SOAPElement.from_obj(h, elename.namespace) : nil
34
+ end
35
+
36
+ def on_inbound(header, mustunderstand)
37
+ h = header.respond_to?(:to_obj) ? header.to_obj : header.data
38
+ on_simple_inbound(h, mustunderstand)
39
+ end
40
+ end
41
+
42
+
43
+ end
44
+ end
@@ -0,0 +1,139 @@
1
+ # SOAP4R - HTTP config loader.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'soap/property'
10
+
11
+
12
+ module SOAP
13
+
14
+
15
+ module HTTPConfigLoader
16
+ module_function
17
+
18
+ def set_options(client, options)
19
+ client.proxy = options["proxy"]
20
+ options.add_hook("proxy") do |key, value|
21
+ client.proxy = value
22
+ end
23
+ client.no_proxy = options["no_proxy"]
24
+ options.add_hook("no_proxy") do |key, value|
25
+ client.no_proxy = value
26
+ end
27
+ if client.respond_to?(:protocol_version=)
28
+ client.protocol_version = options["protocol_version"]
29
+ options.add_hook("protocol_version") do |key, value|
30
+ client.protocol_version = value
31
+ end
32
+ end
33
+ ssl_config = options["ssl_config"] ||= ::SOAP::Property.new
34
+ set_ssl_config(client, ssl_config)
35
+ ssl_config.add_hook(true) do |key, value|
36
+ set_ssl_config(client, ssl_config)
37
+ end
38
+ basic_auth = options["basic_auth"] ||= ::SOAP::Property.new
39
+ set_basic_auth(client, basic_auth)
40
+ basic_auth.add_hook do |key, value|
41
+ set_basic_auth(client, basic_auth)
42
+ end
43
+ auth = options["auth"] ||= ::SOAP::Property.new
44
+ set_auth(client, auth)
45
+ auth.add_hook do |key, value|
46
+ set_auth(client, auth)
47
+ end
48
+ options.add_hook("connect_timeout") do |key, value|
49
+ client.connect_timeout = value
50
+ end
51
+ options.add_hook("send_timeout") do |key, value|
52
+ client.send_timeout = value
53
+ end
54
+ options.add_hook("receive_timeout") do |key, value|
55
+ client.receive_timeout = value
56
+ end
57
+ end
58
+
59
+ def set_basic_auth(client, basic_auth)
60
+ basic_auth.values.each do |ele|
61
+ client.set_basic_auth(*authele_to_triplets(ele))
62
+ end
63
+ end
64
+
65
+ def set_auth(client, auth)
66
+ auth.values.each do |ele|
67
+ client.set_auth(*authele_to_triplets(ele))
68
+ end
69
+ end
70
+
71
+ def authele_to_triplets(ele)
72
+ if ele.is_a?(::Array)
73
+ url, userid, passwd = ele
74
+ else
75
+ url, userid, passwd = ele[:url], ele[:userid], ele[:password]
76
+ end
77
+ return url, userid, passwd
78
+ end
79
+
80
+ def set_ssl_config(client, ssl_config)
81
+ ssl_config.each do |key, value|
82
+ cfg = client.ssl_config
83
+ if cfg.nil?
84
+ raise NotImplementedError.new("SSL not supported")
85
+ end
86
+ case key
87
+ when 'client_cert'
88
+ cfg.client_cert = cert_from_file(value)
89
+ when 'client_key'
90
+ cfg.client_key = key_from_file(value)
91
+ when 'client_ca'
92
+ cfg.client_ca = value
93
+ when 'ca_path'
94
+ cfg.set_trust_ca(value)
95
+ when 'ca_file'
96
+ cfg.set_trust_ca(value)
97
+ when 'crl'
98
+ cfg.set_crl(value)
99
+ when 'verify_mode'
100
+ cfg.verify_mode = ssl_config_int(value)
101
+ when 'verify_depth'
102
+ cfg.verify_depth = ssl_config_int(value)
103
+ when 'options'
104
+ cfg.options = value
105
+ when 'ciphers'
106
+ cfg.ciphers = value
107
+ when 'verify_callback'
108
+ cfg.verify_callback = value
109
+ when 'cert_store'
110
+ cfg.cert_store = value
111
+ else
112
+ raise ArgumentError.new("unknown ssl_config property #{key}")
113
+ end
114
+ end
115
+ end
116
+
117
+ def ssl_config_int(value)
118
+ if value.nil? or value.to_s.empty?
119
+ nil
120
+ else
121
+ begin
122
+ Integer(value)
123
+ rescue ArgumentError
124
+ ::SOAP::Property::Util.const_from_name(value.to_s)
125
+ end
126
+ end
127
+ end
128
+
129
+ def cert_from_file(filename)
130
+ OpenSSL::X509::Certificate.new(File.open(filename) { |f| f.read })
131
+ end
132
+
133
+ def key_from_file(filename)
134
+ OpenSSL::PKey::RSA.new(File.open(filename) { |f| f.read })
135
+ end
136
+ end
137
+
138
+
139
+ end
@@ -0,0 +1,12 @@
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 'soap/mapping/mapping'
10
+ require 'soap/mapping/registry'
11
+ require 'soap/mapping/encodedregistry'
12
+ require 'soap/mapping/literalregistry'
@@ -0,0 +1,537 @@
1
+ # SOAP4R - encoded mapping registry.
2
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
3
+
4
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
5
+ # redistribute it and/or modify it under the same terms of Ruby's license;
6
+ # either the dual license version in 2003, or any later version.
7
+
8
+
9
+ require 'soap/baseData'
10
+ require 'soap/mapping/mapping'
11
+ require 'soap/mapping/typeMap'
12
+ require 'soap/mapping/factory'
13
+ require 'soap/mapping/rubytypeFactory'
14
+
15
+
16
+ module SOAP
17
+ module Mapping
18
+
19
+
20
+ # Inner class to pass an exception.
21
+ class SOAPException
22
+ attr_reader :excn_type_name, :cause
23
+
24
+ def initialize(e)
25
+ @excn_type_name = Mapping.name2elename(e.class.to_s)
26
+ @cause = e
27
+ end
28
+
29
+ def to_e
30
+ if @cause.is_a?(::Exception)
31
+ @cause.extend(::SOAP::Mapping::MappedException)
32
+ return @cause
33
+ elsif @cause.respond_to?(:message) and @cause.respond_to?(:backtrace)
34
+ e = RuntimeError.new(@cause.message)
35
+ e.set_backtrace(@cause.backtrace)
36
+ return e
37
+ end
38
+ klass = Mapping.class_from_name(Mapping.elename2name(@excn_type_name.to_s))
39
+ if klass.nil? or not klass <= ::Exception
40
+ return RuntimeError.new(@cause.inspect)
41
+ end
42
+ obj = klass.new(@cause.message)
43
+ obj.extend(::SOAP::Mapping::MappedException)
44
+ obj
45
+ end
46
+ end
47
+
48
+
49
+ class EncodedRegistry
50
+ include TraverseSupport
51
+ include RegistrySupport
52
+
53
+ class Map
54
+ def initialize(registry)
55
+ @obj2soap = {}
56
+ @soap2obj = {}
57
+ @registry = registry
58
+ end
59
+
60
+ def obj2soap(obj)
61
+ klass = obj.class
62
+ if map = @obj2soap[klass]
63
+ map.each do |soap_class, factory, info|
64
+ ret = factory.obj2soap(soap_class, obj, info, @registry)
65
+ return ret if ret
66
+ end
67
+ end
68
+ klass.ancestors.each do |baseclass|
69
+ next if baseclass == klass
70
+ if map = @obj2soap[baseclass]
71
+ map.each do |soap_class, factory, info|
72
+ if info[:derived_class]
73
+ ret = factory.obj2soap(soap_class, obj, info, @registry)
74
+ return ret if ret
75
+ end
76
+ end
77
+ end
78
+ end
79
+ nil
80
+ end
81
+
82
+ def soap2obj(node, klass = nil)
83
+ if map = @soap2obj[node.class]
84
+ map.each do |obj_class, factory, info|
85
+ next if klass and obj_class != klass
86
+ conv, obj = factory.soap2obj(obj_class, node, info, @registry)
87
+ return true, obj if conv
88
+ end
89
+ end
90
+ return false, nil
91
+ end
92
+
93
+ # Give priority to former entry.
94
+ def init(init_map = [])
95
+ clear
96
+ init_map.reverse_each do |obj_class, soap_class, factory, info|
97
+ add(obj_class, soap_class, factory, info)
98
+ end
99
+ end
100
+
101
+ # Give priority to latter entry.
102
+ def add(obj_class, soap_class, factory, info)
103
+ info ||= {}
104
+ (@obj2soap[obj_class] ||= []).unshift([soap_class, factory, info])
105
+ (@soap2obj[soap_class] ||= []).unshift([obj_class, factory, info])
106
+ end
107
+
108
+ def clear
109
+ @obj2soap.clear
110
+ @soap2obj.clear
111
+ end
112
+
113
+ def find_mapped_soap_class(target_obj_class)
114
+ map = @obj2soap[target_obj_class]
115
+ map.empty? ? nil : map[0][1]
116
+ end
117
+
118
+ def find_mapped_obj_class(target_soap_class)
119
+ map = @soap2obj[target_soap_class]
120
+ map.empty? ? nil : map[0][0]
121
+ end
122
+ end
123
+
124
+ StringFactory = StringFactory_.new
125
+ BasetypeFactory = BasetypeFactory_.new
126
+ FixnumFactory = FixnumFactory_.new
127
+ DateTimeFactory = DateTimeFactory_.new
128
+ ArrayFactory = ArrayFactory_.new
129
+ Base64Factory = Base64Factory_.new
130
+ URIFactory = URIFactory_.new
131
+ TypedArrayFactory = TypedArrayFactory_.new
132
+ TypedStructFactory = TypedStructFactory_.new
133
+
134
+ HashFactory = HashFactory_.new
135
+
136
+ SOAPBaseMap = [
137
+ [::NilClass, ::SOAP::SOAPNil, BasetypeFactory],
138
+ [::TrueClass, ::SOAP::SOAPBoolean, BasetypeFactory],
139
+ [::FalseClass, ::SOAP::SOAPBoolean, BasetypeFactory],
140
+ [::String, ::SOAP::SOAPString, StringFactory,
141
+ {:derived_class => true}],
142
+ [::DateTime, ::SOAP::SOAPDateTime, DateTimeFactory],
143
+ [::Date, ::SOAP::SOAPDate, DateTimeFactory],
144
+ [::Time, ::SOAP::SOAPDateTime, DateTimeFactory],
145
+ [::Time, ::SOAP::SOAPTime, DateTimeFactory],
146
+ [::Float, ::SOAP::SOAPDouble, BasetypeFactory,
147
+ {:derived_class => true}],
148
+ [::Float, ::SOAP::SOAPFloat, BasetypeFactory,
149
+ {:derived_class => true}],
150
+ [::Fixnum, ::SOAP::SOAPInt, FixnumFactory],
151
+ [::Integer, ::SOAP::SOAPInt, BasetypeFactory,
152
+ {:derived_class => true}],
153
+ [::Integer, ::SOAP::SOAPLong, BasetypeFactory,
154
+ {:derived_class => true}],
155
+ [::Integer, ::SOAP::SOAPInteger, BasetypeFactory,
156
+ {:derived_class => true}],
157
+ [::Integer, ::SOAP::SOAPShort, BasetypeFactory,
158
+ {:derived_class => true}],
159
+ [::Integer, ::SOAP::SOAPByte, BasetypeFactory,
160
+ {:derived_class => true}],
161
+ [::Integer, ::SOAP::SOAPNonPositiveInteger, BasetypeFactory,
162
+ {:derived_class => true}],
163
+ [::Integer, ::SOAP::SOAPNegativeInteger, BasetypeFactory,
164
+ {:derived_class => true}],
165
+ [::Integer, ::SOAP::SOAPNonNegativeInteger, BasetypeFactory,
166
+ {:derived_class => true}],
167
+ [::Integer, ::SOAP::SOAPPositiveInteger, BasetypeFactory,
168
+ {:derived_class => true}],
169
+ [::Integer, ::SOAP::SOAPUnsignedLong, BasetypeFactory,
170
+ {:derived_class => true}],
171
+ [::Integer, ::SOAP::SOAPUnsignedInt, BasetypeFactory,
172
+ {:derived_class => true}],
173
+ [::Integer, ::SOAP::SOAPUnsignedShort, BasetypeFactory,
174
+ {:derived_class => true}],
175
+ [::Integer, ::SOAP::SOAPUnsignedByte, BasetypeFactory,
176
+ {:derived_class => true}],
177
+ [::URI::Generic, ::SOAP::SOAPAnyURI, URIFactory,
178
+ {:derived_class => true}],
179
+ [::String, ::SOAP::SOAPBase64, Base64Factory],
180
+ [::String, ::SOAP::SOAPHexBinary, Base64Factory],
181
+ [::String, ::SOAP::SOAPDecimal, BasetypeFactory],
182
+ [::String, ::SOAP::SOAPDuration, BasetypeFactory],
183
+ [::String, ::SOAP::SOAPGYearMonth, BasetypeFactory],
184
+ [::String, ::SOAP::SOAPGYear, BasetypeFactory],
185
+ [::String, ::SOAP::SOAPGMonthDay, BasetypeFactory],
186
+ [::String, ::SOAP::SOAPGDay, BasetypeFactory],
187
+ [::String, ::SOAP::SOAPGMonth, BasetypeFactory],
188
+ [::String, ::SOAP::SOAPQName, BasetypeFactory],
189
+
190
+ [::Hash, ::SOAP::SOAPArray, HashFactory,
191
+ {:derived_class => true}],
192
+ [::Hash, ::SOAP::SOAPStruct, HashFactory,
193
+ {:derived_class => true}],
194
+
195
+ [::Array, ::SOAP::SOAPArray, ArrayFactory,
196
+ {:derived_class => true}],
197
+
198
+ [::SOAP::Mapping::SOAPException,
199
+ ::SOAP::SOAPStruct, TypedStructFactory,
200
+ {:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}],
201
+ ]
202
+
203
+ RubyOriginalMap = [
204
+ [::NilClass, ::SOAP::SOAPNil, BasetypeFactory],
205
+ [::TrueClass, ::SOAP::SOAPBoolean, BasetypeFactory],
206
+ [::FalseClass, ::SOAP::SOAPBoolean, BasetypeFactory],
207
+ [::String, ::SOAP::SOAPString, StringFactory],
208
+ [::DateTime, ::SOAP::SOAPDateTime, DateTimeFactory],
209
+ [::Date, ::SOAP::SOAPDate, DateTimeFactory],
210
+ [::Time, ::SOAP::SOAPDateTime, DateTimeFactory],
211
+ [::Time, ::SOAP::SOAPTime, DateTimeFactory],
212
+ [::Float, ::SOAP::SOAPDouble, BasetypeFactory,
213
+ {:derived_class => true}],
214
+ [::Float, ::SOAP::SOAPFloat, BasetypeFactory,
215
+ {:derived_class => true}],
216
+ [::Fixnum, ::SOAP::SOAPInt, FixnumFactory],
217
+ [::Integer, ::SOAP::SOAPInt, BasetypeFactory,
218
+ {:derived_class => true}],
219
+ [::Integer, ::SOAP::SOAPLong, BasetypeFactory,
220
+ {:derived_class => true}],
221
+ [::Integer, ::SOAP::SOAPInteger, BasetypeFactory,
222
+ {:derived_class => true}],
223
+ [::Integer, ::SOAP::SOAPShort, BasetypeFactory,
224
+ {:derived_class => true}],
225
+ [::Integer, ::SOAP::SOAPByte, BasetypeFactory,
226
+ {:derived_class => true}],
227
+ [::Integer, ::SOAP::SOAPNonPositiveInteger, BasetypeFactory,
228
+ {:derived_class => true}],
229
+ [::Integer, ::SOAP::SOAPNegativeInteger, BasetypeFactory,
230
+ {:derived_class => true}],
231
+ [::Integer, ::SOAP::SOAPNonNegativeInteger, BasetypeFactory,
232
+ {:derived_class => true}],
233
+ [::Integer, ::SOAP::SOAPPositiveInteger, BasetypeFactory,
234
+ {:derived_class => true}],
235
+ [::Integer, ::SOAP::SOAPUnsignedLong, BasetypeFactory,
236
+ {:derived_class => true}],
237
+ [::Integer, ::SOAP::SOAPUnsignedInt, BasetypeFactory,
238
+ {:derived_class => true}],
239
+ [::Integer, ::SOAP::SOAPUnsignedShort, BasetypeFactory,
240
+ {:derived_class => true}],
241
+ [::Integer, ::SOAP::SOAPUnsignedByte, BasetypeFactory,
242
+ {:derived_class => true}],
243
+ [::URI::Generic, ::SOAP::SOAPAnyURI, URIFactory,
244
+ {:derived_class => true}],
245
+ [::String, ::SOAP::SOAPBase64, Base64Factory],
246
+ [::String, ::SOAP::SOAPHexBinary, Base64Factory],
247
+ [::String, ::SOAP::SOAPDecimal, BasetypeFactory],
248
+ [::String, ::SOAP::SOAPDuration, BasetypeFactory],
249
+ [::String, ::SOAP::SOAPGYearMonth, BasetypeFactory],
250
+ [::String, ::SOAP::SOAPGYear, BasetypeFactory],
251
+ [::String, ::SOAP::SOAPGMonthDay, BasetypeFactory],
252
+ [::String, ::SOAP::SOAPGDay, BasetypeFactory],
253
+ [::String, ::SOAP::SOAPGMonth, BasetypeFactory],
254
+ [::String, ::SOAP::SOAPQName, BasetypeFactory],
255
+
256
+ [::Hash, ::SOAP::SOAPArray, HashFactory],
257
+ [::Hash, ::SOAP::SOAPStruct, HashFactory],
258
+
259
+ # Does not allow Array's subclass here.
260
+ [::Array, ::SOAP::SOAPArray, ArrayFactory],
261
+
262
+ [::SOAP::Mapping::SOAPException,
263
+ ::SOAP::SOAPStruct, TypedStructFactory,
264
+ {:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}],
265
+ ]
266
+
267
+ attr_accessor :default_factory
268
+ attr_accessor :excn_handler_obj2soap
269
+ attr_accessor :excn_handler_soap2obj
270
+
271
+ def initialize(config = {})
272
+ super()
273
+ @config = config
274
+ @map = Map.new(self)
275
+ if @config[:allow_original_mapping]
276
+ @allow_original_mapping = true
277
+ @map.init(RubyOriginalMap)
278
+ else
279
+ @allow_original_mapping = false
280
+ @map.init(SOAPBaseMap)
281
+ end
282
+ @allow_untyped_struct = @config.key?(:allow_untyped_struct) ?
283
+ @config[:allow_untyped_struct] : true
284
+ @rubytype_factory = RubytypeFactory.new(
285
+ :allow_untyped_struct => @allow_untyped_struct,
286
+ :allow_original_mapping => @allow_original_mapping
287
+ )
288
+ @default_factory = @rubytype_factory
289
+ @excn_handler_obj2soap = nil
290
+ @excn_handler_soap2obj = nil
291
+ end
292
+
293
+ # initial mapping interface
294
+ # new interface Registry#register is defined in RegisterSupport
295
+ def add(obj_class, soap_class, factory, info = nil)
296
+ @map.add(obj_class, soap_class, factory, info)
297
+ end
298
+ alias set add
299
+
300
+ def obj2soap(obj, type_qname = nil)
301
+ soap = _obj2soap(obj, type_qname)
302
+ if @allow_original_mapping
303
+ addextend2soap(soap, obj)
304
+ end
305
+ soap
306
+ end
307
+
308
+ def soap2obj(node, klass = nil)
309
+ obj = _soap2obj(node, klass)
310
+ if @allow_original_mapping
311
+ addextend2obj(obj, node.extraattr[RubyExtendName])
312
+ addiv2obj(obj, node.extraattr[RubyIVarName])
313
+ end
314
+ obj
315
+ end
316
+
317
+ def find_mapped_soap_class(obj_class)
318
+ @map.find_mapped_soap_class(obj_class)
319
+ end
320
+
321
+ def find_mapped_obj_class(soap_class)
322
+ @map.find_mapped_obj_class(soap_class)
323
+ end
324
+
325
+ private
326
+
327
+ def _obj2soap(obj, type_qname = nil)
328
+ ret = nil
329
+ if obj.is_a?(SOAPCompoundtype)
330
+ obj.replace do |ele|
331
+ Mapping._obj2soap(ele, self)
332
+ end
333
+ return obj
334
+ elsif obj.is_a?(SOAPBasetype)
335
+ return obj
336
+ elsif type_qname && type = TypeMap[type_qname]
337
+ return base2soap(obj, type)
338
+ end
339
+ cause = nil
340
+ begin
341
+ if definition = schema_definition_from_class(obj.class)
342
+ return stubobj2soap(obj, definition)
343
+ end
344
+ ret = @map.obj2soap(obj) ||
345
+ @default_factory.obj2soap(nil, obj, nil, self)
346
+ return ret if ret
347
+ rescue MappingError
348
+ cause = $!
349
+ end
350
+ if @excn_handler_obj2soap
351
+ ret = @excn_handler_obj2soap.call(obj) { |yield_obj|
352
+ Mapping._obj2soap(yield_obj, self)
353
+ }
354
+ return ret if ret
355
+ end
356
+ raise MappingError.new("Cannot map #{ obj.class.name } to SOAP/OM.", cause)
357
+ end
358
+
359
+ # Might return nil as a mapping result.
360
+ def _soap2obj(node, klass = nil)
361
+ definition = find_node_definition(node)
362
+ if klass
363
+ klass_definition = schema_definition_from_class(klass)
364
+ if definition and (definition.class_for < klass)
365
+ klass = definition.class_for
366
+ else
367
+ definition = klass_definition
368
+ end
369
+ else
370
+ klass = definition.class_for if definition
371
+ end
372
+ if definition and node.is_a?(::SOAP::SOAPNameAccessible)
373
+ return elesoap2stubobj(node, klass, definition)
374
+ end
375
+ if node.extraattr.key?(RubyTypeName)
376
+ conv, obj = @rubytype_factory.soap2obj(nil, node, nil, self)
377
+ return obj if conv
378
+ end
379
+ conv, obj = @map.soap2obj(node)
380
+ return obj if conv
381
+ conv, obj = @default_factory.soap2obj(nil, node, nil, self)
382
+ return obj if conv
383
+ cause = nil
384
+ if @excn_handler_soap2obj
385
+ begin
386
+ return @excn_handler_soap2obj.call(node) { |yield_node|
387
+ Mapping._soap2obj(yield_node, self)
388
+ }
389
+ rescue Exception
390
+ cause = $!
391
+ end
392
+ end
393
+ raise MappingError.new("Cannot map #{ node.type } to Ruby object.", cause)
394
+ end
395
+
396
+ def addiv2obj(obj, attr)
397
+ return unless attr
398
+ vars = {}
399
+ attr.__getobj__.each do |name, value|
400
+ vars[name] = Mapping._soap2obj(value, self)
401
+ end
402
+ Mapping.set_attributes(obj, vars)
403
+ end
404
+
405
+ def addextend2obj(obj, attr)
406
+ return unless attr
407
+ attr.split(/ /).reverse_each do |mstr|
408
+ obj.extend(Mapping.module_from_name(mstr))
409
+ end
410
+ end
411
+
412
+ def addextend2soap(node, obj)
413
+ return if obj.is_a?(Symbol) or obj.is_a?(Fixnum)
414
+ list = (class << obj; self; end).ancestors - obj.class.ancestors
415
+ unless list.empty?
416
+ node.extraattr[RubyExtendName] = list.collect { |c|
417
+ name = c.name
418
+ if name.nil? or name.empty?
419
+ raise TypeError.new("singleton can't be dumped #{ obj }")
420
+ end
421
+ name
422
+ }.join(" ")
423
+ end
424
+ end
425
+
426
+ def stubobj2soap(obj, definition)
427
+ case obj
428
+ when ::Array
429
+ array2soap(obj, definition)
430
+ else
431
+ unknownstubobj2soap(obj, definition)
432
+ end
433
+ end
434
+
435
+ def array2soap(obj, definition)
436
+ return SOAPNil.new if obj.nil? # ToDo: check nillable.
437
+ eledef = definition.elements[0]
438
+ soap_obj = SOAPArray.new(ValueArrayName, 1, eledef.elename)
439
+ mark_marshalled_obj(obj, soap_obj)
440
+ obj.each do |item|
441
+ soap_obj.add(typedobj2soap(item, eledef.mapped_class))
442
+ end
443
+ soap_obj
444
+ end
445
+
446
+ def unknownstubobj2soap(obj, definition)
447
+ return SOAPNil.new if obj.nil?
448
+ if definition.elements.size == 0
449
+ ele = Mapping.obj2soap(obj)
450
+ ele.elename = definition.elename if definition.elename
451
+ ele.extraattr[XSD::AttrTypeName] = definition.type if definition.type
452
+ return ele
453
+ else
454
+ ele = SOAPStruct.new(definition.type)
455
+ mark_marshalled_obj(obj, ele)
456
+ end
457
+ definition.elements.each do |eledef|
458
+ name = eledef.elename.name
459
+ if obj.respond_to?(:each) and eledef.as_array?
460
+ obj.each do |item|
461
+ ele.add(name, typedobj2soap(item, eledef.mapped_class))
462
+ end
463
+ else
464
+ child = Mapping.get_attribute(obj, eledef.varname)
465
+ if child.respond_to?(:each) and eledef.as_array?
466
+ child.each do |item|
467
+ ele.add(name, typedobj2soap(item, eledef.mapped_class))
468
+ end
469
+ else
470
+ ele.add(name, typedobj2soap(child, eledef.mapped_class))
471
+ end
472
+ end
473
+ end
474
+ ele
475
+ end
476
+
477
+ def typedobj2soap(value, klass)
478
+ if klass and klass.include?(::SOAP::SOAPBasetype)
479
+ base2soap(value, klass)
480
+ else
481
+ Mapping._obj2soap(value, self)
482
+ end
483
+ end
484
+
485
+ def elesoap2stubobj(node, obj_class, definition)
486
+ obj = Mapping.create_empty_object(obj_class)
487
+ add_elesoap2stubobj(node, obj, definition)
488
+ obj
489
+ end
490
+
491
+ # XXX consider to merge with the method in LiteralRegistry
492
+ def add_elesoap2stubobj(node, obj, definition)
493
+ vars = {}
494
+ node.each do |name, value|
495
+ item = definition.elements.find_element(value.elename)
496
+ if item
497
+ child = soap2typedobj(value, item.mapped_class)
498
+ else
499
+ # unknown element is treated as anyType.
500
+ child = Mapping._soap2obj(value, self)
501
+ end
502
+ if item and item.as_array?
503
+ (vars[name] ||= []) << child
504
+ elsif vars.key?(name)
505
+ vars[name] = [vars[name], child].flatten
506
+ else
507
+ vars[name] = child
508
+ end
509
+ end
510
+ if obj.is_a?(::Array) and is_stubobj_elements_for_array(vars)
511
+ Array.instance_method(:replace).bind(obj).call(vars.values[0])
512
+ else
513
+ Mapping.set_attributes(obj, vars)
514
+ end
515
+ end
516
+
517
+ def soap2typedobj(value, klass)
518
+ unless klass
519
+ raise MappingError.new("unknown class: #{klass}")
520
+ end
521
+ if klass.include?(::SOAP::SOAPBasetype)
522
+ obj = base2obj(value, klass)
523
+ else
524
+ obj = Mapping._soap2obj(value, self, klass)
525
+ end
526
+ obj
527
+ end
528
+ end
529
+
530
+
531
+ Registry = EncodedRegistry
532
+ DefaultRegistry = EncodedRegistry.new
533
+ RubyOriginalRegistry = EncodedRegistry.new(:allow_original_mapping => true)
534
+
535
+
536
+ end
537
+ end