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,662 @@
1
+ # SOAP4R - RPC Routing library
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/soap'
10
+ require 'soap/processor'
11
+ require 'soap/mapping'
12
+ require 'soap/mapping/literalregistry'
13
+ require 'soap/rpc/rpc'
14
+ require 'soap/rpc/element'
15
+ require 'soap/header/handlerset'
16
+ require 'soap/filter'
17
+ require 'soap/streamHandler'
18
+ require 'soap/mimemessage'
19
+ require 'soap/header/handlerset'
20
+
21
+
22
+ module SOAP
23
+ module RPC
24
+
25
+
26
+ class Router
27
+ include SOAP
28
+
29
+ attr_reader :actor
30
+ attr_accessor :mapping_registry
31
+ attr_accessor :literal_mapping_registry
32
+ attr_accessor :generate_explicit_type
33
+ attr_accessor :use_default_namespace
34
+ attr_accessor :external_ces
35
+ attr_reader :filterchain
36
+
37
+ def initialize(actor)
38
+ @actor = actor
39
+ @mapping_registry = nil
40
+ @headerhandler = Header::HandlerSet.new
41
+ @literal_mapping_registry = ::SOAP::Mapping::LiteralRegistry.new
42
+ @generate_explicit_type = true
43
+ @use_default_namespace = false
44
+ @external_ces = nil
45
+ @operation_by_soapaction = {}
46
+ @operation_by_qname = {}
47
+ @headerhandlerfactory = []
48
+ @filterchain = Filter::FilterChain.new
49
+ end
50
+
51
+ ###
52
+ ## header handler interface
53
+ #
54
+ def add_request_headerhandler(factory)
55
+ unless factory.respond_to?(:create)
56
+ raise TypeError.new("factory must respond to 'create'")
57
+ end
58
+ @headerhandlerfactory << factory
59
+ end
60
+
61
+ def add_headerhandler(handler)
62
+ @headerhandler.add(handler)
63
+ end
64
+
65
+ ###
66
+ ## servant definition interface
67
+ #
68
+ def add_rpc_request_servant(factory, namespace)
69
+ unless factory.respond_to?(:create)
70
+ raise TypeError.new("factory must respond to 'create'")
71
+ end
72
+ obj = factory.create # a dummy instance for introspection
73
+ ::SOAP::RPC.defined_methods(obj).each do |name|
74
+ begin
75
+ qname = XSD::QName.new(namespace, name)
76
+ param_def = ::SOAP::RPC::SOAPMethod.derive_rpc_param_def(obj, name)
77
+ opt = create_styleuse_option(:rpc, :encoded)
78
+ add_rpc_request_operation(factory, qname, nil, name, param_def, opt)
79
+ rescue SOAP::RPC::MethodDefinitionError => e
80
+ p e if $DEBUG
81
+ end
82
+ end
83
+ end
84
+
85
+ def add_rpc_servant(obj, namespace)
86
+ ::SOAP::RPC.defined_methods(obj).each do |name|
87
+ begin
88
+ qname = XSD::QName.new(namespace, name)
89
+ param_def = ::SOAP::RPC::SOAPMethod.derive_rpc_param_def(obj, name)
90
+ opt = create_styleuse_option(:rpc, :encoded)
91
+ add_rpc_operation(obj, qname, nil, name, param_def, opt)
92
+ rescue SOAP::RPC::MethodDefinitionError => e
93
+ p e if $DEBUG
94
+ end
95
+ end
96
+ end
97
+ alias add_servant add_rpc_servant
98
+
99
+ ###
100
+ ## operation definition interface
101
+ #
102
+ def add_rpc_operation(receiver, qname, soapaction, name, param_def, opt = {})
103
+ ensure_styleuse_option(opt, :rpc, :encoded)
104
+ opt[:request_qname] = qname
105
+ op = ApplicationScopeOperation.new(soapaction, receiver, name, param_def,
106
+ opt)
107
+ if opt[:request_style] != :rpc
108
+ raise RPCRoutingError.new("illegal request_style given")
109
+ end
110
+ assign_operation(soapaction, qname, op)
111
+ end
112
+ alias add_method add_rpc_operation
113
+ alias add_rpc_method add_rpc_operation
114
+
115
+ def add_rpc_request_operation(factory, qname, soapaction, name, param_def, opt = {})
116
+ ensure_styleuse_option(opt, :rpc, :encoded)
117
+ opt[:request_qname] = qname
118
+ op = RequestScopeOperation.new(soapaction, factory, name, param_def, opt)
119
+ if opt[:request_style] != :rpc
120
+ raise RPCRoutingError.new("illegal request_style given")
121
+ end
122
+ assign_operation(soapaction, qname, op)
123
+ end
124
+
125
+ def add_document_operation(receiver, soapaction, name, param_def, opt = {})
126
+ #
127
+ # adopt workaround for doc/lit wrapper method
128
+ # (you should consider to simply use rpc/lit service)
129
+ #
130
+ #unless soapaction
131
+ # raise RPCRoutingError.new("soapaction is a must for document method")
132
+ #end
133
+ ensure_styleuse_option(opt, :document, :literal)
134
+ op = ApplicationScopeOperation.new(soapaction, receiver, name, param_def,
135
+ opt)
136
+ if opt[:request_style] != :document
137
+ raise RPCRoutingError.new("illegal request_style given")
138
+ end
139
+ assign_operation(soapaction, first_input_part_qname(param_def), op)
140
+ end
141
+ alias add_document_method add_document_operation
142
+
143
+ def add_document_request_operation(factory, soapaction, name, param_def, opt = {})
144
+ #
145
+ # adopt workaround for doc/lit wrapper method
146
+ # (you should consider to simply use rpc/lit service)
147
+ #
148
+ #unless soapaction
149
+ # raise RPCRoutingError.new("soapaction is a must for document method")
150
+ #end
151
+ ensure_styleuse_option(opt, :document, :literal)
152
+ op = RequestScopeOperation.new(soapaction, receiver, name, param_def, opt)
153
+ if opt[:request_style] != :document
154
+ raise RPCRoutingError.new("illegal request_style given")
155
+ end
156
+ assign_operation(soapaction, first_input_part_qname(param_def), op)
157
+ end
158
+
159
+ def route(conn_data)
160
+ # we cannot set request_default_encodingsyle before parsing the content.
161
+ env = unmarshal(conn_data)
162
+ if env.nil?
163
+ raise ArgumentError.new("illegal SOAP marshal format")
164
+ end
165
+ op = lookup_operation(conn_data.soapaction, env.body)
166
+ headerhandler = @headerhandler.dup
167
+ @headerhandlerfactory.each do |f|
168
+ headerhandler.add(f.create)
169
+ end
170
+ soap_response = default_encodingstyle = nil
171
+ begin
172
+ receive_headers(headerhandler, env.header)
173
+ soap_response =
174
+ op.call(env.body, @mapping_registry, @literal_mapping_registry,
175
+ create_mapping_opt)
176
+ conn_data.is_fault = true if soap_response.is_a?(SOAPFault)
177
+ default_encodingstyle = op.response_default_encodingstyle
178
+ rescue Exception => e
179
+ # If a wsdl fault was raised by service, the fault declaration details
180
+ # is kept in wsdl_fault. Otherwise (exception is a program fault)
181
+ # wsdl_fault is nil
182
+ wsdl_fault_details = op.faults && op.faults[e.class.name]
183
+ soap_response = fault(e, wsdl_fault_details)
184
+ conn_data.is_fault = true
185
+ default_encodingstyle = nil
186
+ end
187
+ header = call_headers(headerhandler)
188
+ if op.response_use.nil?
189
+ conn_data.send_string = ''
190
+ conn_data.is_nocontent = true
191
+ conn_data
192
+ else
193
+ body = SOAPBody.new(soap_response, conn_data.is_fault)
194
+ env = SOAPEnvelope.new(header, body)
195
+ marshal(conn_data, env, default_encodingstyle)
196
+ end
197
+ end
198
+
199
+ # Create fault response string.
200
+ def create_fault_response(e)
201
+ env = SOAPEnvelope.new(SOAPHeader.new, SOAPBody.new(fault(e, nil), true))
202
+ opt = {}
203
+ opt[:external_content] = nil
204
+ @filterchain.reverse_each do |filter|
205
+ env = filter.on_outbound(env, opt)
206
+ break unless env
207
+ end
208
+ response_string = Processor.marshal(env, opt)
209
+ conn_data = StreamHandler::ConnectionData.new(response_string)
210
+ conn_data.is_fault = true
211
+ if ext = opt[:external_content]
212
+ mimeize(conn_data, ext)
213
+ end
214
+ conn_data
215
+ end
216
+
217
+ private
218
+
219
+ def first_input_part_qname(param_def)
220
+ param_def.each do |param|
221
+ param = MethodDef.to_param(param)
222
+ if param.io_type == SOAPMethod::IN
223
+ return param.qname
224
+ end
225
+ end
226
+ nil
227
+ end
228
+
229
+ def create_styleuse_option(style, use)
230
+ opt = {}
231
+ opt[:request_style] = opt[:response_style] = style
232
+ opt[:request_use] = opt[:response_use] = use
233
+ opt
234
+ end
235
+
236
+ def ensure_styleuse_option(opt, style, use)
237
+ if opt[:request_style] || opt[:response_style] || opt[:request_use] || opt[:response_use]
238
+ # do not edit
239
+ else
240
+ opt[:request_style] ||= style
241
+ opt[:response_style] ||= style
242
+ opt[:request_use] ||= use
243
+ opt[:response_use] ||= use
244
+ end
245
+ end
246
+
247
+ def assign_operation(soapaction, qname, op)
248
+ assigned = false
249
+ if soapaction and !soapaction.empty?
250
+ @operation_by_soapaction[soapaction] = op
251
+ assigned = true
252
+ end
253
+ if qname
254
+ @operation_by_qname[qname] = op
255
+ assigned = true
256
+ end
257
+ unless assigned
258
+ raise RPCRoutingError.new("cannot assign operation")
259
+ end
260
+ end
261
+
262
+ def lookup_operation(soapaction, body)
263
+ if op = @operation_by_soapaction[soapaction]
264
+ return op
265
+ end
266
+ qname = body.root_node.elename
267
+ if op = @operation_by_qname[qname]
268
+ return op
269
+ end
270
+ if soapaction
271
+ raise RPCRoutingError.new(
272
+ "operation: #{soapaction} #{qname} not supported")
273
+ else
274
+ raise RPCRoutingError.new("operation: #{qname} not supported")
275
+ end
276
+ end
277
+
278
+ def call_headers(headerhandler)
279
+ header = ::SOAP::SOAPHeader.new
280
+ items = headerhandler.on_outbound(header)
281
+ items.each do |item|
282
+ header.add(item.elename.name, item)
283
+ end
284
+ header
285
+ end
286
+
287
+ def receive_headers(headerhandler, header)
288
+ headerhandler.on_inbound(header) if header
289
+ end
290
+
291
+ def unmarshal(conn_data)
292
+ xml = nil
293
+ opt = {}
294
+ contenttype = conn_data.receive_contenttype
295
+ if /#{MIMEMessage::MultipartContentType}/i =~ contenttype
296
+ opt[:external_content] = {}
297
+ mime = MIMEMessage.parse("Content-Type: " + contenttype,
298
+ conn_data.receive_string)
299
+ mime.parts.each do |part|
300
+ value = Attachment.new(part.content)
301
+ value.contentid = part.contentid
302
+ obj = SOAPAttachment.new(value)
303
+ opt[:external_content][value.contentid] = obj if value.contentid
304
+ end
305
+ opt[:charset] =
306
+ StreamHandler.parse_media_type(mime.root.headers['content-type'].str)
307
+ xml = mime.root.content
308
+ else
309
+ opt[:charset] = ::SOAP::StreamHandler.parse_media_type(contenttype)
310
+ xml = conn_data.receive_string
311
+ end
312
+ @filterchain.each do |filter|
313
+ xml = filter.on_inbound(xml, opt)
314
+ break unless xml
315
+ end
316
+ env = Processor.unmarshal(xml, opt)
317
+ charset = opt[:charset]
318
+ conn_data.send_contenttype = "text/xml; charset=\"#{charset}\""
319
+ env
320
+ end
321
+
322
+ def marshal(conn_data, env, default_encodingstyle = nil)
323
+ opt = {}
324
+ opt[:external_content] = nil
325
+ opt[:default_encodingstyle] = default_encodingstyle
326
+ opt[:generate_explicit_type] = @generate_explicit_type
327
+ opt[:use_default_namespace] = @use_default_namespace
328
+ @filterchain.reverse_each do |filter|
329
+ env = filter.on_outbound(env, opt)
330
+ break unless env
331
+ end
332
+ response_string = Processor.marshal(env, opt)
333
+ conn_data.send_string = response_string
334
+ if ext = opt[:external_content]
335
+ mimeize(conn_data, ext)
336
+ end
337
+ conn_data
338
+ end
339
+
340
+ def mimeize(conn_data, ext)
341
+ mime = MIMEMessage.new
342
+ ext.each do |k, v|
343
+ mime.add_attachment(v.data)
344
+ end
345
+ mime.add_part(conn_data.send_string + "\r\n")
346
+ mime.close
347
+ conn_data.send_string = mime.content_str
348
+ conn_data.send_contenttype = mime.headers['content-type'].str
349
+ conn_data
350
+ end
351
+
352
+ # Create fault response.
353
+ def fault(e, wsdl_fault_details)
354
+ if e.is_a?(UnhandledMustUnderstandHeaderError)
355
+ faultcode = FaultCode::MustUnderstand
356
+ else
357
+ faultcode = FaultCode::Server
358
+ end
359
+
360
+ # If the exception represents a WSDL fault, the fault element should
361
+ # be added as the SOAP fault <detail> element. If the exception is a
362
+ # normal program exception, it is wrapped inside a custom SOAP4R
363
+ # SOAP exception element.
364
+ detail = nil
365
+ begin
366
+ if (wsdl_fault_details)
367
+ registry = wsdl_fault_details[:use] == "literal" ?
368
+ @literal_mapping_registry : @mapping_registry
369
+ faultQName = XSD::QName.new(
370
+ wsdl_fault_details[:ns], wsdl_fault_details[:name]
371
+ )
372
+ detail = Mapping.obj2soap(e, registry, faultQName)
373
+ # wrap fault element (SOAPFault swallows top-level element)
374
+ wrapper = SOAP::SOAPElement.new(faultQName)
375
+ wrapper.add(detail)
376
+ detail = wrapper
377
+ else
378
+ # Exception is a normal program exception. Wrap it.
379
+ detail = Mapping.obj2soap(Mapping::SOAPException.new(e),
380
+ @mapping_registry)
381
+ detail.elename ||= XSD::QName::EMPTY # for literal mappingregstry
382
+ end
383
+ rescue
384
+ detail = SOAPString.new("failed to serialize detail object: #{$!}")
385
+ end
386
+
387
+ SOAPFault.new(
388
+ SOAPElement.new(nil, faultcode),
389
+ SOAPString.new(e.to_s),
390
+ SOAPString.new(@actor),
391
+ detail)
392
+ end
393
+
394
+ def create_mapping_opt
395
+ { :external_ces => @external_ces }
396
+ end
397
+
398
+ class Operation
399
+ attr_reader :name
400
+ attr_reader :soapaction
401
+ attr_reader :request_style
402
+ attr_reader :response_style
403
+ attr_reader :request_use
404
+ attr_reader :response_use
405
+ attr_reader :faults
406
+
407
+ def initialize(soapaction, name, param_def, opt)
408
+ @soapaction = soapaction
409
+ @name = name
410
+ @request_style = opt[:request_style]
411
+ @response_style = opt[:response_style]
412
+ @request_use = opt[:request_use]
413
+ @response_use = opt[:response_use]
414
+ @faults = opt[:faults]
415
+ check_style(@request_style)
416
+ check_style(@response_style)
417
+ check_use(@request_use)
418
+ check_use(@response_use)
419
+ if @response_style == :rpc
420
+ request_qname = opt[:request_qname] or raise
421
+ @rpc_method_factory =
422
+ RPC::SOAPMethodRequest.new(request_qname, param_def, @soapaction)
423
+ @rpc_response_qname = opt[:response_qname]
424
+ else
425
+ @doc_request_qnames = []
426
+ @doc_response_qnames = []
427
+ param_def.each do |param|
428
+ param = MethodDef.to_param(param)
429
+ case param.io_type
430
+ when SOAPMethod::IN
431
+ @doc_request_qnames << param.qname
432
+ when SOAPMethod::OUT
433
+ @doc_response_qnames << param.qname
434
+ else
435
+ raise ArgumentError.new(
436
+ "illegal inout definition for document style: #{param.io_type}")
437
+ end
438
+ end
439
+ end
440
+ end
441
+
442
+ def request_default_encodingstyle
443
+ (@request_use == :encoded) ? EncodingNamespace : LiteralNamespace
444
+ end
445
+
446
+ def response_default_encodingstyle
447
+ (@response_use == :encoded) ? EncodingNamespace : LiteralNamespace
448
+ end
449
+
450
+ def call(body, mapping_registry, literal_mapping_registry, opt)
451
+ if @request_style == :rpc
452
+ values = request_rpc(body, mapping_registry, literal_mapping_registry,
453
+ opt)
454
+ else
455
+ values = request_document(body, mapping_registry,
456
+ literal_mapping_registry, opt)
457
+ end
458
+ result = receiver.method(@name.intern).call(*values)
459
+ return result if result.is_a?(SOAPFault)
460
+ if @response_style == :rpc
461
+ response_rpc(result, mapping_registry, literal_mapping_registry, opt)
462
+ elsif @doc_response_qnames.empty?
463
+ # nothing to do
464
+ else
465
+ response_doc(result, mapping_registry, literal_mapping_registry, opt)
466
+ end
467
+ end
468
+
469
+ private
470
+
471
+ def receiver
472
+ raise NotImplementedError.new('must be defined in derived class')
473
+ end
474
+
475
+ def request_rpc(body, mapping_registry, literal_mapping_registry, opt)
476
+ request = body.request
477
+ unless request.is_a?(SOAPNameAccessible)
478
+ if request.is_a?(SOAPNil)
479
+ # SOAP::Lite/0.69 seems to send xsi:nil="true" element as a request.
480
+ request = SOAPStruct.new(request.elename)
481
+ else
482
+ raise RPCRoutingError.new("not an RPC style")
483
+ end
484
+ end
485
+ if @request_use == :encoded
486
+ request_rpc_enc(request, mapping_registry, opt)
487
+ else
488
+ request_rpc_lit(request, literal_mapping_registry, opt)
489
+ end
490
+ end
491
+
492
+ def request_document(body, mapping_registry, literal_mapping_registry, opt)
493
+ # ToDo: compare names with @doc_request_qnames
494
+ if @request_use == :encoded
495
+ request_doc_enc(body, mapping_registry, opt)
496
+ else
497
+ request_doc_lit(body, literal_mapping_registry, opt)
498
+ end
499
+ end
500
+
501
+ def request_rpc_enc(request, mapping_registry, opt)
502
+ param = Mapping.soap2obj(request, mapping_registry, nil, opt)
503
+ request.collect { |key, value|
504
+ param[key]
505
+ }
506
+ end
507
+
508
+ def request_rpc_lit(request, mapping_registry, opt)
509
+ request.collect { |key, value|
510
+ Mapping.soap2obj(value, mapping_registry, nil, opt)
511
+ }
512
+ end
513
+
514
+ def request_doc_enc(body, mapping_registry, opt)
515
+ body.collect { |key, value|
516
+ Mapping.soap2obj(value, mapping_registry, nil, opt)
517
+ }
518
+ end
519
+
520
+ def request_doc_lit(body, mapping_registry, opt)
521
+ body.collect { |key, value|
522
+ Mapping.soap2obj(value, mapping_registry, nil, opt)
523
+ }
524
+ end
525
+
526
+ def response_rpc(result, mapping_registry, literal_mapping_registry, opt)
527
+ if @response_use == :encoded
528
+ response_rpc_enc(result, mapping_registry, opt)
529
+ else
530
+ response_rpc_lit(result, literal_mapping_registry, opt)
531
+ end
532
+ end
533
+
534
+ def response_doc(result, mapping_registry, literal_mapping_registry, opt)
535
+ if @doc_response_qnames.size == 0
536
+ result = []
537
+ elsif @doc_response_qnames.size == 1
538
+ result = [result]
539
+ end
540
+ if result.size != @doc_response_qnames.size
541
+ raise "required #{@doc_response_qnames.size} responses " +
542
+ "but #{result.size} given"
543
+ end
544
+ if @response_use == :encoded
545
+ response_doc_enc(result, mapping_registry, opt)
546
+ else
547
+ response_doc_lit(result, literal_mapping_registry, opt)
548
+ end
549
+ end
550
+
551
+ def response_rpc_enc(result, mapping_registry, opt)
552
+ soap_response =
553
+ @rpc_method_factory.create_method_response(@rpc_response_qname)
554
+ if soap_response.have_outparam?
555
+ unless result.is_a?(Array)
556
+ raise RPCRoutingError.new("out parameter was not returned")
557
+ end
558
+ outparams = {}
559
+ i = 1
560
+ soap_response.output_params.each do |outparam|
561
+ outparams[outparam] = Mapping.obj2soap(result[i], mapping_registry,
562
+ nil, opt)
563
+ i += 1
564
+ end
565
+ soap_response.set_outparam(outparams)
566
+ soap_response.retval = Mapping.obj2soap(result[0], mapping_registry,
567
+ nil, opt)
568
+ else
569
+ soap_response.retval = Mapping.obj2soap(result, mapping_registry, nil,
570
+ opt)
571
+ end
572
+ soap_response
573
+ end
574
+
575
+ def response_rpc_lit(result, mapping_registry, opt)
576
+ soap_response =
577
+ @rpc_method_factory.create_method_response(@rpc_response_qname)
578
+ if soap_response.have_outparam?
579
+ unless result.is_a?(Array)
580
+ raise RPCRoutingError.new("out parameter was not returned")
581
+ end
582
+ outparams = {}
583
+ i = 1
584
+ soap_response.output_params.each do |outparam|
585
+ outparams[outparam] = Mapping.obj2soap(result[i], mapping_registry,
586
+ XSD::QName.new(nil, outparam), opt)
587
+ i += 1
588
+ end
589
+ soap_response.set_outparam(outparams)
590
+ soap_response.retval = Mapping.obj2soap(result[0], mapping_registry,
591
+ soap_response.elename, opt)
592
+ else
593
+ soap_response.retval = Mapping.obj2soap(result, mapping_registry,
594
+ soap_response.elename, opt)
595
+ end
596
+ soap_response
597
+ end
598
+
599
+ def response_doc_enc(result, mapping_registry, opt)
600
+ (0...result.size).collect { |idx|
601
+ ele = Mapping.obj2soap(result[idx], mapping_registry, nil, opt)
602
+ ele.elename = @doc_response_qnames[idx]
603
+ ele
604
+ }
605
+ end
606
+
607
+ def response_doc_lit(result, mapping_registry, opt)
608
+ (0...result.size).collect { |idx|
609
+ ele = Mapping.obj2soap(result[idx], mapping_registry,
610
+ @doc_response_qnames[idx])
611
+ ele.encodingstyle = LiteralNamespace
612
+ ele
613
+ }
614
+ end
615
+
616
+ def check_style(style)
617
+ unless [:rpc, :document].include?(style)
618
+ raise ArgumentError.new("unknown style: #{style}")
619
+ end
620
+ end
621
+
622
+ # nil means oneway
623
+ def check_use(use)
624
+ unless [:encoded, :literal, nil].include?(use)
625
+ raise ArgumentError.new("unknown use: #{use}")
626
+ end
627
+ end
628
+ end
629
+
630
+ class ApplicationScopeOperation < Operation
631
+ def initialize(soapaction, receiver, name, param_def, opt)
632
+ super(soapaction, name, param_def, opt)
633
+ @receiver = receiver
634
+ end
635
+
636
+ private
637
+
638
+ def receiver
639
+ @receiver
640
+ end
641
+ end
642
+
643
+ class RequestScopeOperation < Operation
644
+ def initialize(soapaction, receiver_factory, name, param_def, opt)
645
+ super(soapaction, name, param_def, opt)
646
+ unless receiver_factory.respond_to?(:create)
647
+ raise TypeError.new("factory must respond to 'create'")
648
+ end
649
+ @receiver_factory = receiver_factory
650
+ end
651
+
652
+ private
653
+
654
+ def receiver
655
+ @receiver_factory.create
656
+ end
657
+ end
658
+ end
659
+
660
+
661
+ end
662
+ end