tomdz-soap4r 1.5.8.20111103171510

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. data/bin/wsdl2ruby.rb +139 -0
  2. data/bin/xsd2ruby.rb +91 -0
  3. data/lib/soap/attachment.rb +109 -0
  4. data/lib/soap/attrproxy.rb +35 -0
  5. data/lib/soap/baseData.rb +1095 -0
  6. data/lib/soap/element.rb +278 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
  8. data/lib/soap/encodingstyle/handler.rb +121 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +196 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +560 -0
  11. data/lib/soap/filter.rb +14 -0
  12. data/lib/soap/filter/filterchain.rb +52 -0
  13. data/lib/soap/filter/handler.rb +32 -0
  14. data/lib/soap/filter/streamhandler.rb +30 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +62 -0
  17. data/lib/soap/header/handlerset.rb +71 -0
  18. data/lib/soap/header/mappinghandler.rb +48 -0
  19. data/lib/soap/header/simplehandler.rb +45 -0
  20. data/lib/soap/httpconfigloader.rb +140 -0
  21. data/lib/soap/mapping.rb +13 -0
  22. data/lib/soap/mapping/encodedregistry.rb +539 -0
  23. data/lib/soap/mapping/factory.rb +389 -0
  24. data/lib/soap/mapping/literalregistry.rb +392 -0
  25. data/lib/soap/mapping/mapping.rb +577 -0
  26. data/lib/soap/mapping/registry.rb +296 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +171 -0
  29. data/lib/soap/mapping/typeMap.rb +107 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
  32. data/lib/soap/marshal.rb +60 -0
  33. data/lib/soap/mimemessage.rb +243 -0
  34. data/lib/soap/nestedexception.rb +43 -0
  35. data/lib/soap/netHttpClient.rb +242 -0
  36. data/lib/soap/ns.rb +39 -0
  37. data/lib/soap/parser.rb +253 -0
  38. data/lib/soap/processor.rb +67 -0
  39. data/lib/soap/property.rb +340 -0
  40. data/lib/soap/proxy.rb +15 -0
  41. data/lib/soap/rpc/cgistub.rb +248 -0
  42. data/lib/soap/rpc/driver.rb +222 -0
  43. data/lib/soap/rpc/element.rb +375 -0
  44. data/lib/soap/rpc/httpserver.rb +143 -0
  45. data/lib/soap/rpc/methodDef.rb +69 -0
  46. data/lib/soap/rpc/proxy.rb +573 -0
  47. data/lib/soap/rpc/router.rb +663 -0
  48. data/lib/soap/rpc/rpc.rb +26 -0
  49. data/lib/soap/rpc/soaplet.rb +201 -0
  50. data/lib/soap/rpc/standaloneServer.rb +44 -0
  51. data/lib/soap/soap.rb +154 -0
  52. data/lib/soap/streamHandler.rb +302 -0
  53. data/lib/soap/version.rb +9 -0
  54. data/lib/soap/wsdlDriver.rb +165 -0
  55. data/lib/wsdl/binding.rb +66 -0
  56. data/lib/wsdl/data.rb +65 -0
  57. data/lib/wsdl/definitions.rb +237 -0
  58. data/lib/wsdl/documentation.rb +33 -0
  59. data/lib/wsdl/import.rb +81 -0
  60. data/lib/wsdl/importer.rb +39 -0
  61. data/lib/wsdl/info.rb +51 -0
  62. data/lib/wsdl/message.rb +55 -0
  63. data/lib/wsdl/operation.rb +152 -0
  64. data/lib/wsdl/operationBinding.rb +241 -0
  65. data/lib/wsdl/param.rb +94 -0
  66. data/lib/wsdl/parser.rb +165 -0
  67. data/lib/wsdl/part.rb +53 -0
  68. data/lib/wsdl/port.rb +67 -0
  69. data/lib/wsdl/portType.rb +76 -0
  70. data/lib/wsdl/service.rb +62 -0
  71. data/lib/wsdl/soap/address.rb +41 -0
  72. data/lib/wsdl/soap/binding.rb +50 -0
  73. data/lib/wsdl/soap/body.rb +59 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +434 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +241 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +55 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
  79. data/lib/wsdl/soap/complexType.rb +174 -0
  80. data/lib/wsdl/soap/data.rb +43 -0
  81. data/lib/wsdl/soap/definitions.rb +201 -0
  82. data/lib/wsdl/soap/driverCreator.rb +121 -0
  83. data/lib/wsdl/soap/element.rb +34 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
  85. data/lib/wsdl/soap/fault.rb +57 -0
  86. data/lib/wsdl/soap/header.rb +87 -0
  87. data/lib/wsdl/soap/headerfault.rb +57 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +377 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +200 -0
  92. data/lib/wsdl/soap/operation.rb +113 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +105 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +226 -0
  97. data/lib/wsdl/types.rb +45 -0
  98. data/lib/wsdl/wsdl.rb +25 -0
  99. data/lib/wsdl/xmlSchema/all.rb +25 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +35 -0
  101. data/lib/wsdl/xmlSchema/any.rb +62 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +105 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +59 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +194 -0
  110. data/lib/wsdl/xmlSchema/content.rb +96 -0
  111. data/lib/wsdl/xmlSchema/data.rb +117 -0
  112. data/lib/wsdl/xmlSchema/element.rb +154 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
  115. data/lib/wsdl/xmlSchema/group.rb +101 -0
  116. data/lib/wsdl/xmlSchema/import.rb +54 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +46 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +103 -0
  119. data/lib/wsdl/xmlSchema/include.rb +49 -0
  120. data/lib/wsdl/xmlSchema/length.rb +38 -0
  121. data/lib/wsdl/xmlSchema/list.rb +49 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +38 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +168 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +37 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +34 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +179 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +55 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
  138. data/lib/wsdl/xmlSchema/union.rb +36 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +35 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +176 -0
  142. data/lib/xsd/charset.rb +190 -0
  143. data/lib/xsd/codegen.rb +13 -0
  144. data/lib/xsd/codegen/classdef.rb +209 -0
  145. data/lib/xsd/codegen/commentdef.rb +35 -0
  146. data/lib/xsd/codegen/gensupport.rb +277 -0
  147. data/lib/xsd/codegen/methoddef.rb +71 -0
  148. data/lib/xsd/codegen/moduledef.rb +209 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +21 -0
  151. data/lib/xsd/iconvcharset.rb +34 -0
  152. data/lib/xsd/mapping.rb +69 -0
  153. data/lib/xsd/namedelements.rb +133 -0
  154. data/lib/xsd/ns.rb +183 -0
  155. data/lib/xsd/qname.rb +80 -0
  156. data/lib/xsd/xmlparser.rb +77 -0
  157. data/lib/xsd/xmlparser/libxmlparser.rb +116 -0
  158. data/lib/xsd/xmlparser/parser.rb +101 -0
  159. data/lib/xsd/xmlparser/rexmlparser.rb +59 -0
  160. data/lib/xsd/xmlparser/xmlparser.rb +51 -0
  161. data/lib/xsd/xmlparser/xmlscanner.rb +150 -0
  162. data/test/16runner.rb +69 -0
  163. data/test/helper.rb +7 -0
  164. data/test/interopR2/README.txt +2 -0
  165. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  166. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  167. data/test/interopR2/base.rb +289 -0
  168. data/test/interopR2/client.NetRemoting.rb +18 -0
  169. data/test/interopR2/client.rb +1235 -0
  170. data/test/interopR2/client4S4C.rb +16 -0
  171. data/test/interopR2/client4S4C2.rb +15 -0
  172. data/test/interopR2/clientASP.NET.rb +18 -0
  173. data/test/interopR2/clientApacheAxis.rb +17 -0
  174. data/test/interopR2/clientApacheSOAP.rb +18 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +18 -0
  176. data/test/interopR2/clientBase.rb +1968 -0
  177. data/test/interopR2/clientCapeConnect.rb +19 -0
  178. data/test/interopR2/clientDelphi.rb +20 -0
  179. data/test/interopR2/clientEasySoap.rb +15 -0
  180. data/test/interopR2/clientFrontier.rb +26 -0
  181. data/test/interopR2/clientGLUE.rb +33 -0
  182. data/test/interopR2/clientHP.rb +14 -0
  183. data/test/interopR2/clientJAX-RPC.rb +20 -0
  184. data/test/interopR2/clientJSOAP.rb +15 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +16 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +18 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +18 -0
  188. data/test/interopR2/clientNuSOAP.rb +20 -0
  189. data/test/interopR2/clientNuWave.rb +16 -0
  190. data/test/interopR2/clientOpenLink.rb +16 -0
  191. data/test/interopR2/clientOracle.rb +16 -0
  192. data/test/interopR2/clientPEAR.rb +19 -0
  193. data/test/interopR2/clientPhalanx.rb +19 -0
  194. data/test/interopR2/clientSIMACE.rb +19 -0
  195. data/test/interopR2/clientSOAP4R.rb +19 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +15 -0
  197. data/test/interopR2/clientSQLData.rb +19 -0
  198. data/test/interopR2/clientSilverStream.rb +18 -0
  199. data/test/interopR2/clientSpray2001.rb +18 -0
  200. data/test/interopR2/clientSun.rb +20 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +20 -0
  202. data/test/interopR2/clientWASP.rb +20 -0
  203. data/test/interopR2/clientWASPC.rb +19 -0
  204. data/test/interopR2/clientWebMethods.rb +16 -0
  205. data/test/interopR2/clientWhiteMesa.rb +29 -0
  206. data/test/interopR2/clientWingfoot.rb +16 -0
  207. data/test/interopR2/clientXMLBus.rb +20 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +18 -0
  209. data/test/interopR2/clientXSOAP.rb +15 -0
  210. data/test/interopR2/clientZSI.rb +20 -0
  211. data/test/interopR2/clienteSOAP.rb +19 -0
  212. data/test/interopR2/clientgSOAP.rb +19 -0
  213. data/test/interopR2/clientkSOAP.rb +18 -0
  214. data/test/interopR2/iSimonReg.rb +113 -0
  215. data/test/interopR2/interopResultBase.rb +115 -0
  216. data/test/interopR2/interopService.rb +248 -0
  217. data/test/interopR2/rwikiInteropService.rb +106 -0
  218. data/test/interopR2/server.cgi +271 -0
  219. data/test/interopR2/server.rb +276 -0
  220. data/test/interopR2/simonReg.rb +124 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +113 -0
  223. data/test/runner.rb +8 -0
  224. data/test/sm11/classDef.rb +157 -0
  225. data/test/sm11/client.rb +543 -0
  226. data/test/sm11/driver.rb +184 -0
  227. data/test/sm11/servant.rb +1068 -0
  228. data/test/sm11/server.rb +26 -0
  229. data/test/soap/asp.net/hello.wsdl +96 -0
  230. data/test/soap/asp.net/test_aspdotnet.rb +124 -0
  231. data/test/soap/auth/htdigest +2 -0
  232. data/test/soap/auth/htpasswd +2 -0
  233. data/test/soap/auth/test_basic.rb +118 -0
  234. data/test/soap/auth/test_digest.rb +119 -0
  235. data/test/soap/calc/calc.rb +18 -0
  236. data/test/soap/calc/calc2.rb +30 -0
  237. data/test/soap/calc/server.cgi +16 -0
  238. data/test/soap/calc/server.rb +18 -0
  239. data/test/soap/calc/server2.rb +21 -0
  240. data/test/soap/calc/test_calc.rb +53 -0
  241. data/test/soap/calc/test_calc2.rb +57 -0
  242. data/test/soap/calc/test_calc_cgi.rb +72 -0
  243. data/test/soap/case/test_mapping.rb +58 -0
  244. data/test/soap/fault/test_customfault.rb +61 -0
  245. data/test/soap/fault/test_fault.rb +47 -0
  246. data/test/soap/fault/test_soaparray.rb +36 -0
  247. data/test/soap/filter/test_filter.rb +147 -0
  248. data/test/soap/header/server.cgi +121 -0
  249. data/test/soap/header/test_authheader.rb +241 -0
  250. data/test/soap/header/test_authheader_cgi.rb +122 -0
  251. data/test/soap/header/test_simplehandler.rb +117 -0
  252. data/test/soap/helloworld/hw_s.rb +17 -0
  253. data/test/soap/helloworld/test_helloworld.rb +45 -0
  254. data/test/soap/htpasswd +2 -0
  255. data/test/soap/literalArrayMapping/amazonEc.rb +4779 -0
  256. data/test/soap/literalArrayMapping/amazonEcDriver.rb +173 -0
  257. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  258. data/test/soap/literalArrayMapping/test_definedarray.rb +35 -0
  259. data/test/soap/marshal/marshaltestlib.rb +498 -0
  260. data/test/soap/marshal/test_digraph.rb +57 -0
  261. data/test/soap/marshal/test_marshal.rb +28 -0
  262. data/test/soap/marshal/test_struct.rb +48 -0
  263. data/test/soap/ssl/README +1 -0
  264. data/test/soap/ssl/ca.cert +23 -0
  265. data/test/soap/ssl/client.cert +19 -0
  266. data/test/soap/ssl/client.key +15 -0
  267. data/test/soap/ssl/server.cert +19 -0
  268. data/test/soap/ssl/server.key +15 -0
  269. data/test/soap/ssl/sslsvr.rb +59 -0
  270. data/test/soap/ssl/subca.cert +21 -0
  271. data/test/soap/ssl/test_ssl.rb +236 -0
  272. data/test/soap/struct/test_struct.rb +71 -0
  273. data/test/soap/styleuse/client.rb +21 -0
  274. data/test/soap/styleuse/server.rb +87 -0
  275. data/test/soap/swa/test_file.rb +76 -0
  276. data/test/soap/test_basetype.rb +1091 -0
  277. data/test/soap/test_cookie.rb +113 -0
  278. data/test/soap/test_custom_ns.rb +106 -0
  279. data/test/soap/test_custommap.rb +111 -0
  280. data/test/soap/test_empty.rb +106 -0
  281. data/test/soap/test_envelopenamespace.rb +86 -0
  282. data/test/soap/test_extraattr.rb +55 -0
  283. data/test/soap/test_generator.rb +32 -0
  284. data/test/soap/test_httpconfigloader.rb +72 -0
  285. data/test/soap/test_mapping.rb +132 -0
  286. data/test/soap/test_nestedexception.rb +71 -0
  287. data/test/soap/test_nil.rb +71 -0
  288. data/test/soap/test_no_indent.rb +89 -0
  289. data/test/soap/test_property.rb +429 -0
  290. data/test/soap/test_response_as_xml.rb +118 -0
  291. data/test/soap/test_soapelement.rb +139 -0
  292. data/test/soap/test_streamhandler.rb +271 -0
  293. data/test/soap/test_styleuse.rb +327 -0
  294. data/test/soap/wsdlDriver/README.txt +2 -0
  295. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  296. data/test/soap/wsdlDriver/document.wsdl +54 -0
  297. data/test/soap/wsdlDriver/echo_version.rb +30 -0
  298. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  299. data/test/soap/wsdlDriver/test_calc.rb +72 -0
  300. data/test/soap/wsdlDriver/test_document.rb +72 -0
  301. data/test/soap/wsdlDriver/test_simpletype.rb +82 -0
  302. data/test/testutil.rb +55 -0
  303. data/test/wsdl/abstract/abstract.wsdl +176 -0
  304. data/test/wsdl/abstract/test_abstract.rb +160 -0
  305. data/test/wsdl/anonymous/expectedClassDef.rb +129 -0
  306. data/test/wsdl/anonymous/expectedDriver.rb +60 -0
  307. data/test/wsdl/anonymous/expectedMappingRegistry.rb +177 -0
  308. data/test/wsdl/anonymous/lp.wsdl +147 -0
  309. data/test/wsdl/anonymous/test_anonymous.rb +131 -0
  310. data/test/wsdl/any/any.wsdl +114 -0
  311. data/test/wsdl/any/expectedDriver.rb +69 -0
  312. data/test/wsdl/any/expectedEcho.rb +58 -0
  313. data/test/wsdl/any/expectedMappingRegistry.rb +64 -0
  314. data/test/wsdl/any/expectedService.rb +70 -0
  315. data/test/wsdl/any/test_any.rb +194 -0
  316. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  317. data/test/wsdl/axisArray/test_axisarray.rb +125 -0
  318. data/test/wsdl/choice/choice.wsdl +167 -0
  319. data/test/wsdl/choice/test_choice.rb +311 -0
  320. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  321. data/test/wsdl/complexcontent/test_echo.rb +91 -0
  322. data/test/wsdl/datetime/DatetimeService.rb +45 -0
  323. data/test/wsdl/datetime/datetime.rb +0 -0
  324. data/test/wsdl/datetime/datetime.wsdl +45 -0
  325. data/test/wsdl/datetime/datetimeServant.rb +23 -0
  326. data/test/wsdl/datetime/test_datetime.rb +88 -0
  327. data/test/wsdl/document/array/double.wsdl +161 -0
  328. data/test/wsdl/document/array/test_array.rb +202 -0
  329. data/test/wsdl/document/document.wsdl +76 -0
  330. data/test/wsdl/document/number.wsdl +54 -0
  331. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  332. data/test/wsdl/document/test_nosoapaction.rb +103 -0
  333. data/test/wsdl/document/test_number.rb +93 -0
  334. data/test/wsdl/document/test_rpc.rb +356 -0
  335. data/test/wsdl/emptycomplextype.wsdl +31 -0
  336. data/test/wsdl/fault/fault.wsdl +79 -0
  337. data/test/wsdl/fault/multifault.wsdl +96 -0
  338. data/test/wsdl/fault/test_fault.rb +120 -0
  339. data/test/wsdl/fault/test_multifault.rb +135 -0
  340. data/test/wsdl/group/expectedClassdef.rb +59 -0
  341. data/test/wsdl/group/expectedDriver.rb +52 -0
  342. data/test/wsdl/group/expectedMappingRegistry.rb +68 -0
  343. data/test/wsdl/group/group.wsdl +88 -0
  344. data/test/wsdl/group/test_rpc.rb +146 -0
  345. data/test/wsdl/list/list.wsdl +93 -0
  346. data/test/wsdl/list/test_list.rb +125 -0
  347. data/test/wsdl/map/map.wsdl +92 -0
  348. data/test/wsdl/map/map.xml +43 -0
  349. data/test/wsdl/map/test_map.rb +100 -0
  350. data/test/wsdl/marshal/person.wsdl +21 -0
  351. data/test/wsdl/marshal/person_org.rb +24 -0
  352. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  353. data/test/wsdl/multiplefault.wsdl +75 -0
  354. data/test/wsdl/oneway/oneway.wsdl +36 -0
  355. data/test/wsdl/oneway/test_oneway.rb +109 -0
  356. data/test/wsdl/overload/expectedClient.rb +38 -0
  357. data/test/wsdl/overload/expectedDriver.rb +62 -0
  358. data/test/wsdl/overload/expectedServant.rb +36 -0
  359. data/test/wsdl/overload/overload.wsdl +70 -0
  360. data/test/wsdl/overload/test_overload.rb +132 -0
  361. data/test/wsdl/qualified/lp.wsdl +47 -0
  362. data/test/wsdl/qualified/lp.xsd +26 -0
  363. data/test/wsdl/qualified/np.wsdl +51 -0
  364. data/test/wsdl/qualified/test_qualified.rb +138 -0
  365. data/test/wsdl/qualified/test_unqualified.rb +139 -0
  366. data/test/wsdl/raa/RAAService.rb +126 -0
  367. data/test/wsdl/raa/README.txt +8 -0
  368. data/test/wsdl/raa/expectedClassDef.rb +101 -0
  369. data/test/wsdl/raa/expectedDriver.rb +97 -0
  370. data/test/wsdl/raa/expectedMappingRegistry.rb +122 -0
  371. data/test/wsdl/raa/raa.wsdl +264 -0
  372. data/test/wsdl/raa/test_raa.rb +127 -0
  373. data/test/wsdl/ref/expectedDriver.rb +52 -0
  374. data/test/wsdl/ref/expectedProduct.rb +244 -0
  375. data/test/wsdl/ref/product.wsdl +147 -0
  376. data/test/wsdl/ref/test_ref.rb +269 -0
  377. data/test/wsdl/rpc/rpc.wsdl +109 -0
  378. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  379. data/test/wsdl/rpc/test_rpc.rb +177 -0
  380. data/test/wsdl/rpc/test_rpc_lit.rb +471 -0
  381. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  382. data/test/wsdl/simplecontent/test_simplecontent.rb +103 -0
  383. data/test/wsdl/simpletype/rpc/expectedClient.rb +35 -0
  384. data/test/wsdl/simpletype/rpc/expectedDriver.rb +59 -0
  385. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +37 -0
  386. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +58 -0
  387. data/test/wsdl/simpletype/rpc/expectedServant.rb +33 -0
  388. data/test/wsdl/simpletype/rpc/expectedService.rb +56 -0
  389. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  390. data/test/wsdl/simpletype/rpc/test_rpc.rb +53 -0
  391. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  392. data/test/wsdl/simpletype/test_simpletype.rb +93 -0
  393. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  394. data/test/wsdl/soap/test_soapbodyparts.rb +80 -0
  395. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +22 -0
  396. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +35 -0
  397. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +59 -0
  398. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +37 -0
  399. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +33 -0
  400. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +49 -0
  401. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +56 -0
  402. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  403. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +38 -0
  404. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  405. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
  406. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  407. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +84 -0
  408. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +103 -0
  409. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  410. data/test/wsdl/soaptype/test_soaptype.rb +179 -0
  411. data/test/wsdl/test_emptycomplextype.rb +22 -0
  412. data/test/wsdl/test_fault.rb +51 -0
  413. data/test/wsdl/test_multiplefault.rb +42 -0
  414. data/test/xsd/codegen/test_classdef.rb +245 -0
  415. data/test/xsd/noencoding.xml +4 -0
  416. data/test/xsd/test_noencoding.rb +33 -0
  417. data/test/xsd/test_ns.rb +42 -0
  418. data/test/xsd/test_xmlschemaparser.rb +23 -0
  419. data/test/xsd/test_xsd.rb +1639 -0
  420. data/test/xsd/xmllang.xml +43 -0
  421. data/test/xsd/xmlschema.xml +12 -0
  422. data/test/xsd/xsd2ruby/expected_mysample.rb +66 -0
  423. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +12 -0
  424. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +52 -0
  425. data/test/xsd/xsd2ruby/section.xsd +49 -0
  426. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +91 -0
  427. metadata +490 -0
