soap4r-sgonyea 1.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. data/bin/wsdl2ruby.rb +139 -0
  2. data/bin/xsd2ruby.rb +91 -0
  3. data/lib/soap/attachment.rb +109 -0
  4. data/lib/soap/attrproxy.rb +35 -0
  5. data/lib/soap/baseData.rb +1095 -0
  6. data/lib/soap/element.rb +278 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  8. data/lib/soap/encodingstyle/handler.rb +121 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  11. data/lib/soap/filter.rb +14 -0
  12. data/lib/soap/filter/filterchain.rb +52 -0
  13. data/lib/soap/filter/handler.rb +32 -0
  14. data/lib/soap/filter/streamhandler.rb +30 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +62 -0
  17. data/lib/soap/header/handlerset.rb +71 -0
  18. data/lib/soap/header/mappinghandler.rb +48 -0
  19. data/lib/soap/header/simplehandler.rb +45 -0
  20. data/lib/soap/httpconfigloader.rb +140 -0
  21. data/lib/soap/mapping.rb +13 -0
  22. data/lib/soap/mapping/encodedregistry.rb +539 -0
  23. data/lib/soap/mapping/factory.rb +389 -0
  24. data/lib/soap/mapping/literalregistry.rb +392 -0
  25. data/lib/soap/mapping/mapping.rb +577 -0
  26. data/lib/soap/mapping/registry.rb +296 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +171 -0
  29. data/lib/soap/mapping/typeMap.rb +107 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  32. data/lib/soap/marshal.rb +60 -0
  33. data/lib/soap/mimemessage.rb +243 -0
  34. data/lib/soap/nestedexception.rb +43 -0
  35. data/lib/soap/netHttpClient.rb +242 -0
  36. data/lib/soap/ns.rb +39 -0
  37. data/lib/soap/parser.rb +253 -0
  38. data/lib/soap/processor.rb +67 -0
  39. data/lib/soap/property.rb +340 -0
  40. data/lib/soap/proxy.rb +15 -0
  41. data/lib/soap/rpc/cgistub.rb +248 -0
  42. data/lib/soap/rpc/driver.rb +222 -0
  43. data/lib/soap/rpc/element.rb +375 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/methodDef.rb +69 -0
  46. data/lib/soap/rpc/proxy.rb +573 -0
  47. data/lib/soap/rpc/router.rb +663 -0
  48. data/lib/soap/rpc/rpc.rb +26 -0
  49. data/lib/soap/rpc/soaplet.rb +201 -0
  50. data/lib/soap/rpc/standaloneServer.rb +44 -0
  51. data/lib/soap/soap.rb +154 -0
  52. data/lib/soap/streamHandler.rb +302 -0
  53. data/lib/soap/version.rb +9 -0
  54. data/lib/soap/wsdlDriver.rb +165 -0
  55. data/lib/wsdl/binding.rb +66 -0
  56. data/lib/wsdl/data.rb +65 -0
  57. data/lib/wsdl/definitions.rb +237 -0
  58. data/lib/wsdl/documentation.rb +33 -0
  59. data/lib/wsdl/import.rb +81 -0
  60. data/lib/wsdl/importer.rb +39 -0
  61. data/lib/wsdl/info.rb +51 -0
  62. data/lib/wsdl/message.rb +55 -0
  63. data/lib/wsdl/operation.rb +152 -0
  64. data/lib/wsdl/operationBinding.rb +241 -0
  65. data/lib/wsdl/param.rb +94 -0
  66. data/lib/wsdl/parser.rb +165 -0
  67. data/lib/wsdl/part.rb +53 -0
  68. data/lib/wsdl/port.rb +67 -0
  69. data/lib/wsdl/portType.rb +76 -0
  70. data/lib/wsdl/service.rb +62 -0
  71. data/lib/wsdl/soap/address.rb +41 -0
  72. data/lib/wsdl/soap/binding.rb +50 -0
  73. data/lib/wsdl/soap/body.rb +59 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +434 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +241 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +55 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  79. data/lib/wsdl/soap/complexType.rb +174 -0
  80. data/lib/wsdl/soap/data.rb +43 -0
  81. data/lib/wsdl/soap/definitions.rb +201 -0
  82. data/lib/wsdl/soap/driverCreator.rb +121 -0
  83. data/lib/wsdl/soap/element.rb +34 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  85. data/lib/wsdl/soap/fault.rb +57 -0
  86. data/lib/wsdl/soap/header.rb +87 -0
  87. data/lib/wsdl/soap/headerfault.rb +57 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +377 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  92. data/lib/wsdl/soap/operation.rb +113 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +226 -0
  97. data/lib/wsdl/types.rb +45 -0
  98. data/lib/wsdl/wsdl.rb +25 -0
  99. data/lib/wsdl/xmlSchema/all.rb +25 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  101. data/lib/wsdl/xmlSchema/any.rb +62 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  110. data/lib/wsdl/xmlSchema/content.rb +96 -0
  111. data/lib/wsdl/xmlSchema/data.rb +117 -0
  112. data/lib/wsdl/xmlSchema/element.rb +154 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  115. data/lib/wsdl/xmlSchema/group.rb +101 -0
  116. data/lib/wsdl/xmlSchema/import.rb +54 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +46 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  119. data/lib/wsdl/xmlSchema/include.rb +49 -0
  120. data/lib/wsdl/xmlSchema/length.rb +38 -0
  121. data/lib/wsdl/xmlSchema/list.rb +49 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  138. data/lib/wsdl/xmlSchema/union.rb +36 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +176 -0
  142. data/lib/xsd/charset.rb +190 -0
  143. data/lib/xsd/codegen.rb +13 -0
  144. data/lib/xsd/codegen/classdef.rb +209 -0
  145. data/lib/xsd/codegen/commentdef.rb +35 -0
  146. data/lib/xsd/codegen/gensupport.rb +277 -0
  147. data/lib/xsd/codegen/methoddef.rb +71 -0
  148. data/lib/xsd/codegen/moduledef.rb +209 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +21 -0
  151. data/lib/xsd/iconvcharset.rb +34 -0
  152. data/lib/xsd/mapping.rb +69 -0
  153. data/lib/xsd/namedelements.rb +133 -0
  154. data/lib/xsd/ns.rb +183 -0
  155. data/lib/xsd/qname.rb +80 -0
  156. data/lib/xsd/xmlparser.rb +77 -0
  157. data/lib/xsd/xmlparser/libxmlparser.rb +116 -0
  158. data/lib/xsd/xmlparser/parser.rb +101 -0
  159. data/lib/xsd/xmlparser/rexmlparser.rb +59 -0
  160. data/lib/xsd/xmlparser/xmlparser.rb +51 -0
  161. data/lib/xsd/xmlparser/xmlscanner.rb +150 -0
  162. data/test/16runner.rb +69 -0
  163. data/test/helper.rb +7 -0
  164. data/test/interopR2/README.txt +2 -0
  165. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  166. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  167. data/test/interopR2/base.rb +289 -0
  168. data/test/interopR2/client.NetRemoting.rb +18 -0
  169. data/test/interopR2/client.rb +1235 -0
  170. data/test/interopR2/client4S4C.rb +16 -0
  171. data/test/interopR2/client4S4C2.rb +15 -0
  172. data/test/interopR2/clientASP.NET.rb +18 -0
  173. data/test/interopR2/clientApacheAxis.rb +17 -0
  174. data/test/interopR2/clientApacheSOAP.rb +18 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +18 -0
  176. data/test/interopR2/clientBase.rb +1968 -0
  177. data/test/interopR2/clientCapeConnect.rb +19 -0
  178. data/test/interopR2/clientDelphi.rb +20 -0
  179. data/test/interopR2/clientEasySoap.rb +15 -0
  180. data/test/interopR2/clientFrontier.rb +26 -0
  181. data/test/interopR2/clientGLUE.rb +33 -0
  182. data/test/interopR2/clientHP.rb +14 -0
  183. data/test/interopR2/clientJAX-RPC.rb +20 -0
  184. data/test/interopR2/clientJSOAP.rb +15 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +16 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +18 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +18 -0
  188. data/test/interopR2/clientNuSOAP.rb +20 -0
  189. data/test/interopR2/clientNuWave.rb +16 -0
  190. data/test/interopR2/clientOpenLink.rb +16 -0
  191. data/test/interopR2/clientOracle.rb +16 -0
  192. data/test/interopR2/clientPEAR.rb +19 -0
  193. data/test/interopR2/clientPhalanx.rb +19 -0
  194. data/test/interopR2/clientSIMACE.rb +19 -0
  195. data/test/interopR2/clientSOAP4R.rb +19 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +15 -0
  197. data/test/interopR2/clientSQLData.rb +19 -0
  198. data/test/interopR2/clientSilverStream.rb +18 -0
  199. data/test/interopR2/clientSpray2001.rb +18 -0
  200. data/test/interopR2/clientSun.rb +20 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +20 -0
  202. data/test/interopR2/clientWASP.rb +20 -0
  203. data/test/interopR2/clientWASPC.rb +19 -0
  204. data/test/interopR2/clientWebMethods.rb +16 -0
  205. data/test/interopR2/clientWhiteMesa.rb +29 -0
  206. data/test/interopR2/clientWingfoot.rb +16 -0
  207. data/test/interopR2/clientXMLBus.rb +20 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +18 -0
  209. data/test/interopR2/clientXSOAP.rb +15 -0
  210. data/test/interopR2/clientZSI.rb +20 -0
  211. data/test/interopR2/clienteSOAP.rb +19 -0
  212. data/test/interopR2/clientgSOAP.rb +19 -0
  213. data/test/interopR2/clientkSOAP.rb +18 -0
  214. data/test/interopR2/iSimonReg.rb +113 -0
  215. data/test/interopR2/interopResultBase.rb +115 -0
  216. data/test/interopR2/interopService.rb +248 -0
  217. data/test/interopR2/rwikiInteropService.rb +106 -0
  218. data/test/interopR2/server.cgi +271 -0
  219. data/test/interopR2/server.rb +276 -0
  220. data/test/interopR2/simonReg.rb +124 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +113 -0
  223. data/test/runner.rb +8 -0
  224. data/test/sm11/classDef.rb +157 -0
  225. data/test/sm11/client.rb +543 -0
  226. data/test/sm11/driver.rb +184 -0
  227. data/test/sm11/servant.rb +1068 -0
  228. data/test/sm11/server.rb +26 -0
  229. data/test/soap/asp.net/hello.wsdl +96 -0
  230. data/test/soap/asp.net/test_aspdotnet.rb +124 -0
  231. data/test/soap/auth/htdigest +2 -0
  232. data/test/soap/auth/htpasswd +2 -0
  233. data/test/soap/auth/test_basic.rb +118 -0
  234. data/test/soap/auth/test_digest.rb +119 -0
  235. data/test/soap/calc/calc.rb +18 -0
  236. data/test/soap/calc/calc2.rb +30 -0
  237. data/test/soap/calc/server.cgi +16 -0
  238. data/test/soap/calc/server.rb +18 -0
  239. data/test/soap/calc/server2.rb +21 -0
  240. data/test/soap/calc/test_calc.rb +53 -0
  241. data/test/soap/calc/test_calc2.rb +57 -0
  242. data/test/soap/calc/test_calc_cgi.rb +72 -0
  243. data/test/soap/case/test_mapping.rb +58 -0
  244. data/test/soap/fault/test_customfault.rb +61 -0
  245. data/test/soap/fault/test_fault.rb +47 -0
  246. data/test/soap/fault/test_soaparray.rb +36 -0
  247. data/test/soap/filter/test_filter.rb +147 -0
  248. data/test/soap/header/server.cgi +121 -0
  249. data/test/soap/header/test_authheader.rb +241 -0
  250. data/test/soap/header/test_authheader_cgi.rb +122 -0
  251. data/test/soap/header/test_simplehandler.rb +117 -0
  252. data/test/soap/helloworld/hw_s.rb +17 -0
  253. data/test/soap/helloworld/test_helloworld.rb +45 -0
  254. data/test/soap/htpasswd +2 -0
  255. data/test/soap/literalArrayMapping/amazonEc.rb +4779 -0
  256. data/test/soap/literalArrayMapping/amazonEcDriver.rb +173 -0
  257. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  258. data/test/soap/literalArrayMapping/test_definedarray.rb +35 -0
  259. data/test/soap/marshal/marshaltestlib.rb +498 -0
  260. data/test/soap/marshal/test_digraph.rb +57 -0
  261. data/test/soap/marshal/test_marshal.rb +28 -0
  262. data/test/soap/marshal/test_struct.rb +48 -0
  263. data/test/soap/ssl/README +1 -0
  264. data/test/soap/ssl/ca.cert +23 -0
  265. data/test/soap/ssl/client.cert +19 -0
  266. data/test/soap/ssl/client.key +15 -0
  267. data/test/soap/ssl/server.cert +19 -0
  268. data/test/soap/ssl/server.key +15 -0
  269. data/test/soap/ssl/sslsvr.rb +59 -0
  270. data/test/soap/ssl/subca.cert +21 -0
  271. data/test/soap/ssl/test_ssl.rb +236 -0
  272. data/test/soap/struct/test_struct.rb +71 -0
  273. data/test/soap/styleuse/client.rb +21 -0
  274. data/test/soap/styleuse/server.rb +87 -0
  275. data/test/soap/swa/test_file.rb +76 -0
  276. data/test/soap/test_basetype.rb +1091 -0
  277. data/test/soap/test_cookie.rb +113 -0
  278. data/test/soap/test_custom_ns.rb +106 -0
  279. data/test/soap/test_custommap.rb +111 -0
  280. data/test/soap/test_empty.rb +106 -0
  281. data/test/soap/test_envelopenamespace.rb +86 -0
  282. data/test/soap/test_extraattr.rb +55 -0
  283. data/test/soap/test_generator.rb +32 -0
  284. data/test/soap/test_httpconfigloader.rb +72 -0
  285. data/test/soap/test_mapping.rb +132 -0
  286. data/test/soap/test_nestedexception.rb +71 -0
  287. data/test/soap/test_nil.rb +71 -0
  288. data/test/soap/test_no_indent.rb +89 -0
  289. data/test/soap/test_property.rb +429 -0
  290. data/test/soap/test_response_as_xml.rb +118 -0
  291. data/test/soap/test_soapelement.rb +139 -0
  292. data/test/soap/test_streamhandler.rb +271 -0
  293. data/test/soap/test_styleuse.rb +327 -0
  294. data/test/soap/wsdlDriver/README.txt +2 -0
  295. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  296. data/test/soap/wsdlDriver/document.wsdl +54 -0
  297. data/test/soap/wsdlDriver/echo_version.rb +30 -0
  298. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  299. data/test/soap/wsdlDriver/test_calc.rb +72 -0
  300. data/test/soap/wsdlDriver/test_document.rb +72 -0
  301. data/test/soap/wsdlDriver/test_simpletype.rb +82 -0
  302. data/test/testutil.rb +55 -0
  303. data/test/wsdl/abstract/abstract.wsdl +176 -0
  304. data/test/wsdl/abstract/test_abstract.rb +160 -0
  305. data/test/wsdl/anonymous/expectedClassDef.rb +129 -0
  306. data/test/wsdl/anonymous/expectedDriver.rb +60 -0
  307. data/test/wsdl/anonymous/expectedMappingRegistry.rb +177 -0
  308. data/test/wsdl/anonymous/lp.wsdl +147 -0
  309. data/test/wsdl/anonymous/test_anonymous.rb +131 -0
  310. data/test/wsdl/any/any.wsdl +114 -0
  311. data/test/wsdl/any/expectedDriver.rb +69 -0
  312. data/test/wsdl/any/expectedEcho.rb +58 -0
  313. data/test/wsdl/any/expectedMappingRegistry.rb +64 -0
  314. data/test/wsdl/any/expectedService.rb +70 -0
  315. data/test/wsdl/any/test_any.rb +194 -0
  316. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  317. data/test/wsdl/axisArray/test_axisarray.rb +125 -0
  318. data/test/wsdl/choice/choice.wsdl +167 -0
  319. data/test/wsdl/choice/test_choice.rb +311 -0
  320. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  321. data/test/wsdl/complexcontent/test_echo.rb +91 -0
  322. data/test/wsdl/datetime/DatetimeService.rb +45 -0
  323. data/test/wsdl/datetime/datetime.rb +0 -0
  324. data/test/wsdl/datetime/datetime.wsdl +45 -0
  325. data/test/wsdl/datetime/datetimeServant.rb +23 -0
  326. data/test/wsdl/datetime/test_datetime.rb +88 -0
  327. data/test/wsdl/document/array/double.wsdl +161 -0
  328. data/test/wsdl/document/array/test_array.rb +202 -0
  329. data/test/wsdl/document/document.wsdl +76 -0
  330. data/test/wsdl/document/number.wsdl +54 -0
  331. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  332. data/test/wsdl/document/test_nosoapaction.rb +103 -0
  333. data/test/wsdl/document/test_number.rb +93 -0
  334. data/test/wsdl/document/test_rpc.rb +356 -0
  335. data/test/wsdl/emptycomplextype.wsdl +31 -0
  336. data/test/wsdl/fault/fault.wsdl +79 -0
  337. data/test/wsdl/fault/multifault.wsdl +96 -0
  338. data/test/wsdl/fault/test_fault.rb +120 -0
  339. data/test/wsdl/fault/test_multifault.rb +135 -0
  340. data/test/wsdl/group/expectedClassdef.rb +59 -0
  341. data/test/wsdl/group/expectedDriver.rb +52 -0
  342. data/test/wsdl/group/expectedMappingRegistry.rb +68 -0
  343. data/test/wsdl/group/group.wsdl +88 -0
  344. data/test/wsdl/group/test_rpc.rb +146 -0
  345. data/test/wsdl/list/list.wsdl +93 -0
  346. data/test/wsdl/list/test_list.rb +125 -0
  347. data/test/wsdl/map/map.wsdl +92 -0
  348. data/test/wsdl/map/map.xml +43 -0
  349. data/test/wsdl/map/test_map.rb +100 -0
  350. data/test/wsdl/marshal/person.wsdl +21 -0
  351. data/test/wsdl/marshal/person_org.rb +24 -0
  352. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  353. data/test/wsdl/multiplefault.wsdl +75 -0
  354. data/test/wsdl/oneway/oneway.wsdl +36 -0
  355. data/test/wsdl/oneway/test_oneway.rb +109 -0
  356. data/test/wsdl/overload/expectedClient.rb +38 -0
  357. data/test/wsdl/overload/expectedDriver.rb +62 -0
  358. data/test/wsdl/overload/expectedServant.rb +36 -0
  359. data/test/wsdl/overload/overload.wsdl +70 -0
  360. data/test/wsdl/overload/test_overload.rb +132 -0
  361. data/test/wsdl/qualified/lp.wsdl +47 -0
  362. data/test/wsdl/qualified/lp.xsd +26 -0
  363. data/test/wsdl/qualified/np.wsdl +51 -0
  364. data/test/wsdl/qualified/test_qualified.rb +138 -0
  365. data/test/wsdl/qualified/test_unqualified.rb +139 -0
  366. data/test/wsdl/raa/RAAService.rb +126 -0
  367. data/test/wsdl/raa/README.txt +8 -0
  368. data/test/wsdl/raa/expectedClassDef.rb +101 -0
  369. data/test/wsdl/raa/expectedDriver.rb +97 -0
  370. data/test/wsdl/raa/expectedMappingRegistry.rb +122 -0
  371. data/test/wsdl/raa/raa.wsdl +264 -0
  372. data/test/wsdl/raa/test_raa.rb +127 -0
  373. data/test/wsdl/ref/expectedDriver.rb +52 -0
  374. data/test/wsdl/ref/expectedProduct.rb +244 -0
  375. data/test/wsdl/ref/product.wsdl +147 -0
  376. data/test/wsdl/ref/test_ref.rb +269 -0
  377. data/test/wsdl/rpc/rpc.wsdl +109 -0
  378. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  379. data/test/wsdl/rpc/test_rpc.rb +177 -0
  380. data/test/wsdl/rpc/test_rpc_lit.rb +471 -0
  381. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  382. data/test/wsdl/simplecontent/test_simplecontent.rb +103 -0
  383. data/test/wsdl/simpletype/rpc/expectedClient.rb +35 -0
  384. data/test/wsdl/simpletype/rpc/expectedDriver.rb +59 -0
  385. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +37 -0
  386. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +58 -0
  387. data/test/wsdl/simpletype/rpc/expectedServant.rb +33 -0
  388. data/test/wsdl/simpletype/rpc/expectedService.rb +56 -0
  389. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  390. data/test/wsdl/simpletype/rpc/test_rpc.rb +53 -0
  391. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  392. data/test/wsdl/simpletype/test_simpletype.rb +93 -0
  393. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  394. data/test/wsdl/soap/test_soapbodyparts.rb +80 -0
  395. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +22 -0
  396. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +35 -0
  397. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +59 -0
  398. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +37 -0
  399. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +33 -0
  400. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +49 -0
  401. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +56 -0
  402. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  403. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +38 -0
  404. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  405. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  406. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  407. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +84 -0
  408. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +103 -0
  409. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  410. data/test/wsdl/soaptype/test_soaptype.rb +179 -0
  411. data/test/wsdl/test_emptycomplextype.rb +22 -0
  412. data/test/wsdl/test_fault.rb +51 -0
  413. data/test/wsdl/test_multiplefault.rb +42 -0
  414. data/test/xsd/codegen/test_classdef.rb +245 -0
  415. data/test/xsd/noencoding.xml +4 -0
  416. data/test/xsd/test_noencoding.rb +33 -0
  417. data/test/xsd/test_ns.rb +42 -0
  418. data/test/xsd/test_xmlschemaparser.rb +23 -0
  419. data/test/xsd/test_xsd.rb +1639 -0
  420. data/test/xsd/xmllang.xml +43 -0
  421. data/test/xsd/xmlschema.xml +12 -0
  422. data/test/xsd/xsd2ruby/expected_mysample.rb +66 -0
  423. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +12 -0
  424. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +52 -0
  425. data/test/xsd/xsd2ruby/section.xsd +49 -0
  426. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +91 -0
  427. metadata +485 -0
