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,26 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - RPC 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
+ module SOAP
11
+
12
+
13
+ module RPC
14
+ ServerException = Mapping::MappedException
15
+
16
+ def self.defined_methods(obj)
17
+ if obj.is_a?(Module)
18
+ obj.methods - Module.methods
19
+ else
20
+ obj.methods - Object.instance_methods(true)
21
+ end
22
+ end
23
+ end
24
+
25
+
26
+ end
@@ -0,0 +1,201 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - SOAP handler servlet for WEBrick
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 'webrick/httpservlet/abstract'
11
+ require 'webrick/httpstatus'
12
+ require 'soap/rpc/router'
13
+ require 'soap/streamHandler'
14
+ begin
15
+ require 'stringio'
16
+ require 'zlib'
17
+ rescue LoadError
18
+ warn("Loading stringio or zlib failed. No gzipped response supported.") if $DEBUG
19
+ end
20
+
21
+
22
+ warn("Overriding WEBrick::Log#debug") if $DEBUG
23
+ require 'webrick/log'
24
+ module WEBrick
25
+ class Log < BasicLog
26
+ alias __debug debug
27
+ def debug(msg = nil)
28
+ if block_given? and msg.nil?
29
+ __debug(yield)
30
+ else
31
+ __debug(msg)
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ module SOAP
39
+ module RPC
40
+
41
+
42
+ class SOAPlet < WEBrick::HTTPServlet::AbstractServlet
43
+ public
44
+ attr_reader :options
45
+ attr_accessor :authenticator
46
+
47
+ def initialize(router = nil)
48
+ @router = router || ::SOAP::RPC::Router.new(self.class.name)
49
+ @options = {}
50
+ @authenticator = nil
51
+ @config = {}
52
+ end
53
+
54
+ def allow_content_encoding_gzip=(allow)
55
+ @options[:allow_content_encoding_gzip] = allow
56
+ end
57
+
58
+ ###
59
+ ## Servlet interfaces for WEBrick.
60
+ #
61
+ def get_instance(config, *options)
62
+ @config = config
63
+ self
64
+ end
65
+
66
+ def require_path_info?
67
+ false
68
+ end
69
+
70
+ def do_GET(req, res)
71
+ res.header['Allow'] = 'POST'
72
+ raise WEBrick::HTTPStatus::MethodNotAllowed, "GET request not allowed"
73
+ end
74
+
75
+ def do_POST(req, res)
76
+ logger.debug { "SOAP request: " + req.body } if logger
77
+ if @authenticator
78
+ @authenticator.authenticate(req, res)
79
+ # you can check authenticated user with SOAP::RPC::SOAPlet.user
80
+ end
81
+ begin
82
+ conn_data = ::SOAP::StreamHandler::ConnectionData.new
83
+ setup_req(conn_data, req)
84
+ @router.external_ces = @options[:external_ces]
85
+ Mapping.protect_threadvars(:SOAPlet) do
86
+ SOAPlet.user = req.user
87
+ SOAPlet.cookies = req.cookies
88
+ conn_data = @router.route(conn_data)
89
+ setup_res(conn_data, req, res)
90
+ end
91
+ rescue Exception => e
92
+ conn_data = @router.create_fault_response(e)
93
+ res.status = WEBrick::HTTPStatus::RC_INTERNAL_SERVER_ERROR
94
+ res.body = conn_data.send_string
95
+ res['content-type'] = conn_data.send_contenttype || "text/xml"
96
+ end
97
+ if res.body.is_a?(IO)
98
+ res.chunked = true
99
+ logger.debug { "SOAP response: (chunked response not logged)" } if logger
100
+ else
101
+ logger.debug { "SOAP response: " + res.body } if logger
102
+ end
103
+ end
104
+
105
+ def self.cookies
106
+ get_variable(:Cookies)
107
+ end
108
+
109
+ def self.cookies=(cookies)
110
+ set_variable(:Cookies, cookies)
111
+ end
112
+
113
+ def self.user
114
+ get_variable(:User)
115
+ end
116
+
117
+ def self.user=(user)
118
+ set_variable(:User, user)
119
+ end
120
+
121
+ private
122
+
123
+ def self.get_variable(name)
124
+ if var = Thread.current[:SOAPlet]
125
+ var[name]
126
+ else
127
+ nil
128
+ end
129
+ end
130
+
131
+ def self.set_variable(name, value)
132
+ var = Thread.current[:SOAPlet] ||= {}
133
+ var[name] = value
134
+ end
135
+
136
+ def logger
137
+ @config[:Logger]
138
+ end
139
+
140
+ def setup_req(conn_data, req)
141
+ conn_data.receive_string = req.body
142
+ conn_data.receive_contenttype = req['content-type']
143
+ conn_data.soapaction = parse_soapaction(req.meta_vars['HTTP_SOAPACTION'])
144
+ end
145
+
146
+ def setup_res(conn_data, req, res)
147
+ res['content-type'] = conn_data.send_contenttype
148
+ cookies = SOAPlet.cookies
149
+ unless cookies.empty?
150
+ res['set-cookie'] = cookies.collect { |cookie| cookie.to_s }
151
+ end
152
+ if conn_data.is_nocontent
153
+ res.status = WEBrick::HTTPStatus::RC_ACCEPTED
154
+ res.body = ''
155
+ return
156
+ end
157
+ if conn_data.is_fault
158
+ res.status = WEBrick::HTTPStatus::RC_INTERNAL_SERVER_ERROR
159
+ end
160
+ if outstring = encode_gzip(req, conn_data.send_string)
161
+ res['content-encoding'] = 'gzip'
162
+ res['content-length'] = outstring.size
163
+ res.body = outstring
164
+ else
165
+ res.body = conn_data.send_string
166
+ end
167
+ end
168
+
169
+ def parse_soapaction(soapaction)
170
+ if !soapaction.nil? and !soapaction.empty?
171
+ if /^"(.+)"$/ =~ soapaction
172
+ return $1
173
+ end
174
+ end
175
+ nil
176
+ end
177
+
178
+ def encode_gzip(req, outstring)
179
+ unless encode_gzip?(req)
180
+ return nil
181
+ end
182
+ begin
183
+ ostream = StringIO.new
184
+ gz = Zlib::GzipWriter.new(ostream)
185
+ gz.write(outstring)
186
+ ostream.string
187
+ ensure
188
+ gz.close
189
+ end
190
+ end
191
+
192
+ def encode_gzip?(req)
193
+ @options[:allow_content_encoding_gzip] and defined?(::Zlib) and
194
+ req['accept-encoding'] and
195
+ req['accept-encoding'].split(/,\s*/).include?('gzip')
196
+ end
197
+ end
198
+
199
+
200
+ end
201
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - WEBrick Server
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/rpc/httpserver'
11
+
12
+
13
+ module SOAP
14
+ module RPC
15
+
16
+
17
+ class StandaloneServer < HTTPServer
18
+ def initialize(appname, default_namespace, host = "0.0.0.0", port = 8080)
19
+ @appname = appname
20
+ @default_namespace = default_namespace
21
+ @host = host
22
+ @port = port
23
+ super(create_config)
24
+ end
25
+
26
+ alias add_servant add_rpc_servant
27
+ alias add_headerhandler add_rpc_headerhandler
28
+
29
+ private
30
+
31
+ def create_config
32
+ {
33
+ :BindAddress => @host,
34
+ :Port => @port,
35
+ :AccessLog => [],
36
+ :SOAPDefaultNamespace => @default_namespace,
37
+ :SOAPHTTPServerApplicationName => @appname,
38
+ }
39
+ end
40
+ end
41
+
42
+
43
+ end
44
+ end
data/lib/soap/soap.rb ADDED
@@ -0,0 +1,154 @@
1
+ # encoding: ASCII-8BIT
2
+ # soap/soap.rb: SOAP4R - Base definitions.
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/qname'
11
+ require 'xsd/charset'
12
+ require 'soap/nestedexception'
13
+ require 'soap/version'
14
+
15
+
16
+ module SOAP
17
+
18
+
19
+ # VERSION = Version = SOAP::VERSION::STRING # '1.5.8-HEAD'
20
+ Version = SOAP::VERSION::STRING # '1.5.8-HEAD'
21
+ PropertyName = 'soap/property'
22
+
23
+ EnvelopeNamespace = 'http://schemas.xmlsoap.org/soap/envelope/'
24
+ EncodingNamespace = 'http://schemas.xmlsoap.org/soap/encoding/'
25
+ LiteralNamespace = 'http://xml.apache.org/xml-soap/literalxml'
26
+
27
+ NextActor = 'http://schemas.xmlsoap.org/soap/actor/next'
28
+
29
+ EleEnvelope = 'Envelope'
30
+ EleHeader = 'Header'
31
+ EleBody = 'Body'
32
+ EleFault = 'Fault'
33
+ EleFaultString = 'faultstring'
34
+ EleFaultActor = 'faultactor'
35
+ EleFaultCode = 'faultcode'
36
+ EleFaultDetail = 'detail'
37
+
38
+ AttrMustUnderstand = 'mustUnderstand'
39
+ AttrEncodingStyle = 'encodingStyle'
40
+ AttrActor = 'actor'
41
+ AttrRoot = 'root'
42
+ AttrArrayType = 'arrayType'
43
+ AttrOffset = 'offset'
44
+ AttrPosition = 'position'
45
+ AttrHref = 'href'
46
+ AttrId = 'id'
47
+ ValueArray = 'Array'
48
+
49
+ EleEnvelopeName = XSD::QName.new(EnvelopeNamespace, EleEnvelope).freeze
50
+ EleHeaderName = XSD::QName.new(EnvelopeNamespace, EleHeader).freeze
51
+ EleBodyName = XSD::QName.new(EnvelopeNamespace, EleBody).freeze
52
+ EleFaultName = XSD::QName.new(EnvelopeNamespace, EleFault).freeze
53
+ EleFaultStringName = XSD::QName.new(nil, EleFaultString).freeze
54
+ EleFaultActorName = XSD::QName.new(nil, EleFaultActor).freeze
55
+ EleFaultCodeName = XSD::QName.new(nil, EleFaultCode).freeze
56
+ EleFaultDetailName = XSD::QName.new(nil, EleFaultDetail).freeze
57
+ AttrActorName = XSD::QName.new(EnvelopeNamespace, AttrActor).freeze
58
+ AttrMustUnderstandName = XSD::QName.new(EnvelopeNamespace, AttrMustUnderstand).freeze
59
+ AttrEncodingStyleName = XSD::QName.new(EnvelopeNamespace, AttrEncodingStyle).freeze
60
+ AttrRootName = XSD::QName.new(EncodingNamespace, AttrRoot).freeze
61
+ AttrArrayTypeName = XSD::QName.new(EncodingNamespace, AttrArrayType).freeze
62
+ AttrOffsetName = XSD::QName.new(EncodingNamespace, AttrOffset).freeze
63
+ AttrPositionName = XSD::QName.new(EncodingNamespace, AttrPosition).freeze
64
+ AttrHrefName = XSD::QName.new(nil, AttrHref).freeze
65
+ AttrIdName = XSD::QName.new(nil, AttrId).freeze
66
+ ValueArrayName = XSD::QName.new(EncodingNamespace, ValueArray).freeze
67
+
68
+ Base64Literal = 'base64'
69
+
70
+ MediaType = 'text/xml'
71
+
72
+ class Error < StandardError; include NestedException; end
73
+
74
+ class StreamError < Error; end
75
+ class HTTPStreamError < StreamError; end
76
+ class PostUnavailableError < HTTPStreamError; end
77
+ class MPostUnavailableError < HTTPStreamError; end
78
+
79
+ class ArrayIndexOutOfBoundsError < Error; end
80
+ class ArrayStoreError < Error; end
81
+
82
+ class RPCRoutingError < Error; end
83
+ class EmptyResponseError < Error; end
84
+ class ResponseFormatError < Error; end
85
+
86
+ class UnhandledMustUnderstandHeaderError < Error; end
87
+
88
+
89
+ module FaultCode
90
+ VersionMismatch = XSD::QName.new(EnvelopeNamespace, 'VersionMismatch').freeze
91
+ MustUnderstand = XSD::QName.new(EnvelopeNamespace, 'MustUnderstand').freeze
92
+ Client = XSD::QName.new(EnvelopeNamespace, 'Client').freeze
93
+ Server = XSD::QName.new(EnvelopeNamespace, 'Server').freeze
94
+ end
95
+
96
+
97
+ class FaultError < Error
98
+ attr_reader :faultcode
99
+ attr_reader :faultstring
100
+ attr_reader :faultactor
101
+ attr_accessor :detail
102
+
103
+ def initialize(fault)
104
+ @faultcode = fault.faultcode
105
+ @faultstring = fault.faultstring
106
+ @faultactor = fault.faultactor
107
+ @detail = fault.detail
108
+ super(self.to_s)
109
+ end
110
+
111
+ def to_s
112
+ str = nil
113
+ if @faultstring and @faultstring.respond_to?('data')
114
+ str = @faultstring.data
115
+ end
116
+ str || '(No faultstring)'
117
+ end
118
+ end
119
+
120
+
121
+ module Env
122
+ def self.getenv(name)
123
+ ENV[name.downcase] || ENV[name.upcase]
124
+ end
125
+
126
+ is_cgi = !getenv('request_method').nil?
127
+ HTTP_PROXY = is_cgi ? getenv('cgi_http_proxy') : getenv('http_proxy')
128
+ NO_PROXY = getenv('no_proxy')
129
+ end
130
+
131
+
132
+ end
133
+
134
+
135
+ unless Object.respond_to?(:instance_variable_get)
136
+ class Object
137
+ def instance_variable_get(ivarname)
138
+ instance_eval(ivarname)
139
+ end
140
+
141
+ def instance_variable_set(ivarname, value)
142
+ instance_eval("#{ivarname} = value")
143
+ end
144
+ end
145
+ end
146
+
147
+
148
+ unless Kernel.respond_to?(:warn)
149
+ module Kernel
150
+ def warn(msg)
151
+ STDERR.puts(msg + "\n") unless $VERBOSE.nil?
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,302 @@
1
+ # encoding: ASCII-8BIT
2
+ # SOAP4R - Stream 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/soap'
11
+ require 'soap/httpconfigloader'
12
+ require 'soap/filter/filterchain'
13
+ begin
14
+ require 'stringio'
15
+ require 'zlib'
16
+ rescue LoadError
17
+ warn("Loading stringio or zlib failed. No gzipped response support.") if $DEBUG
18
+ end
19
+
20
+
21
+ module SOAP
22
+
23
+
24
+ class StreamHandler
25
+ RUBY_VERSION_STRING = "ruby #{ RUBY_VERSION } (#{ RUBY_RELEASE_DATE }) [#{ RUBY_PLATFORM }]"
26
+
27
+ attr_reader :filterchain
28
+
29
+ class ConnectionData
30
+ attr_accessor :send_string
31
+ attr_accessor :send_contenttype
32
+ attr_accessor :receive_string
33
+ attr_accessor :receive_contenttype
34
+ attr_accessor :is_fault
35
+ attr_accessor :is_nocontent
36
+ attr_accessor :soapaction
37
+
38
+ def initialize(send_string = nil)
39
+ @send_string = send_string
40
+ @send_contenttype = nil
41
+ @receive_string = nil
42
+ @receive_contenttype = nil
43
+ @is_fault = false
44
+ @is_nocontent = false
45
+ @soapaction = nil
46
+ end
47
+ end
48
+
49
+ def initialize
50
+ @filterchain = Filter::FilterChain.new
51
+ end
52
+
53
+ def self.parse_media_type(str)
54
+ if /^#{ MediaType }(?:\s*;\s*charset=([^"]+|"[^"]+"))?$/i !~ str
55
+ return nil
56
+ end
57
+ charset = $1
58
+ charset.gsub!(/"/, '') if charset
59
+ charset || 'us-ascii'
60
+ end
61
+
62
+ def self.create_media_type(charset)
63
+ "#{ MediaType }; charset=#{ charset }"
64
+ end
65
+
66
+ def send(url, conn_data, soapaction = nil, charset = nil)
67
+ # send a ConnectionData to specified url.
68
+ # return value is a ConnectionData with receive_* property filled.
69
+ # You can fill values of given conn_data and return it.
70
+ end
71
+
72
+ def reset(url = nil)
73
+ # for initializing connection status if needed.
74
+ # return value is not expected.
75
+ end
76
+
77
+ def set_wiredump_file_base(wiredump_file_base)
78
+ # for logging. return value is not expected.
79
+ # Override it when you want.
80
+ raise NotImplementedError
81
+ end
82
+
83
+ def test_loopback_response
84
+ # for loopback testing. see HTTPStreamHandler for more detail.
85
+ # return value is an Array of loopback responses.
86
+ # Override it when you want.
87
+ raise NotImplementedError
88
+ end
89
+ end
90
+
91
+
92
+ class HTTPStreamHandler < StreamHandler
93
+ include SOAP
94
+
95
+ begin
96
+ require 'httpclient'
97
+ Client = HTTPClient
98
+ RETRYABLE = true
99
+ rescue LoadError
100
+ begin
101
+ require 'http-access2'
102
+ if HTTPAccess2::VERSION < "2.0"
103
+ raise LoadError.new("http-access/2.0 or later is required.")
104
+ end
105
+ Client = HTTPAccess2::Client
106
+ RETRYABLE = true
107
+ rescue LoadError
108
+ warn("Loading http-access2 failed. Net/http is used.") if $DEBUG
109
+ require 'soap/netHttpClient'
110
+ Client = SOAP::NetHttpClient
111
+ RETRYABLE = false
112
+ end
113
+ end
114
+
115
+ class HttpPostRequestFilter
116
+ def initialize(filterchain)
117
+ @filterchain = filterchain
118
+ end
119
+
120
+ def filter_request(req)
121
+ @filterchain.each do |filter|
122
+ filter.on_http_outbound(req)
123
+ end
124
+ end
125
+
126
+ def filter_response(req, res)
127
+ @filterchain.each do |filter|
128
+ filter.on_http_inbound(req, res)
129
+ end
130
+ end
131
+ end
132
+
133
+ public
134
+
135
+ attr_reader :client
136
+ attr_accessor :wiredump_file_base
137
+
138
+ MAX_RETRY_COUNT = 10 # [times]
139
+
140
+ def self.create(options)
141
+ new(options)
142
+ end
143
+
144
+ def initialize(options)
145
+ super()
146
+ @client = Client.new(nil, "RUBYJEDI-SOAP4R/#{ Version }")
147
+ if @client.respond_to?(:request_filter)
148
+ @client.request_filter << HttpPostRequestFilter.new(@filterchain)
149
+ end
150
+ @wiredump_file_base = nil
151
+ @charset = @wiredump_dev = nil
152
+ @options = options
153
+ set_options
154
+ @client.debug_dev = @wiredump_dev
155
+ @cookie_store = nil
156
+ @accept_encoding_gzip = false
157
+ end
158
+
159
+ def test_loopback_response
160
+ @client.test_loopback_response
161
+ end
162
+
163
+ def accept_encoding_gzip=(allow)
164
+ @accept_encoding_gzip = allow
165
+ end
166
+
167
+ def inspect
168
+ "#<#{self.class}>"
169
+ end
170
+
171
+ def send(url, conn_data, charset = @charset)
172
+ conn_data = send_post(url, conn_data, charset)
173
+ @client.save_cookie_store if @cookie_store
174
+ conn_data
175
+ end
176
+
177
+ def reset(url = nil)
178
+ if url.nil?
179
+ @client.reset_all
180
+ else
181
+ @client.reset(url)
182
+ end
183
+ @client.save_cookie_store if @cookie_store
184
+ end
185
+
186
+ private
187
+
188
+ def set_options
189
+ @options["http"] ||= ::SOAP::Property.new
190
+ HTTPConfigLoader.set_options(@client, @options["http"])
191
+ @charset = @options["http.charset"] || XSD::Charset.xml_encoding_label
192
+ @options.add_hook("http.charset") do |key, value|
193
+ @charset = value
194
+ end
195
+ @wiredump_dev = @options["http.wiredump_dev"]
196
+ @options.add_hook("http.wiredump_dev") do |key, value|
197
+ @wiredump_dev = value
198
+ @client.debug_dev = @wiredump_dev
199
+ end
200
+ set_cookie_store_file(@options["http.cookie_store_file"])
201
+ @options.add_hook("http.cookie_store_file") do |key, value|
202
+ set_cookie_store_file(value)
203
+ end
204
+ ssl_config = @options["http.ssl_config"]
205
+ basic_auth = @options["http.basic_auth"]
206
+ auth = @options["http.auth"]
207
+ @options["http"].lock(true)
208
+ ssl_config.unlock
209
+ basic_auth.unlock
210
+ auth.unlock
211
+ end
212
+
213
+ def set_cookie_store_file(value)
214
+ value = nil if value and value.empty?
215
+ @cookie_store = value
216
+ @client.set_cookie_store(@cookie_store) if @cookie_store
217
+ end
218
+
219
+ def send_post(url, conn_data, charset)
220
+ conn_data.send_contenttype ||= StreamHandler.create_media_type(charset)
221
+
222
+ if @wiredump_file_base
223
+ filename = @wiredump_file_base + '_request.xml'
224
+ f = File.open(filename, "w")
225
+ f << conn_data.send_string
226
+ f.close
227
+ end
228
+
229
+ extheader = {}
230
+ extheader['Content-Type'] = conn_data.send_contenttype
231
+ extheader['SOAPAction'] = "\"#{ conn_data.soapaction }\""
232
+ extheader['Accept-Encoding'] = 'gzip' if send_accept_encoding_gzip?
233
+ send_string = conn_data.send_string
234
+ @wiredump_dev << "Wire dump:\n\n" if @wiredump_dev
235
+ begin
236
+ retry_count = 0
237
+ while true
238
+ res = @client.post(url, send_string, extheader)
239
+ if RETRYABLE and HTTP::Status.redirect?(res.status)
240
+ retry_count += 1
241
+ if retry_count >= MAX_RETRY_COUNT
242
+ raise HTTPStreamError.new("redirect count exceeded")
243
+ end
244
+ url = res.header["location"][0]
245
+ puts "redirected to #{url}" if $DEBUG
246
+ else
247
+ break
248
+ end
249
+ end
250
+ rescue
251
+ @client.reset(url)
252
+ raise
253
+ end
254
+ @wiredump_dev << "\n\n" if @wiredump_dev
255
+ receive_string = res.content
256
+ if @wiredump_file_base
257
+ filename = @wiredump_file_base + '_response.xml'
258
+ f = File.open(filename, "w")
259
+ f << receive_string
260
+ f.close
261
+ end
262
+ case res.status
263
+ when 405
264
+ raise PostUnavailableError.new("#{ res.status }: #{ res.reason }")
265
+ when 200, 202, 500
266
+ # Nothing to do. 202 is for oneway service.
267
+ else
268
+ raise HTTPStreamError.new("#{ res.status }: #{ res.reason }")
269
+ end
270
+
271
+ # decode gzipped content, if we know it's there from the headers
272
+ if res.respond_to?(:header) and !res.header['content-encoding'].empty? and
273
+ res.header['content-encoding'][0].downcase == 'gzip'
274
+ receive_string = decode_gzip(receive_string)
275
+ # otherwise check for the gzip header
276
+ elsif @accept_encoding_gzip && receive_string[0..1] == "\x1f\x8b"
277
+ receive_string = decode_gzip(receive_string)
278
+ end
279
+ conn_data.receive_string = receive_string
280
+ conn_data.receive_contenttype = res.contenttype
281
+ conn_data
282
+ end
283
+
284
+ def send_accept_encoding_gzip?
285
+ @accept_encoding_gzip and defined?(::Zlib)
286
+ end
287
+
288
+ def decode_gzip(instring)
289
+ unless send_accept_encoding_gzip?
290
+ raise HTTPStreamError.new("Gzipped response content.")
291
+ end
292
+ begin
293
+ gz = Zlib::GzipReader.new(StringIO.new(instring))
294
+ gz.read
295
+ ensure
296
+ gz.close
297
+ end
298
+ end
299
+ end
300
+
301
+
302
+ end