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