@@ -0,0 +1,71 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - SOAP Header handler set
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'xsd/namedelements'
11
+
12
+
13
+ module SOAP
14
+ module Header
15
+
16
+
17
+ class HandlerSet
18
+ def initialize
19
+ @store = XSD::NamedElements.new
20
+ end
21
+
22
+ def dup
23
+ obj = HandlerSet.new
24
+ obj.store = @store.dup
25
+ obj
26
+ end
27
+
28
+ def add(handler)
29
+ @store << handler
30
+ end
31
+ alias << add
32
+
33
+ def delete(handler)
34
+ @store.delete(handler)
35
+ end
36
+
37
+ def include?(handler)
38
+ @store.include?(handler)
39
+ end
40
+
41
+ # returns: Array of SOAPHeaderItem
42
+ def on_outbound(header)
43
+ @store.collect { |handler|
44
+ handler.on_outbound_headeritem(header)
45
+ }.compact
46
+ end
47
+
48
+ # header: SOAPHeaderItem enumerable object
49
+ def on_inbound(header)
50
+ header.each do |name, item|
51
+ handler = @store.find { |handler|
52
+ handler.elename == item.element.elename
53
+ }
54
+ if handler
55
+ handler.on_inbound_headeritem(header, item)
56
+ elsif item.mustunderstand
57
+ raise UnhandledMustUnderstandHeaderError.new(item.element.elename.to_s)
58
+ end
59
+ end
60
+ end
61
+
62
+ protected
63
+
64
+ def store=(store)
65
+ @store = store
66
+ end
67
+ end
68
+
69
+
70
+ end
71
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - SOAP Mapping header item handler
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/header/handler'
11
+ require 'soap/mapping/mapping'
12
+
13
+
14
+ module SOAP
15
+ module Header
16
+
17
+
18
+ class MappingHandler < SOAP::Header::Handler
19
+ attr_accessor :registry
20
+
21
+ def initialize(elename, registry = nil)
22
+ super(elename)
23
+ @registry = registry
24
+ end
25
+
26
+ # Should return an Object for mapping
27
+ def on_mapping_outbound
28
+ nil
29
+ end
30
+
31
+ # Given header is a mapped Object
32
+ def on_mapping_inbound(obj, mustunderstand)
33
+ end
34
+
35
+ def on_outbound
36
+ obj = on_mapping_outbound
37
+ obj ? SOAP::Mapping.obj2soap(obj, @registry, @elename) : nil
38
+ end
39
+
40
+ def on_inbound(header, mustunderstand)
41
+ obj = SOAP::Mapping.soap2obj(header, @registry)
42
+ on_mapping_inbound(obj, mustunderstand)
43
+ end
44
+ end
45
+
46
+
47
+ end
48
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - SOAP Simple header item handler
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/header/handler'
11
+ require 'soap/baseData'
12
+
13
+
14
+ module SOAP
15
+ module Header
16
+
17
+
18
+ class SimpleHandler < SOAP::Header::Handler
19
+ def initialize(elename)
20
+ super(elename)
21
+ end
22
+
23
+ # Should return a Hash, String or nil.
24
+ def on_simple_outbound
25
+ nil
26
+ end
27
+
28
+ # Given header is a Hash, String or nil.
29
+ def on_simple_inbound(header, mustunderstand)
30
+ end
31
+
32
+ def on_outbound
33
+ h = on_simple_outbound
34
+ h ? SOAPElement.from_obj(h, elename.namespace) : nil
35
+ end
36
+
37
+ def on_inbound(header, mustunderstand)
38
+ h = header.respond_to?(:to_obj) ? header.to_obj : header.data
39
+ on_simple_inbound(h, mustunderstand)
40
+ end
41
+ end
42
+
43
+
44
+ end
45
+ end
@@ -0,0 +1,140 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - HTTP config loader.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/property'
11
+
12
+
13
+ module SOAP
14
+
15
+
16
+ module HTTPConfigLoader
17
+ module_function
18
+
19
+ def set_options(client, options)
20
+ client.proxy = options["proxy"]
21
+ options.add_hook("proxy") do |key, value|
22
+ client.proxy = value
23
+ end
24
+ client.no_proxy = options["no_proxy"]
25
+ options.add_hook("no_proxy") do |key, value|
26
+ client.no_proxy = value
27
+ end
28
+ if client.respond_to?(:protocol_version=)
29
+ client.protocol_version = options["protocol_version"]
30
+ options.add_hook("protocol_version") do |key, value|
31
+ client.protocol_version = value
32
+ end
33
+ end
34
+ ssl_config = options["ssl_config"] ||= ::SOAP::Property.new
35
+ set_ssl_config(client, ssl_config)
36
+ ssl_config.add_hook(true) do |key, value|
37
+ set_ssl_config(client, ssl_config)
38
+ end
39
+ basic_auth = options["basic_auth"] ||= ::SOAP::Property.new
40
+ set_basic_auth(client, basic_auth)
41
+ basic_auth.add_hook do |key, value|
42
+ set_basic_auth(client, basic_auth)
43
+ end
44
+ auth = options["auth"] ||= ::SOAP::Property.new
45
+ set_auth(client, auth)
46
+ auth.add_hook do |key, value|
47
+ set_auth(client, auth)
48
+ end
49
+ options.add_hook("connect_timeout") do |key, value|
50
+ client.connect_timeout = value
51
+ end
52
+ options.add_hook("send_timeout") do |key, value|
53
+ client.send_timeout = value
54
+ end
55
+ options.add_hook("receive_timeout") do |key, value|
56
+ client.receive_timeout = value
57
+ end
58
+ end
59
+
60
+ def set_basic_auth(client, basic_auth)
61
+ basic_auth.values.each do |ele|
62
+ client.set_basic_auth(*authele_to_triplets(ele))
63
+ end
64
+ end
65
+
66
+ def set_auth(client, auth)
67
+ auth.values.each do |ele|
68
+ client.set_auth(*authele_to_triplets(ele))
69
+ end
70
+ end
71
+
72
+ def authele_to_triplets(ele)
73
+ if ele.is_a?(::Array)
74
+ url, userid, passwd = ele
75
+ else
76
+ url, userid, passwd = ele[:url], ele[:userid], ele[:password]
77
+ end
78
+ return url, userid, passwd
79
+ end
80
+
81
+ def set_ssl_config(client, ssl_config)
82
+ ssl_config.each do |key, value|
83
+ cfg = client.ssl_config
84
+ if cfg.nil?
85
+ raise NotImplementedError.new("SSL not supported")
86
+ end
87
+ case key
88
+ when 'client_cert'
89
+ cfg.client_cert = cert_from_file(value)
90
+ when 'client_key'
91
+ cfg.client_key = key_from_file(value)
92
+ when 'client_ca'
93
+ cfg.client_ca = value
94
+ when 'ca_path'
95
+ cfg.set_trust_ca(value)
96
+ when 'ca_file'
97
+ cfg.set_trust_ca(value)
98
+ when 'crl'
99
+ cfg.set_crl(value)
100
+ when 'verify_mode'
101
+ cfg.verify_mode = ssl_config_int(value)
102
+ when 'verify_depth'
103
+ cfg.verify_depth = ssl_config_int(value)
104
+ when 'options'
105
+ cfg.options = value
106
+ when 'ciphers'
107
+ cfg.ciphers = value
108
+ when 'verify_callback'
109
+ cfg.verify_callback = value
110
+ when 'cert_store'
111
+ cfg.cert_store = value
112
+ else
113
+ raise ArgumentError.new("unknown ssl_config property #{key}")
114
+ end
115
+ end
116
+ end
117
+
118
+ def ssl_config_int(value)
119
+ if value.nil? or value.to_s.empty?
120
+ nil
121
+ else
122
+ begin
123
+ Integer(value)
124
+ rescue ArgumentError
125
+ ::SOAP::Property::Util.const_from_name(value.to_s)
126
+ end
127
+ end
128
+ end
129
+
130
+ def cert_from_file(filename)
131
+ OpenSSL::X509::Certificate.new(File.open(filename) { |f| f.read })
132
+ end
133
+
134
+ def key_from_file(filename)
135
+ OpenSSL::PKey::RSA.new(File.open(filename) { |f| f.read })
136
+ end
137
+ end
138
+
139
+
140
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - Ruby type mapping utility.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/mapping/mapping'
11
+ require 'soap/mapping/registry'
12
+ require 'soap/mapping/encodedregistry'
13
+ require 'soap/mapping/literalregistry'
@@ -0,0 +1,539 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - encoded mapping registry.
3
+ # Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
4
+
5
+ # This program is copyrighted free software by NAKAMURA, Hiroshi. You can
6
+ # redistribute it and/or modify it under the same terms of Ruby's license;
7
+ # either the dual license version in 2003, or any later version.
8
+
9
+
10
+ require 'soap/baseData'
11
+ require 'soap/mapping/mapping'
12
+ require 'soap/mapping/typeMap'
13
+ require 'soap/mapping/factory'
14
+ require 'soap/mapping/rubytypeFactory'
15
+
16
+
17
+ module SOAP
18
+ module Mapping
19
+
20
+
21
+ # Inner class to pass an exception.
22
+ class SOAPException
23
+ attr_reader :excn_type_name, :cause
24
+
25
+ def initialize(e)
26
+ @excn_type_name = Mapping.name2elename(e.class.to_s)
27
+ @cause = e
28
+ end
29
+
30
+ def to_e
31
+ if @cause.is_a?(::Exception)
32
+ @cause.extend(::SOAP::Mapping::MappedException)
33
+ return @cause
34
+ elsif @cause.respond_to?(:message) and @cause.respond_to?(:backtrace)
35
+ e = RuntimeError.new(@cause.message)
36
+ e.set_backtrace(@cause.backtrace)
37
+ return e
38
+ end
39
+ klass = Mapping.class_from_name(Mapping.elename2name(@excn_type_name.to_s))
40
+ if klass.nil? or not klass <= ::Exception
41
+ return RuntimeError.new(@cause.inspect)
42
+ end
43
+ obj = klass.new(@cause.message)
44
+ obj.extend(::SOAP::Mapping::MappedException)
45
+ obj
46
+ end
47
+ end
48
+
49
+
50
+ class EncodedRegistry
51
+ include TraverseSupport
52
+ include RegistrySupport
53
+
54
+ class Map
55
+ def initialize(registry)
56
+ @obj2soap = {}
57
+ @soap2obj = {}
58
+ @registry = registry
59
+ end
60
+
61
+ def obj2soap(obj)
62
+ klass = obj.class
63
+ if map = @obj2soap[klass]
64
+ map.each do |soap_class, factory, info|
65
+ ret = factory.obj2soap(soap_class, obj, info, @registry)
66
+ return ret if ret
67
+ end
68
+ end
69
+ klass.ancestors.each do |baseclass|
70
+ next if baseclass == klass
71
+ if map = @obj2soap[baseclass]
72
+ map.each do |soap_class, factory, info|
73
+ if info[:derived_class]
74
+ ret = factory.obj2soap(soap_class, obj, info, @registry)
75
+ return ret if ret
76
+ end
77
+ end
78
+ end
79
+ end
80
+ nil
81
+ end
82
+
83
+ def soap2obj(node, klass = nil)
84
+ if map = @soap2obj[node.class]
85
+ map.each do |obj_class, factory, info|
86
+ next if klass and obj_class != klass
87
+ conv, obj = factory.soap2obj(obj_class, node, info, @registry)
88
+ return true, obj if conv
89
+ end
90
+ end
91
+ return false, nil
92
+ end
93
+
94
+ # Give priority to former entry.
95
+ def init(init_map = [])
96
+ clear
97
+ init_map.reverse_each do |obj_class, soap_class, factory, info|
98
+ add(obj_class, soap_class, factory, info)
99
+ end
100
+ end
101
+
102
+ # Give priority to latter entry.
103
+ def add(obj_class, soap_class, factory, info)
104
+ info ||= {}
105
+ (@obj2soap[obj_class] ||= []).unshift([soap_class, factory, info])
106
+ (@soap2obj[soap_class] ||= []).unshift([obj_class, factory, info])
107
+ end
108
+
109
+ def clear
110
+ @obj2soap.clear
111
+ @soap2obj.clear
112
+ end
113
+
114
+ def find_mapped_soap_class(target_obj_class)
115
+ map = @obj2soap[target_obj_class]
116
+ map.empty? ? nil : map[0][1]
117
+ end
118
+
119
+ def find_mapped_obj_class(target_soap_class)
120
+ map = @soap2obj[target_soap_class]
121
+ map.empty? ? nil : map[0][0]
122
+ end
123
+ end
124
+
125
+ StringFactory = StringFactory_.new
126
+ BasetypeFactory = BasetypeFactory_.new
127
+ FixnumFactory = FixnumFactory_.new
128
+ DateTimeFactory = DateTimeFactory_.new
129
+ ArrayFactory = ArrayFactory_.new
130
+ Base64Factory = Base64Factory_.new
131
+ URIFactory = URIFactory_.new
132
+ TypedArrayFactory = TypedArrayFactory_.new
133
+ TypedStructFactory = TypedStructFactory_.new
134
+
135
+ HashFactory = HashFactory_.new
136
+
137
+ SOAPBaseMap = [
138
+ [::NilClass, ::SOAP::SOAPNil, BasetypeFactory],
139
+ [::TrueClass, ::SOAP::SOAPBoolean, BasetypeFactory],
140
+ [::FalseClass, ::SOAP::SOAPBoolean, BasetypeFactory],
141
+ [::String, ::SOAP::SOAPString, StringFactory,
142
+ {:derived_class => true}],
143
+ [::DateTime, ::SOAP::SOAPDateTime, DateTimeFactory],
144
+ [::Date, ::SOAP::SOAPDate, DateTimeFactory],
145
+ [::Time, ::SOAP::SOAPDateTime, DateTimeFactory],
146
+ [::Time, ::SOAP::SOAPTime, DateTimeFactory],
147
+ [::Float, ::SOAP::SOAPDouble, BasetypeFactory,
148
+ {:derived_class => true}],
149
+ [::Float, ::SOAP::SOAPFloat, BasetypeFactory,
150
+ {:derived_class => true}],
151
+ [::Fixnum, ::SOAP::SOAPInt, FixnumFactory],
152
+ [::Integer, ::SOAP::SOAPInt, BasetypeFactory,
153
+ {:derived_class => true}],
154
+ [::Integer, ::SOAP::SOAPLong, BasetypeFactory,
155
+ {:derived_class => true}],
156
+ [::Integer, ::SOAP::SOAPInteger, BasetypeFactory,
157
+ {:derived_class => true}],
158
+ [::Integer, ::SOAP::SOAPShort, BasetypeFactory,
159
+ {:derived_class => true}],
160
+ [::Integer, ::SOAP::SOAPByte, BasetypeFactory,
161
+ {:derived_class => true}],
162
+ [::Integer, ::SOAP::SOAPNonPositiveInteger, BasetypeFactory,
163
+ {:derived_class => true}],
164
+ [::Integer, ::SOAP::SOAPNegativeInteger, BasetypeFactory,
165
+ {:derived_class => true}],
166
+ [::Integer, ::SOAP::SOAPNonNegativeInteger, BasetypeFactory,
167
+ {:derived_class => true}],
168
+ [::Integer, ::SOAP::SOAPPositiveInteger, BasetypeFactory,
169
+ {:derived_class => true}],
170
+ [::Integer, ::SOAP::SOAPUnsignedLong, BasetypeFactory,
171
+ {:derived_class => true}],
172
+ [::Integer, ::SOAP::SOAPUnsignedInt, BasetypeFactory,
173
+ {:derived_class => true}],
174
+ [::Integer, ::SOAP::SOAPUnsignedShort, BasetypeFactory,
175
+ {:derived_class => true}],
176
+ [::Integer, ::SOAP::SOAPUnsignedByte, BasetypeFactory,
177
+ {:derived_class => true}],
178
+ [::URI::Generic, ::SOAP::SOAPAnyURI, URIFactory,
179
+ {:derived_class => true}],
180
+ [::String, ::SOAP::SOAPBase64, Base64Factory],
181
+ [::String, ::SOAP::SOAPHexBinary, Base64Factory],
182
+ [::String, ::SOAP::SOAPDecimal, BasetypeFactory],
183
+ [::String, ::SOAP::SOAPDuration, BasetypeFactory],
184
+ [::String, ::SOAP::SOAPGYearMonth, BasetypeFactory],
185
+ [::String, ::SOAP::SOAPGYear, BasetypeFactory],
186
+ [::String, ::SOAP::SOAPGMonthDay, BasetypeFactory],
187
+ [::String, ::SOAP::SOAPGDay, BasetypeFactory],
188
+ [::String, ::SOAP::SOAPGMonth, BasetypeFactory],
189
+ [::String, ::SOAP::SOAPQName, BasetypeFactory],
190
+
191
+ [::Hash, ::SOAP::SOAPArray, HashFactory,
192
+ {:derived_class => true}],
193
+ [::Hash, ::SOAP::SOAPStruct, HashFactory,
194
+ {:derived_class => true}],
195
+
196
+ [::Array, ::SOAP::SOAPArray, ArrayFactory,
197
+ {:derived_class => true}],
198
+
199
+ [::SOAP::Mapping::SOAPException,
200
+ ::SOAP::SOAPStruct, TypedStructFactory,
201
+ {:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}],
202
+ ]
203
+
204
+ RubyOriginalMap = [
205
+ [::NilClass, ::SOAP::SOAPNil, BasetypeFactory],
206
+ [::TrueClass, ::SOAP::SOAPBoolean, BasetypeFactory],
207
+ [::FalseClass, ::SOAP::SOAPBoolean, BasetypeFactory],
208
+ [::String, ::SOAP::SOAPString, StringFactory],
209
+ [::DateTime, ::SOAP::SOAPDateTime, DateTimeFactory],
210
+ [::Date, ::SOAP::SOAPDate, DateTimeFactory],
211
+ [::Time, ::SOAP::SOAPDateTime, DateTimeFactory],
212
+ [::Time, ::SOAP::SOAPTime, DateTimeFactory],
213
+ [::Float, ::SOAP::SOAPDouble, BasetypeFactory,
214
+ {:derived_class => true}],
215
+ [::Float, ::SOAP::SOAPFloat, BasetypeFactory,
216
+ {:derived_class => true}],
217
+ [::Fixnum, ::SOAP::SOAPInt, FixnumFactory],
218
+ [::Integer, ::SOAP::SOAPInt, BasetypeFactory,
219
+ {:derived_class => true}],
220
+ [::Integer, ::SOAP::SOAPLong, BasetypeFactory,
221
+ {:derived_class => true}],
222
+ [::Integer, ::SOAP::SOAPInteger, BasetypeFactory,
223
+ {:derived_class => true}],
224
+ [::Integer, ::SOAP::SOAPShort, BasetypeFactory,
225
+ {:derived_class => true}],
226
+ [::Integer, ::SOAP::SOAPByte, BasetypeFactory,
227
+ {:derived_class => true}],
228
+ [::Integer, ::SOAP::SOAPNonPositiveInteger, BasetypeFactory,
229
+ {:derived_class => true}],
230
+ [::Integer, ::SOAP::SOAPNegativeInteger, BasetypeFactory,
231
+ {:derived_class => true}],
232
+ [::Integer, ::SOAP::SOAPNonNegativeInteger, BasetypeFactory,
233
+ {:derived_class => true}],
234
+ [::Integer, ::SOAP::SOAPPositiveInteger, BasetypeFactory,
235
+ {:derived_class => true}],
236
+ [::Integer, ::SOAP::SOAPUnsignedLong, BasetypeFactory,
237
+ {:derived_class => true}],
238
+ [::Integer, ::SOAP::SOAPUnsignedInt, BasetypeFactory,
239
+ {:derived_class => true}],
240
+ [::Integer, ::SOAP::SOAPUnsignedShort, BasetypeFactory,
241
+ {:derived_class => true}],
242
+ [::Integer, ::SOAP::SOAPUnsignedByte, BasetypeFactory,
243
+ {:derived_class => true}],
244
+ [::URI::Generic, ::SOAP::SOAPAnyURI, URIFactory,
245
+ {:derived_class => true}],
246
+ [::String, ::SOAP::SOAPBase64, Base64Factory],
247
+ [::String, ::SOAP::SOAPHexBinary, Base64Factory],
248
+ [::String, ::SOAP::SOAPDecimal, BasetypeFactory],
249
+ [::String, ::SOAP::SOAPDuration, BasetypeFactory],
250
+ [::String, ::SOAP::SOAPGYearMonth, BasetypeFactory],
251
+ [::String, ::SOAP::SOAPGYear, BasetypeFactory],
252
+ [::String, ::SOAP::SOAPGMonthDay, BasetypeFactory],
253
+ [::String, ::SOAP::SOAPGDay, BasetypeFactory],
254
+ [::String, ::SOAP::SOAPGMonth, BasetypeFactory],
255
+ [::String, ::SOAP::SOAPQName, BasetypeFactory],
256
+
257
+ [::Hash, ::SOAP::SOAPArray, HashFactory],
258
+ [::Hash, ::SOAP::SOAPStruct, HashFactory],
259
+
260
+ # Does not allow Array's subclass here.
261
+ [::Array, ::SOAP::SOAPArray, ArrayFactory],
262
+
263
+ [::SOAP::Mapping::SOAPException,
264
+ ::SOAP::SOAPStruct, TypedStructFactory,
265
+ {:type => XSD::QName.new(RubyCustomTypeNamespace, "SOAPException")}],
266
+ ]
267
+
268
+ attr_accessor :default_factory
269
+ attr_accessor :excn_handler_obj2soap
270
+ attr_accessor :excn_handler_soap2obj
271
+
272
+ def initialize(config = {})
273
+ super()
274
+ @config = config
275
+ @map = Map.new(self)
276
+ if @config[:allow_original_mapping]
277
+ @allow_original_mapping = true
278
+ @map.init(RubyOriginalMap)
279
+ else
280
+ @allow_original_mapping = false
281
+ @map.init(SOAPBaseMap)
282
+ end
283
+ @allow_untyped_struct = @config.key?(:allow_untyped_struct) ?
284
+ @config[:allow_untyped_struct] : true
285
+ @rubytype_factory = RubytypeFactory.new(
286
+ :allow_untyped_struct => @allow_untyped_struct,
287
+ :allow_original_mapping => @allow_original_mapping
288
+ )
289
+ @default_factory = @rubytype_factory
290
+ @excn_handler_obj2soap = nil
291
+ @excn_handler_soap2obj = nil
292
+ end
293
+
294
+ # initial mapping interface
295
+ # new interface Registry#register is defined in RegisterSupport
296
+ def add(obj_class, soap_class, factory, info = nil)
297
+ @map.add(obj_class, soap_class, factory, info)
298
+ end
299
+ alias set add
300
+
301
+ def obj2soap(obj, type_qname = nil)
302
+ soap = _obj2soap(obj, type_qname)
303
+ if @allow_original_mapping
304
+ addextend2soap(soap, obj)
305
+ end
306
+ soap
307
+ end
308
+
309
+ def soap2obj(node, klass = nil)
310
+ obj = _soap2obj(node, klass)
311
+ if @allow_original_mapping
312
+ addextend2obj(obj, node.extraattr[RubyExtendName])
313
+ addiv2obj(obj, node.extraattr[RubyIVarName])
314
+ end
315
+ obj
316
+ end
317
+
318
+ def find_mapped_soap_class(obj_class)
319
+ @map.find_mapped_soap_class(obj_class)
320
+ end
321
+
322
+ def find_mapped_obj_class(soap_class)
323
+ @map.find_mapped_obj_class(soap_class)
324
+ end
325
+
326
+ private
327
+
328
+ def _obj2soap(obj, type_qname = nil)
329
+ ret = nil
330
+ if obj.is_a?(SOAPCompoundtype)
331
+ obj.replace do |ele|
332
+ Mapping._obj2soap(ele, self)
333
+ end
334
+ return obj
335
+ elsif obj.is_a?(SOAPBasetype)
336
+ return obj
337
+ elsif type_qname && type = TypeMap[type_qname]
338
+ return base2soap(obj, type)
339
+ end
340
+ cause = nil
341
+ begin
342
+ if definition = schema_definition_from_class(obj.class)
343
+ return stubobj2soap(obj, definition)
344
+ end
345
+ ret = @map.obj2soap(obj) ||
346
+ @default_factory.obj2soap(nil, obj, nil, self)
347
+ return ret if ret
348
+ rescue MappingError
349
+ cause = $!
350
+ end
351
+ if @excn_handler_obj2soap
352
+ ret = @excn_handler_obj2soap.call(obj) { |yield_obj|
353
+ Mapping._obj2soap(yield_obj, self)
354
+ }
355
+ return ret if ret
356
+ end
357
+ raise MappingError.new("Cannot map #{ obj.class.name } to SOAP/OM.", cause)
358
+ end
359
+
360
+ # Might return nil as a mapping result.
361
+ def _soap2obj(node, klass = nil)
362
+ definition = find_node_definition(node)
363
+ if klass
364
+ klass_definition = schema_definition_from_class(klass)
365
+ if definition and (definition.class_for < klass)
366
+ klass = definition.class_for
367
+ else
368
+ definition = klass_definition
369
+ end
370
+ else
371
+ klass = definition.class_for if definition
372
+ end
373
+ if definition and node.is_a?(::SOAP::SOAPNameAccessible)
374
+ return elesoap2stubobj(node, klass, definition)
375
+ end
376
+ if node.extraattr.key?(RubyTypeName)
377
+ conv, obj = @rubytype_factory.soap2obj(nil, node, nil, self)
378
+ return obj if conv
379
+ end
380
+ conv, obj = @map.soap2obj(node)
381
+ return obj if conv
382
+ conv, obj = @default_factory.soap2obj(nil, node, nil, self)
383
+ return obj if conv
384
+ cause = nil
385
+ if @excn_handler_soap2obj
386
+ begin
387
+ return @excn_handler_soap2obj.call(node) { |yield_node|
388
+ Mapping._soap2obj(yield_node, self)
389
+ }
390
+ rescue Exception
391
+ cause = $!
392
+ end
393
+ end
394
+ raise MappingError.new("Cannot map #{ node.type } to Ruby object.", cause)
395
+ end
396
+
397
+ def addiv2obj(obj, attr)
398
+ return unless attr
399
+ vars = {}
400
+ attr.__getobj__.each do |name, value|
401
+ vars[name] = Mapping._soap2obj(value, self)
402
+ end
403
+ Mapping.set_attributes(obj, vars)
404
+ end
405
+
406
+ def addextend2obj(obj, attr)
407
+ return unless attr
408
+ attr.split(/ /).reverse_each do |mstr|
409
+ obj.extend(Mapping.module_from_name(mstr))
410
+ end
411
+ end
412
+
413
+ def addextend2soap(node, obj)
414
+ return if obj.is_a?(Symbol) or obj.is_a?(Fixnum)
415
+ list = (class << obj; self; end).ancestors - obj.class.ancestors
416
+ unless list.empty?
417
+ node.extraattr[RubyExtendName] = list.collect { |c|
418
+ name = c.name
419
+ if name.nil? or name.empty?
420
+ raise TypeError.new("singleton can't be dumped #{ obj }")
421
+ end
422
+ name
423
+ }.join(" ")
424
+ end
425
+ end
426
+
427
+ def stubobj2soap(obj, definition)
428
+ case obj
429
+ when ::Array
430
+ array2soap(obj, definition)
431
+ else
432
+ unknownstubobj2soap(obj, definition)
433
+ end
434
+ end
435
+
436
+ def array2soap(obj, definition)
437
+ return SOAPNil.new if obj.nil? # ToDo: check nillable.
438
+ eledef = definition.elements[0]
439
+ soap_obj = SOAPArray.new(ValueArrayName, 1, eledef.elename)
440
+ mark_marshalled_obj(obj, soap_obj)
441
+ obj.each do |item|
442
+ soap_obj.add(typedobj2soap(item, eledef.mapped_class))
443
+ end
444
+ soap_obj
445
+ end
446
+
447
+ def unknownstubobj2soap(obj, definition)
448
+ return SOAPNil.new if obj.nil?
449
+ if definition.elements.size == 0
450
+ ele = Mapping.obj2soap(obj)
451
+ ele.elename = definition.elename if definition.elename
452
+ ele.extraattr[XSD::AttrTypeName] = definition.type if definition.type
453
+ return ele
454
+ else
455
+ ele = SOAPStruct.new(definition.type)
456
+ mark_marshalled_obj(obj, ele)
457
+ end
458
+ definition.elements.each do |eledef|
459
+ name = eledef.elename.name
460
+ if obj.respond_to?(:each) and eledef.as_array?
461
+ obj.each do |item|
462
+ ele.add(name, typedobj2soap(item, eledef.mapped_class))
463
+ end
464
+ else
465
+ child = Mapping.get_attribute(obj, eledef.varname)
466
+ if child.respond_to?(:each) and eledef.as_array?
467
+ child = child.lines if child.respond_to?(:lines) # RubyJedi: compatible with Ruby 1.8.6 and above
468
+ child.each do |item|
469
+ ele.add(name, typedobj2soap(item, eledef.mapped_class))
470
+ end
471
+ else
472
+ ele.add(name, typedobj2soap(child, eledef.mapped_class))
473
+ end
474
+ end
475
+ end
476
+ ele
477
+ end
478
+
479
+ def typedobj2soap(value, klass)
480
+ if klass and klass.include?(::SOAP::SOAPBasetype)
481
+ base2soap(value, klass)
482
+ else
483
+ Mapping._obj2soap(value, self)
484
+ end
485
+ end
486
+
487
+ def elesoap2stubobj(node, obj_class, definition)
488
+ obj = Mapping.create_empty_object(obj_class)
489
+ add_elesoap2stubobj(node, obj, definition)
490
+ obj
491
+ end
492
+
493
+ # XXX consider to merge with the method in LiteralRegistry
494
+ def add_elesoap2stubobj(node, obj, definition)
495
+ vars = {}
496
+ node.each do |name, value|
497
+ item = definition.elements.find_element(value.elename)
498
+ if item
499
+ child = soap2typedobj(value, item.mapped_class)
500
+ else
501
+ # unknown element is treated as anyType.
502
+ child = Mapping._soap2obj(value, self)
503
+ end
504
+ if item and item.as_array?
505
+ (vars[name] ||= []) << child
506
+ elsif vars.key?(name)
507
+ vars[name] = [vars[name], child].flatten
508
+ else
509
+ vars[name] = child
510
+ end
511
+ end
512
+ if obj.is_a?(::Array) and is_stubobj_elements_for_array(vars)
513
+ Array.instance_method(:replace).bind(obj).call(vars.values[0])
514
+ else
515
+ Mapping.set_attributes(obj, vars)
516
+ end
517
+ end
518
+
519
+ def soap2typedobj(value, klass)
520
+ unless klass
521
+ raise MappingError.new("unknown class: #{klass}")
522
+ end
523
+ if klass.include?(::SOAP::SOAPBasetype)
524
+ obj = base2obj(value, klass)
525
+ else
526
+ obj = Mapping._soap2obj(value, self, klass)
527
+ end
528
+ obj
529
+ end
530
+ end
531
+
532
+
533
+ Registry = EncodedRegistry
534
+ DefaultRegistry = EncodedRegistry.new
535
+ RubyOriginalRegistry = EncodedRegistry.new(:allow_original_mapping => true)
536
+
537
+
538
+ end
539
+ end