@@ -0,0 +1,663 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - RPC Routing library
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/soap'
11
+ require 'soap/processor'
12
+ require 'soap/mapping'
13
+ require 'soap/mapping/literalregistry'
14
+ require 'soap/rpc/rpc'
15
+ require 'soap/rpc/element'
16
+ require 'soap/header/handlerset'
17
+ require 'soap/filter'
18
+ require 'soap/streamHandler'
19
+ require 'soap/mimemessage'
20
+ require 'soap/header/handlerset'
21
+
22
+
23
+ module SOAP
24
+ module RPC
25
+
26
+
27
+ class Router
28
+ include SOAP
29
+
30
+ attr_reader :actor
31
+ attr_accessor :mapping_registry
32
+ attr_accessor :literal_mapping_registry
33
+ attr_accessor :generate_explicit_type
34
+ attr_accessor :use_default_namespace
35
+ attr_accessor :external_ces
36
+ attr_reader :filterchain
37
+
38
+ def initialize(actor)
39
+ @actor = actor
40
+ @mapping_registry = nil
41
+ @headerhandler = Header::HandlerSet.new
42
+ @literal_mapping_registry = ::SOAP::Mapping::LiteralRegistry.new
43
+ @generate_explicit_type = true
44
+ @use_default_namespace = false
45
+ @external_ces = nil
46
+ @operation_by_soapaction = {}
47
+ @operation_by_qname = {}
48
+ @headerhandlerfactory = []
49
+ @filterchain = Filter::FilterChain.new
50
+ end
51
+
52
+ ###
53
+ ## header handler interface
54
+ #
55
+ def add_request_headerhandler(factory)
56
+ unless factory.respond_to?(:create)
57
+ raise TypeError.new("factory must respond to 'create'")
58
+ end
59
+ @headerhandlerfactory << factory
60
+ end
61
+
62
+ def add_headerhandler(handler)
63
+ @headerhandler.add(handler)
64
+ end
65
+
66
+ ###
67
+ ## servant definition interface
68
+ #
69
+ def add_rpc_request_servant(factory, namespace)
70
+ unless factory.respond_to?(:create)
71
+ raise TypeError.new("factory must respond to 'create'")
72
+ end
73
+ obj = factory.create # a dummy instance for introspection
74
+ ::SOAP::RPC.defined_methods(obj).each do |name|
75
+ begin
76
+ qname = XSD::QName.new(namespace, name)
77
+ param_def = ::SOAP::RPC::SOAPMethod.derive_rpc_param_def(obj, name)
78
+ opt = create_styleuse_option(:rpc, :encoded)
79
+ add_rpc_request_operation(factory, qname, nil, name, param_def, opt)
80
+ rescue SOAP::RPC::MethodDefinitionError => e
81
+ p e if $DEBUG
82
+ end
83
+ end
84
+ end
85
+
86
+ def add_rpc_servant(obj, namespace)
87
+ ::SOAP::RPC.defined_methods(obj).each do |name|
88
+ begin
89
+ qname = XSD::QName.new(namespace, name)
90
+ param_def = ::SOAP::RPC::SOAPMethod.derive_rpc_param_def(obj, name)
91
+ opt = create_styleuse_option(:rpc, :encoded)
92
+ add_rpc_operation(obj, qname, nil, name, param_def, opt)
93
+ rescue SOAP::RPC::MethodDefinitionError => e
94
+ p e if $DEBUG
95
+ end
96
+ end
97
+ end
98
+ alias add_servant add_rpc_servant
99
+
100
+ ###
101
+ ## operation definition interface
102
+ #
103
+ def add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {})
104
+ ensure_styleuse_option(opt, :rpc, :encoded)
105
+ opt[:request_qname] = qname
106
+ op = ApplicationScopeOperation.new(soapaction, receiver, name, param_def,
107
+ opt)
108
+ if opt[:request_style] != :rpc
109
+ raise RPCRoutingError.new("illegal request_style given")
110
+ end
111
+ assign_operation(soapaction, qname, op)
112
+ end
113
+ alias add_method add_rpc_operation
114
+ alias add_rpc_method add_rpc_operation
115
+
116
+ def add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt = {})
117
+ ensure_styleuse_option(opt, :rpc, :encoded)
118
+ opt[:request_qname] = qname
119
+ op = RequestScopeOperation.new(soapaction, factory, name, param_def, opt)
120
+ if opt[:request_style] != :rpc
121
+ raise RPCRoutingError.new("illegal request_style given")
122
+ end
123
+ assign_operation(soapaction, qname, op)
124
+ end
125
+
126
+ def add_document_operation(receiver, soapaction, name, param_def, opt = {})
127
+ #
128
+ # adopt workaround for doc/lit wrapper method
129
+ # (you should consider to simply use rpc/lit service)
130
+ #
131
+ #unless soapaction
132
+ # raise RPCRoutingError.new("soapaction is a must for document method")
133
+ #end
134
+ ensure_styleuse_option(opt, :document, :literal)
135
+ op = ApplicationScopeOperation.new(soapaction, receiver, name, param_def,
136
+ opt)
137
+ if opt[:request_style] != :document
138
+ raise RPCRoutingError.new("illegal request_style given")
139
+ end
140
+ assign_operation(soapaction, first_input_part_qname(param_def), op)
141
+ end
142
+ alias add_document_method add_document_operation
143
+
144
+ def add_document_request_operation(factory, soapaction, name, param_def, opt = {})
145
+ #
146
+ # adopt workaround for doc/lit wrapper method
147
+ # (you should consider to simply use rpc/lit service)
148
+ #
149
+ #unless soapaction
150
+ # raise RPCRoutingError.new("soapaction is a must for document method")
151
+ #end
152
+ ensure_styleuse_option(opt, :document, :literal)
153
+ op = RequestScopeOperation.new(soapaction, receiver, name, param_def, opt)
154
+ if opt[:request_style] != :document
155
+ raise RPCRoutingError.new("illegal request_style given")
156
+ end
157
+ assign_operation(soapaction, first_input_part_qname(param_def), op)
158
+ end
159
+
160
+ def route(conn_data)
161
+ # we cannot set request_default_encodingsyle before parsing the content.
162
+ env = unmarshal(conn_data)
163
+ if env.nil?
164
+ raise ArgumentError.new("illegal SOAP marshal format")
165
+ end
166
+ op = lookup_operation(conn_data.soapaction, env.body)
167
+ headerhandler = @headerhandler.dup
168
+ @headerhandlerfactory.each do |f|
169
+ headerhandler.add(f.create)
170
+ end
171
+ soap_response = default_encodingstyle = nil
172
+ begin
173
+ receive_headers(headerhandler, env.header)
174
+ soap_response =
175
+ op.call(env.body, @mapping_registry, @literal_mapping_registry,
176
+ create_mapping_opt)
177
+ conn_data.is_fault = true if soap_response.is_a?(SOAPFault)
178
+ default_encodingstyle = op.response_default_encodingstyle
179
+ rescue Exception => e
180
+ # If a wsdl fault was raised by service, the fault declaration details
181
+ # is kept in wsdl_fault. Otherwise (exception is a program fault)
182
+ # wsdl_fault is nil
183
+ wsdl_fault_details = op.faults && op.faults[e.class.name]
184
+ soap_response = fault(e, wsdl_fault_details)
185
+ conn_data.is_fault = true
186
+ default_encodingstyle = nil
187
+ end
188
+ header = call_headers(headerhandler)
189
+ if op.response_use.nil?
190
+ conn_data.send_string = ''
191
+ conn_data.is_nocontent = true
192
+ conn_data
193
+ else
194
+ body = SOAPBody.new(soap_response, conn_data.is_fault)
195
+ env = SOAPEnvelope.new(header, body)
196
+ marshal(conn_data, env, default_encodingstyle)
197
+ end
198
+ end
199
+
200
+ # Create fault response string.
201
+ def create_fault_response(e)
202
+ env = SOAPEnvelope.new(SOAPHeader.new, SOAPBody.new(fault(e, nil), true))
203
+ opt = {}
204
+ opt[:external_content] = nil
205
+ @filterchain.reverse_each do |filter|
206
+ env = filter.on_outbound(env, opt)
207
+ break unless env
208
+ end
209
+ response_string = Processor.marshal(env, opt)
210
+ conn_data = StreamHandler::ConnectionData.new(response_string)
211
+ conn_data.is_fault = true
212
+ if ext = opt[:external_content]
213
+ mimeize(conn_data, ext)
214
+ end
215
+ conn_data
216
+ end
217
+
218
+ private
219
+
220
+ def first_input_part_qname(param_def)
221
+ param_def.each do |param|
222
+ param = MethodDef.to_param(param)
223
+ if param.io_type == SOAPMethod::IN
224
+ return param.qname
225
+ end
226
+ end
227
+ nil
228
+ end
229
+
230
+ def create_styleuse_option(style, use)
231
+ opt = {}
232
+ opt[:request_style] = opt[:response_style] = style
233
+ opt[:request_use] = opt[:response_use] = use
234
+ opt
235
+ end
236
+
237
+ def ensure_styleuse_option(opt, style, use)
238
+ if opt[:request_style] || opt[:response_style] || opt[:request_use] || opt[:response_use]
239
+ # do not edit
240
+ else
241
+ opt[:request_style] ||= style
242
+ opt[:response_style] ||= style
243
+ opt[:request_use] ||= use
244
+ opt[:response_use] ||= use
245
+ end
246
+ end
247
+
248
+ def assign_operation(soapaction, qname, op)
249
+ assigned = false
250
+ if soapaction and !soapaction.empty?
251
+ @operation_by_soapaction[soapaction] = op
252
+ assigned = true
253
+ end
254
+ if qname
255
+ @operation_by_qname[qname] = op
256
+ assigned = true
257
+ end
258
+ unless assigned
259
+ raise RPCRoutingError.new("cannot assign operation")
260
+ end
261
+ end
262
+
263
+ def lookup_operation(soapaction, body)
264
+ if op = @operation_by_soapaction[soapaction]
265
+ return op
266
+ end
267
+ qname = body.root_node.elename
268
+ if op = @operation_by_qname[qname]
269
+ return op
270
+ end
271
+ if soapaction
272
+ raise RPCRoutingError.new(
273
+ "operation: #{soapaction} #{qname} not supported")
274
+ else
275
+ raise RPCRoutingError.new("operation: #{qname} not supported")
276
+ end
277
+ end
278
+
279
+ def call_headers(headerhandler)
280
+ header = ::SOAP::SOAPHeader.new
281
+ items = headerhandler.on_outbound(header)
282
+ items.each do |item|
283
+ header.add(item.elename.name, item)
284
+ end
285
+ header
286
+ end
287
+
288
+ def receive_headers(headerhandler, header)
289
+ headerhandler.on_inbound(header) if header
290
+ end
291
+
292
+ def unmarshal(conn_data)
293
+ xml = nil
294
+ opt = {}
295
+ contenttype = conn_data.receive_contenttype
296
+ if /#{MIMEMessage::MultipartContentType}/i =~ contenttype
297
+ opt[:external_content] = {}
298
+ mime = MIMEMessage.parse("Content-Type: " + contenttype,
299
+ conn_data.receive_string)
300
+ mime.parts.each do |part|
301
+ value = Attachment.new(part.content)
302
+ value.contentid = part.contentid
303
+ obj = SOAPAttachment.new(value)
304
+ opt[:external_content][value.contentid] = obj if value.contentid
305
+ end
306
+ opt[:charset] =
307
+ StreamHandler.parse_media_type(mime.root.headers['content-type'].str)
308
+ xml = mime.root.content
309
+ else
310
+ opt[:charset] = ::SOAP::StreamHandler.parse_media_type(contenttype)
311
+ xml = conn_data.receive_string
312
+ end
313
+ @filterchain.each do |filter|
314
+ xml = filter.on_inbound(xml, opt)
315
+ break unless xml
316
+ end
317
+ env = Processor.unmarshal(xml, opt)
318
+ charset = opt[:charset]
319
+ conn_data.send_contenttype = "text/xml; charset=\"#{charset}\""
320
+ env
321
+ end
322
+
323
+ def marshal(conn_data, env, default_encodingstyle = nil)
324
+ opt = {}
325
+ opt[:external_content] = nil
326
+ opt[:default_encodingstyle] = default_encodingstyle
327
+ opt[:generate_explicit_type] = @generate_explicit_type
328
+ opt[:use_default_namespace] = @use_default_namespace
329
+ @filterchain.reverse_each do |filter|
330
+ env = filter.on_outbound(env, opt)
331
+ break unless env
332
+ end
333
+ response_string = Processor.marshal(env, opt)
334
+ conn_data.send_string = response_string
335
+ if ext = opt[:external_content]
336
+ mimeize(conn_data, ext)
337
+ end
338
+ conn_data
339
+ end
340
+
341
+ def mimeize(conn_data, ext)
342
+ mime = MIMEMessage.new
343
+ ext.each do |k, v|
344
+ mime.add_attachment(v.data)
345
+ end
346
+ mime.add_part(conn_data.send_string + "\r\n")
347
+ mime.close
348
+ conn_data.send_string = mime.content_str
349
+ conn_data.send_contenttype = mime.headers['content-type'].str
350
+ conn_data
351
+ end
352
+
353
+ # Create fault response.
354
+ def fault(e, wsdl_fault_details)
355
+ if e.is_a?(UnhandledMustUnderstandHeaderError)
356
+ faultcode = FaultCode::MustUnderstand
357
+ else
358
+ faultcode = FaultCode::Server
359
+ end
360
+
361
+ # If the exception represents a WSDL fault, the fault element should
362
+ # be added as the SOAP fault <detail> element. If the exception is a
363
+ # normal program exception, it is wrapped inside a custom SOAP4R
364
+ # SOAP exception element.
365
+ detail = nil
366
+ begin
367
+ if (wsdl_fault_details)
368
+ registry = wsdl_fault_details[:use] == "literal" ?
369
+ @literal_mapping_registry : @mapping_registry
370
+ faultQName = XSD::QName.new(
371
+ wsdl_fault_details[:ns], wsdl_fault_details[:name]
372
+ )
373
+ detail = Mapping.obj2soap(e, registry, faultQName)
374
+ # wrap fault element (SOAPFault swallows top-level element)
375
+ wrapper = SOAP::SOAPElement.new(faultQName)
376
+ wrapper.add(detail)
377
+ detail = wrapper
378
+ else
379
+ # Exception is a normal program exception. Wrap it.
380
+ detail = Mapping.obj2soap(Mapping::SOAPException.new(e),
381
+ @mapping_registry)
382
+ detail.elename ||= XSD::QName::EMPTY # for literal mappingregstry
383
+ end
384
+ rescue
385
+ detail = SOAPString.new("failed to serialize detail object: #{$!}")
386
+ end
387
+
388
+ SOAPFault.new(
389
+ SOAPElement.new(nil, faultcode),
390
+ SOAPString.new(e.to_s),
391
+ SOAPString.new(@actor),
392
+ detail)
393
+ end
394
+
395
+ def create_mapping_opt
396
+ { :external_ces => @external_ces }
397
+ end
398
+
399
+ class Operation
400
+ attr_reader :name
401
+ attr_reader :soapaction
402
+ attr_reader :request_style
403
+ attr_reader :response_style
404
+ attr_reader :request_use
405
+ attr_reader :response_use
406
+ attr_reader :faults
407
+
408
+ def initialize(soapaction, name, param_def, opt)
409
+ @soapaction = soapaction
410
+ @name = name
411
+ @request_style = opt[:request_style]
412
+ @response_style = opt[:response_style]
413
+ @request_use = opt[:request_use]
414
+ @response_use = opt[:response_use]
415
+ @faults = opt[:faults]
416
+ check_style(@request_style)
417
+ check_style(@response_style)
418
+ check_use(@request_use)
419
+ check_use(@response_use)
420
+ if @response_style == :rpc
421
+ request_qname = opt[:request_qname] or raise
422
+ @rpc_method_factory =
423
+ RPC::SOAPMethodRequest.new(request_qname, param_def, @soapaction)
424
+ @rpc_response_qname = opt[:response_qname]
425
+ else
426
+ @doc_request_qnames = []
427
+ @doc_response_qnames = []
428
+ param_def.each do |param|
429
+ param = MethodDef.to_param(param)
430
+ case param.io_type
431
+ when SOAPMethod::IN
432
+ @doc_request_qnames << param.qname
433
+ when SOAPMethod::OUT
434
+ @doc_response_qnames << param.qname
435
+ else
436
+ raise ArgumentError.new(
437
+ "illegal inout definition for document style: #{param.io_type}")
438
+ end
439
+ end
440
+ end
441
+ end
442
+
443
+ def request_default_encodingstyle
444
+ (@request_use == :encoded) ? EncodingNamespace : LiteralNamespace
445
+ end
446
+
447
+ def response_default_encodingstyle
448
+ (@response_use == :encoded) ? EncodingNamespace : LiteralNamespace
449
+ end
450
+
451
+ def call(body, mapping_registry, literal_mapping_registry, opt)
452
+ if @request_style == :rpc
453
+ values = request_rpc(body, mapping_registry, literal_mapping_registry,
454
+ opt)
455
+ else
456
+ values = request_document(body, mapping_registry,
457
+ literal_mapping_registry, opt)
458
+ end
459
+ result = receiver.method(@name.intern).call(*values)
460
+ return result if result.is_a?(SOAPFault)
461
+ if @response_style == :rpc
462
+ response_rpc(result, mapping_registry, literal_mapping_registry, opt)
463
+ elsif @doc_response_qnames.empty?
464
+ # nothing to do
465
+ else
466
+ response_doc(result, mapping_registry, literal_mapping_registry, opt)
467
+ end
468
+ end
469
+
470
+ private
471
+
472
+ def receiver
473
+ raise NotImplementedError.new('must be defined in derived class')
474
+ end
475
+
476
+ def request_rpc(body, mapping_registry, literal_mapping_registry, opt)
477
+ request = body.request
478
+ unless request.is_a?(SOAPNameAccessible)
479
+ if request.is_a?(SOAPNil)
480
+ # SOAP::Lite/0.69 seems to send xsi:nil="true" element as a request.
481
+ request = SOAPStruct.new(request.elename)
482
+ else
483
+ raise RPCRoutingError.new("not an RPC style")
484
+ end
485
+ end
486
+ if @request_use == :encoded
487
+ request_rpc_enc(request, mapping_registry, opt)
488
+ else
489
+ request_rpc_lit(request, literal_mapping_registry, opt)
490
+ end
491
+ end
492
+
493
+ def request_document(body, mapping_registry, literal_mapping_registry, opt)
494
+ # ToDo: compare names with @doc_request_qnames
495
+ if @request_use == :encoded
496
+ request_doc_enc(body, mapping_registry, opt)
497
+ else
498
+ request_doc_lit(body, literal_mapping_registry, opt)
499
+ end
500
+ end
501
+
502
+ def request_rpc_enc(request, mapping_registry, opt)
503
+ param = Mapping.soap2obj(request, mapping_registry, nil, opt)
504
+ request.collect { |key, value|
505
+ param[key]
506
+ }
507
+ end
508
+
509
+ def request_rpc_lit(request, mapping_registry, opt)
510
+ request.collect { |key, value|
511
+ Mapping.soap2obj(value, mapping_registry, nil, opt)
512
+ }
513
+ end
514
+
515
+ def request_doc_enc(body, mapping_registry, opt)
516
+ body.collect { |key, value|
517
+ Mapping.soap2obj(value, mapping_registry, nil, opt)
518
+ }
519
+ end
520
+
521
+ def request_doc_lit(body, mapping_registry, opt)
522
+ body.collect { |key, value|
523
+ Mapping.soap2obj(value, mapping_registry, nil, opt)
524
+ }
525
+ end
526
+
527
+ def response_rpc(result, mapping_registry, literal_mapping_registry, opt)
528
+ if @response_use == :encoded
529
+ response_rpc_enc(result, mapping_registry, opt)
530
+ else
531
+ response_rpc_lit(result, literal_mapping_registry, opt)
532
+ end
533
+ end
534
+
535
+ def response_doc(result, mapping_registry, literal_mapping_registry, opt)
536
+ if @doc_response_qnames.size == 0
537
+ result = []
538
+ elsif @doc_response_qnames.size == 1
539
+ result = [result]
540
+ end
541
+ if result.size != @doc_response_qnames.size
542
+ raise "required #{@doc_response_qnames.size} responses " +
543
+ "but #{result.size} given"
544
+ end
545
+ if @response_use == :encoded
546
+ response_doc_enc(result, mapping_registry, opt)
547
+ else
548
+ response_doc_lit(result, literal_mapping_registry, opt)
549
+ end
550
+ end
551
+
552
+ def response_rpc_enc(result, mapping_registry, opt)
553
+ soap_response =
554
+ @rpc_method_factory.create_method_response(@rpc_response_qname)
555
+ if soap_response.have_outparam?
556
+ unless result.is_a?(Array)
557
+ raise RPCRoutingError.new("out parameter was not returned")
558
+ end
559
+ outparams = {}
560
+ i = 1
561
+ soap_response.output_params.each do |outparam|
562
+ outparams[outparam] = Mapping.obj2soap(result[i], mapping_registry,
563
+ nil, opt)
564
+ i += 1
565
+ end
566
+ soap_response.set_outparam(outparams)
567
+ soap_response.retval = Mapping.obj2soap(result[0], mapping_registry,
568
+ nil, opt)
569
+ else
570
+ soap_response.retval = Mapping.obj2soap(result, mapping_registry, nil,
571
+ opt)
572
+ end
573
+ soap_response
574
+ end
575
+
576
+ def response_rpc_lit(result, mapping_registry, opt)
577
+ soap_response =
578
+ @rpc_method_factory.create_method_response(@rpc_response_qname)
579
+ if soap_response.have_outparam?
580
+ unless result.is_a?(Array)
581
+ raise RPCRoutingError.new("out parameter was not returned")
582
+ end
583
+ outparams = {}
584
+ i = 1
585
+ soap_response.output_params.each do |outparam|
586
+ outparams[outparam] = Mapping.obj2soap(result[i], mapping_registry,
587
+ XSD::QName.new(nil, outparam), opt)
588
+ i += 1
589
+ end
590
+ soap_response.set_outparam(outparams)
591
+ soap_response.retval = Mapping.obj2soap(result[0], mapping_registry,
592
+ soap_response.elename, opt)
593
+ else
594
+ soap_response.retval = Mapping.obj2soap(result, mapping_registry,
595
+ soap_response.elename, opt)
596
+ end
597
+ soap_response
598
+ end
599
+
600
+ def response_doc_enc(result, mapping_registry, opt)
601
+ (0...result.size).collect { |idx|
602
+ ele = Mapping.obj2soap(result[idx], mapping_registry, nil, opt)
603
+ ele.elename = @doc_response_qnames[idx]
604
+ ele
605
+ }
606
+ end
607
+
608
+ def response_doc_lit(result, mapping_registry, opt)
609
+ (0...result.size).collect { |idx|
610
+ ele = Mapping.obj2soap(result[idx], mapping_registry,
611
+ @doc_response_qnames[idx])
612
+ ele.encodingstyle = LiteralNamespace
613
+ ele
614
+ }
615
+ end
616
+
617
+ def check_style(style)
618
+ unless [:rpc, :document].include?(style)
619
+ raise ArgumentError.new("unknown style: #{style}")
620
+ end
621
+ end
622
+
623
+ # nil means oneway
624
+ def check_use(use)
625
+ unless [:encoded, :literal, nil].include?(use)
626
+ raise ArgumentError.new("unknown use: #{use}")
627
+ end
628
+ end
629
+ end
630
+
631
+ class ApplicationScopeOperation < Operation
632
+ def initialize(soapaction, receiver, name, param_def, opt)
633
+ super(soapaction, name, param_def, opt)
634
+ @receiver = receiver
635
+ end
636
+
637
+ private
638
+
639
+ def receiver
640
+ @receiver
641
+ end
642
+ end
643
+
644
+ class RequestScopeOperation < Operation
645
+ def initialize(soapaction, receiver_factory, name, param_def, opt)
646
+ super(soapaction, name, param_def, opt)
647
+ unless receiver_factory.respond_to?(:create)
648
+ raise TypeError.new("factory must respond to 'create'")
649
+ end
650
+ @receiver_factory = receiver_factory
651
+ end
652
+
653
+ private
654
+
655
+ def receiver
656
+ @receiver_factory.create
657
+ end
658
+ end
659
+ end
660
+
661
+
662
+ end
663
+ end