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.
- data/bin/wsdl2ruby.rb +139 -0
- data/bin/xsd2ruby.rb +91 -0
- data/lib/soap/attachment.rb +109 -0
- data/lib/soap/attrproxy.rb +35 -0
- data/lib/soap/baseData.rb +1095 -0
- data/lib/soap/element.rb +278 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +208 -0
- data/lib/soap/encodingstyle/handler.rb +121 -0
- data/lib/soap/encodingstyle/literalHandler.rb +196 -0
- data/lib/soap/encodingstyle/soapHandler.rb +560 -0
- data/lib/soap/filter.rb +14 -0
- data/lib/soap/filter/filterchain.rb +52 -0
- data/lib/soap/filter/handler.rb +32 -0
- data/lib/soap/filter/streamhandler.rb +30 -0
- data/lib/soap/generator.rb +299 -0
- data/lib/soap/header/handler.rb +62 -0
- data/lib/soap/header/handlerset.rb +71 -0
- data/lib/soap/header/mappinghandler.rb +48 -0
- data/lib/soap/header/simplehandler.rb +45 -0
- data/lib/soap/httpconfigloader.rb +140 -0
- data/lib/soap/mapping.rb +13 -0
- data/lib/soap/mapping/encodedregistry.rb +539 -0
- data/lib/soap/mapping/factory.rb +389 -0
- data/lib/soap/mapping/literalregistry.rb +392 -0
- data/lib/soap/mapping/mapping.rb +577 -0
- data/lib/soap/mapping/registry.rb +296 -0
- data/lib/soap/mapping/rubytypeFactory.rb +446 -0
- data/lib/soap/mapping/schemadefinition.rb +171 -0
- data/lib/soap/mapping/typeMap.rb +107 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +212 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +249 -0
- data/lib/soap/marshal.rb +60 -0
- data/lib/soap/mimemessage.rb +243 -0
- data/lib/soap/nestedexception.rb +43 -0
- data/lib/soap/netHttpClient.rb +242 -0
- data/lib/soap/ns.rb +39 -0
- data/lib/soap/parser.rb +253 -0
- data/lib/soap/processor.rb +67 -0
- data/lib/soap/property.rb +340 -0
- data/lib/soap/proxy.rb +15 -0
- data/lib/soap/rpc/cgistub.rb +248 -0
- data/lib/soap/rpc/driver.rb +222 -0
- data/lib/soap/rpc/element.rb +375 -0
- data/lib/soap/rpc/httpserver.rb +143 -0
- data/lib/soap/rpc/methodDef.rb +69 -0
- data/lib/soap/rpc/proxy.rb +573 -0
- data/lib/soap/rpc/router.rb +663 -0
- data/lib/soap/rpc/rpc.rb +26 -0
- data/lib/soap/rpc/soaplet.rb +201 -0
- data/lib/soap/rpc/standaloneServer.rb +44 -0
- data/lib/soap/soap.rb +154 -0
- data/lib/soap/streamHandler.rb +302 -0
- data/lib/soap/version.rb +9 -0
- data/lib/soap/wsdlDriver.rb +165 -0
- data/lib/wsdl/binding.rb +66 -0
- data/lib/wsdl/data.rb +65 -0
- data/lib/wsdl/definitions.rb +237 -0
- data/lib/wsdl/documentation.rb +33 -0
- data/lib/wsdl/import.rb +81 -0
- data/lib/wsdl/importer.rb +39 -0
- data/lib/wsdl/info.rb +51 -0
- data/lib/wsdl/message.rb +55 -0
- data/lib/wsdl/operation.rb +152 -0
- data/lib/wsdl/operationBinding.rb +241 -0
- data/lib/wsdl/param.rb +94 -0
- data/lib/wsdl/parser.rb +165 -0
- data/lib/wsdl/part.rb +53 -0
- data/lib/wsdl/port.rb +67 -0
- data/lib/wsdl/portType.rb +76 -0
- data/lib/wsdl/service.rb +62 -0
- data/lib/wsdl/soap/address.rb +41 -0
- data/lib/wsdl/soap/binding.rb +50 -0
- data/lib/wsdl/soap/body.rb +59 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +93 -0
- data/lib/wsdl/soap/classDefCreator.rb +434 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +241 -0
- data/lib/wsdl/soap/classNameCreator.rb +55 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +107 -0
- data/lib/wsdl/soap/complexType.rb +174 -0
- data/lib/wsdl/soap/data.rb +43 -0
- data/lib/wsdl/soap/definitions.rb +201 -0
- data/lib/wsdl/soap/driverCreator.rb +121 -0
- data/lib/wsdl/soap/element.rb +34 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +74 -0
- data/lib/wsdl/soap/fault.rb +57 -0
- data/lib/wsdl/soap/header.rb +87 -0
- data/lib/wsdl/soap/headerfault.rb +57 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +116 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +59 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +377 -0
- data/lib/wsdl/soap/methodDefCreator.rb +200 -0
- data/lib/wsdl/soap/operation.rb +113 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +92 -0
- data/lib/wsdl/soap/servletStubCreator.rb +105 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +101 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +226 -0
- data/lib/wsdl/types.rb +45 -0
- data/lib/wsdl/wsdl.rb +25 -0
- data/lib/wsdl/xmlSchema/all.rb +25 -0
- data/lib/wsdl/xmlSchema/annotation.rb +35 -0
- data/lib/wsdl/xmlSchema/any.rb +62 -0
- data/lib/wsdl/xmlSchema/anyAttribute.rb +49 -0
- data/lib/wsdl/xmlSchema/attribute.rb +105 -0
- data/lib/wsdl/xmlSchema/attributeGroup.rb +69 -0
- data/lib/wsdl/xmlSchema/choice.rb +59 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +98 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +120 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +105 -0
- data/lib/wsdl/xmlSchema/complexType.rb +194 -0
- data/lib/wsdl/xmlSchema/content.rb +96 -0
- data/lib/wsdl/xmlSchema/data.rb +117 -0
- data/lib/wsdl/xmlSchema/element.rb +154 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +37 -0
- data/lib/wsdl/xmlSchema/fractiondigits.rb +38 -0
- data/lib/wsdl/xmlSchema/group.rb +101 -0
- data/lib/wsdl/xmlSchema/import.rb +54 -0
- data/lib/wsdl/xmlSchema/importHandler.rb +46 -0
- data/lib/wsdl/xmlSchema/importer.rb +103 -0
- data/lib/wsdl/xmlSchema/include.rb +49 -0
- data/lib/wsdl/xmlSchema/length.rb +38 -0
- data/lib/wsdl/xmlSchema/list.rb +49 -0
- data/lib/wsdl/xmlSchema/maxexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxinclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +38 -0
- data/lib/wsdl/xmlSchema/minexclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/mininclusive.rb +38 -0
- data/lib/wsdl/xmlSchema/minlength.rb +38 -0
- data/lib/wsdl/xmlSchema/parser.rb +168 -0
- data/lib/wsdl/xmlSchema/pattern.rb +37 -0
- data/lib/wsdl/xmlSchema/ref.rb +34 -0
- data/lib/wsdl/xmlSchema/schema.rb +179 -0
- data/lib/wsdl/xmlSchema/sequence.rb +55 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +70 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +63 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +133 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +88 -0
- data/lib/wsdl/xmlSchema/totaldigits.rb +38 -0
- data/lib/wsdl/xmlSchema/union.rb +36 -0
- data/lib/wsdl/xmlSchema/unique.rb +35 -0
- data/lib/wsdl/xmlSchema/whitespace.rb +38 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +176 -0
- data/lib/xsd/charset.rb +190 -0
- data/lib/xsd/codegen.rb +13 -0
- data/lib/xsd/codegen/classdef.rb +209 -0
- data/lib/xsd/codegen/commentdef.rb +35 -0
- data/lib/xsd/codegen/gensupport.rb +277 -0
- data/lib/xsd/codegen/methoddef.rb +71 -0
- data/lib/xsd/codegen/moduledef.rb +209 -0
- data/lib/xsd/datatypes.rb +1466 -0
- data/lib/xsd/datatypes1999.rb +21 -0
- data/lib/xsd/iconvcharset.rb +34 -0
- data/lib/xsd/mapping.rb +69 -0
- data/lib/xsd/namedelements.rb +133 -0
- data/lib/xsd/ns.rb +183 -0
- data/lib/xsd/qname.rb +80 -0
- data/lib/xsd/xmlparser.rb +77 -0
- data/lib/xsd/xmlparser/libxmlparser.rb +116 -0
- data/lib/xsd/xmlparser/parser.rb +101 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +59 -0
- data/lib/xsd/xmlparser/xmlparser.rb +51 -0
- data/lib/xsd/xmlparser/xmlscanner.rb +150 -0
- data/test/16runner.rb +69 -0
- data/test/helper.rb +7 -0
- data/test/interopR2/README.txt +2 -0
- data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
- data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
- data/test/interopR2/base.rb +289 -0
- data/test/interopR2/client.NetRemoting.rb +18 -0
- data/test/interopR2/client.rb +1235 -0
- data/test/interopR2/client4S4C.rb +16 -0
- data/test/interopR2/client4S4C2.rb +15 -0
- data/test/interopR2/clientASP.NET.rb +18 -0
- data/test/interopR2/clientApacheAxis.rb +17 -0
- data/test/interopR2/clientApacheSOAP.rb +18 -0
- data/test/interopR2/clientBEAWebLogic.rb +18 -0
- data/test/interopR2/clientBase.rb +1968 -0
- data/test/interopR2/clientCapeConnect.rb +19 -0
- data/test/interopR2/clientDelphi.rb +20 -0
- data/test/interopR2/clientEasySoap.rb +15 -0
- data/test/interopR2/clientFrontier.rb +26 -0
- data/test/interopR2/clientGLUE.rb +33 -0
- data/test/interopR2/clientHP.rb +14 -0
- data/test/interopR2/clientJAX-RPC.rb +20 -0
- data/test/interopR2/clientJSOAP.rb +15 -0
- data/test/interopR2/clientKafkaXSLT.rb +16 -0
- data/test/interopR2/clientMSSOAPToolkit2.0.rb +18 -0
- data/test/interopR2/clientMSSOAPToolkit3.0.rb +18 -0
- data/test/interopR2/clientNuSOAP.rb +20 -0
- data/test/interopR2/clientNuWave.rb +16 -0
- data/test/interopR2/clientOpenLink.rb +16 -0
- data/test/interopR2/clientOracle.rb +16 -0
- data/test/interopR2/clientPEAR.rb +19 -0
- data/test/interopR2/clientPhalanx.rb +19 -0
- data/test/interopR2/clientSIMACE.rb +19 -0
- data/test/interopR2/clientSOAP4R.rb +19 -0
- data/test/interopR2/clientSOAP__Lite.rb +15 -0
- data/test/interopR2/clientSQLData.rb +19 -0
- data/test/interopR2/clientSilverStream.rb +18 -0
- data/test/interopR2/clientSpray2001.rb +18 -0
- data/test/interopR2/clientSun.rb +20 -0
- data/test/interopR2/clientVWOpentalkSoap.rb +20 -0
- data/test/interopR2/clientWASP.rb +20 -0
- data/test/interopR2/clientWASPC.rb +19 -0
- data/test/interopR2/clientWebMethods.rb +16 -0
- data/test/interopR2/clientWhiteMesa.rb +29 -0
- data/test/interopR2/clientWingfoot.rb +16 -0
- data/test/interopR2/clientXMLBus.rb +20 -0
- data/test/interopR2/clientXMLRPC-EPI.rb +18 -0
- data/test/interopR2/clientXSOAP.rb +15 -0
- data/test/interopR2/clientZSI.rb +20 -0
- data/test/interopR2/clienteSOAP.rb +19 -0
- data/test/interopR2/clientgSOAP.rb +19 -0
- data/test/interopR2/clientkSOAP.rb +18 -0
- data/test/interopR2/iSimonReg.rb +113 -0
- data/test/interopR2/interopResultBase.rb +115 -0
- data/test/interopR2/interopService.rb +248 -0
- data/test/interopR2/rwikiInteropService.rb +106 -0
- data/test/interopR2/server.cgi +271 -0
- data/test/interopR2/server.rb +276 -0
- data/test/interopR2/simonReg.rb +124 -0
- data/test/interopR2/test.sh +49 -0
- data/test/interopR4/client.rb +113 -0
- data/test/runner.rb +8 -0
- data/test/sm11/classDef.rb +157 -0
- data/test/sm11/client.rb +543 -0
- data/test/sm11/driver.rb +184 -0
- data/test/sm11/servant.rb +1068 -0
- data/test/sm11/server.rb +26 -0
- data/test/soap/asp.net/hello.wsdl +96 -0
- data/test/soap/asp.net/test_aspdotnet.rb +124 -0
- data/test/soap/auth/htdigest +2 -0
- data/test/soap/auth/htpasswd +2 -0
- data/test/soap/auth/test_basic.rb +118 -0
- data/test/soap/auth/test_digest.rb +119 -0
- data/test/soap/calc/calc.rb +18 -0
- data/test/soap/calc/calc2.rb +30 -0
- data/test/soap/calc/server.cgi +16 -0
- data/test/soap/calc/server.rb +18 -0
- data/test/soap/calc/server2.rb +21 -0
- data/test/soap/calc/test_calc.rb +53 -0
- data/test/soap/calc/test_calc2.rb +57 -0
- data/test/soap/calc/test_calc_cgi.rb +72 -0
- data/test/soap/case/test_mapping.rb +58 -0
- data/test/soap/fault/test_customfault.rb +61 -0
- data/test/soap/fault/test_fault.rb +47 -0
- data/test/soap/fault/test_soaparray.rb +36 -0
- data/test/soap/filter/test_filter.rb +147 -0
- data/test/soap/header/server.cgi +121 -0
- data/test/soap/header/test_authheader.rb +241 -0
- data/test/soap/header/test_authheader_cgi.rb +122 -0
- data/test/soap/header/test_simplehandler.rb +117 -0
- data/test/soap/helloworld/hw_s.rb +17 -0
- data/test/soap/helloworld/test_helloworld.rb +45 -0
- data/test/soap/htpasswd +2 -0
- data/test/soap/literalArrayMapping/amazonEc.rb +4779 -0
- data/test/soap/literalArrayMapping/amazonEcDriver.rb +173 -0
- data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
- data/test/soap/literalArrayMapping/test_definedarray.rb +35 -0
- data/test/soap/marshal/marshaltestlib.rb +498 -0
- data/test/soap/marshal/test_digraph.rb +57 -0
- data/test/soap/marshal/test_marshal.rb +28 -0
- data/test/soap/marshal/test_struct.rb +48 -0
- data/test/soap/ssl/README +1 -0
- data/test/soap/ssl/ca.cert +23 -0
- data/test/soap/ssl/client.cert +19 -0
- data/test/soap/ssl/client.key +15 -0
- data/test/soap/ssl/server.cert +19 -0
- data/test/soap/ssl/server.key +15 -0
- data/test/soap/ssl/sslsvr.rb +59 -0
- data/test/soap/ssl/subca.cert +21 -0
- data/test/soap/ssl/test_ssl.rb +236 -0
- data/test/soap/struct/test_struct.rb +71 -0
- data/test/soap/styleuse/client.rb +21 -0
- data/test/soap/styleuse/server.rb +87 -0
- data/test/soap/swa/test_file.rb +76 -0
- data/test/soap/test_basetype.rb +1091 -0
- data/test/soap/test_cookie.rb +113 -0
- data/test/soap/test_custom_ns.rb +106 -0
- data/test/soap/test_custommap.rb +111 -0
- data/test/soap/test_empty.rb +106 -0
- data/test/soap/test_envelopenamespace.rb +86 -0
- data/test/soap/test_extraattr.rb +55 -0
- data/test/soap/test_generator.rb +32 -0
- data/test/soap/test_httpconfigloader.rb +72 -0
- data/test/soap/test_mapping.rb +132 -0
- data/test/soap/test_nestedexception.rb +71 -0
- data/test/soap/test_nil.rb +71 -0
- data/test/soap/test_no_indent.rb +89 -0
- data/test/soap/test_property.rb +429 -0
- data/test/soap/test_response_as_xml.rb +118 -0
- data/test/soap/test_soapelement.rb +139 -0
- data/test/soap/test_streamhandler.rb +271 -0
- data/test/soap/test_styleuse.rb +327 -0
- data/test/soap/wsdlDriver/README.txt +2 -0
- data/test/soap/wsdlDriver/calc.wsdl +126 -0
- data/test/soap/wsdlDriver/document.wsdl +54 -0
- data/test/soap/wsdlDriver/echo_version.rb +30 -0
- data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
- data/test/soap/wsdlDriver/test_calc.rb +72 -0
- data/test/soap/wsdlDriver/test_document.rb +72 -0
- data/test/soap/wsdlDriver/test_simpletype.rb +82 -0
- data/test/testutil.rb +55 -0
- data/test/wsdl/abstract/abstract.wsdl +176 -0
- data/test/wsdl/abstract/test_abstract.rb +160 -0
- data/test/wsdl/anonymous/expectedClassDef.rb +129 -0
- data/test/wsdl/anonymous/expectedDriver.rb +60 -0
- data/test/wsdl/anonymous/expectedMappingRegistry.rb +177 -0
- data/test/wsdl/anonymous/lp.wsdl +147 -0
- data/test/wsdl/anonymous/test_anonymous.rb +131 -0
- data/test/wsdl/any/any.wsdl +114 -0
- data/test/wsdl/any/expectedDriver.rb +69 -0
- data/test/wsdl/any/expectedEcho.rb +58 -0
- data/test/wsdl/any/expectedMappingRegistry.rb +64 -0
- data/test/wsdl/any/expectedService.rb +70 -0
- data/test/wsdl/any/test_any.rb +194 -0
- data/test/wsdl/axisArray/axisArray.wsdl +87 -0
- data/test/wsdl/axisArray/test_axisarray.rb +125 -0
- data/test/wsdl/choice/choice.wsdl +167 -0
- data/test/wsdl/choice/test_choice.rb +311 -0
- data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
- data/test/wsdl/complexcontent/test_echo.rb +91 -0
- data/test/wsdl/datetime/DatetimeService.rb +45 -0
- data/test/wsdl/datetime/datetime.rb +0 -0
- data/test/wsdl/datetime/datetime.wsdl +45 -0
- data/test/wsdl/datetime/datetimeServant.rb +23 -0
- data/test/wsdl/datetime/test_datetime.rb +88 -0
- data/test/wsdl/document/array/double.wsdl +161 -0
- data/test/wsdl/document/array/test_array.rb +202 -0
- data/test/wsdl/document/document.wsdl +76 -0
- data/test/wsdl/document/number.wsdl +54 -0
- data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
- data/test/wsdl/document/test_nosoapaction.rb +103 -0
- data/test/wsdl/document/test_number.rb +93 -0
- data/test/wsdl/document/test_rpc.rb +356 -0
- data/test/wsdl/emptycomplextype.wsdl +31 -0
- data/test/wsdl/fault/fault.wsdl +79 -0
- data/test/wsdl/fault/multifault.wsdl +96 -0
- data/test/wsdl/fault/test_fault.rb +120 -0
- data/test/wsdl/fault/test_multifault.rb +135 -0
- data/test/wsdl/group/expectedClassdef.rb +59 -0
- data/test/wsdl/group/expectedDriver.rb +52 -0
- data/test/wsdl/group/expectedMappingRegistry.rb +68 -0
- data/test/wsdl/group/group.wsdl +88 -0
- data/test/wsdl/group/test_rpc.rb +146 -0
- data/test/wsdl/list/list.wsdl +93 -0
- data/test/wsdl/list/test_list.rb +125 -0
- data/test/wsdl/map/map.wsdl +92 -0
- data/test/wsdl/map/map.xml +43 -0
- data/test/wsdl/map/test_map.rb +100 -0
- data/test/wsdl/marshal/person.wsdl +21 -0
- data/test/wsdl/marshal/person_org.rb +24 -0
- data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
- data/test/wsdl/multiplefault.wsdl +75 -0
- data/test/wsdl/oneway/oneway.wsdl +36 -0
- data/test/wsdl/oneway/test_oneway.rb +109 -0
- data/test/wsdl/overload/expectedClient.rb +38 -0
- data/test/wsdl/overload/expectedDriver.rb +62 -0
- data/test/wsdl/overload/expectedServant.rb +36 -0
- data/test/wsdl/overload/overload.wsdl +70 -0
- data/test/wsdl/overload/test_overload.rb +132 -0
- data/test/wsdl/qualified/lp.wsdl +47 -0
- data/test/wsdl/qualified/lp.xsd +26 -0
- data/test/wsdl/qualified/np.wsdl +51 -0
- data/test/wsdl/qualified/test_qualified.rb +138 -0
- data/test/wsdl/qualified/test_unqualified.rb +139 -0
- data/test/wsdl/raa/RAAService.rb +126 -0
- data/test/wsdl/raa/README.txt +8 -0
- data/test/wsdl/raa/expectedClassDef.rb +101 -0
- data/test/wsdl/raa/expectedDriver.rb +97 -0
- data/test/wsdl/raa/expectedMappingRegistry.rb +122 -0
- data/test/wsdl/raa/raa.wsdl +264 -0
- data/test/wsdl/raa/test_raa.rb +127 -0
- data/test/wsdl/ref/expectedDriver.rb +52 -0
- data/test/wsdl/ref/expectedProduct.rb +244 -0
- data/test/wsdl/ref/product.wsdl +147 -0
- data/test/wsdl/ref/test_ref.rb +269 -0
- data/test/wsdl/rpc/rpc.wsdl +109 -0
- data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
- data/test/wsdl/rpc/test_rpc.rb +177 -0
- data/test/wsdl/rpc/test_rpc_lit.rb +471 -0
- data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
- data/test/wsdl/simplecontent/test_simplecontent.rb +103 -0
- data/test/wsdl/simpletype/rpc/expectedClient.rb +35 -0
- data/test/wsdl/simpletype/rpc/expectedDriver.rb +59 -0
- data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +37 -0
- data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +58 -0
- data/test/wsdl/simpletype/rpc/expectedServant.rb +33 -0
- data/test/wsdl/simpletype/rpc/expectedService.rb +56 -0
- data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
- data/test/wsdl/simpletype/rpc/test_rpc.rb +53 -0
- data/test/wsdl/simpletype/simpletype.wsdl +114 -0
- data/test/wsdl/simpletype/test_simpletype.rb +93 -0
- data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
- data/test/wsdl/soap/test_soapbodyparts.rb +80 -0
- data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +22 -0
- data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +35 -0
- data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +59 -0
- data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +37 -0
- data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +33 -0
- data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +49 -0
- data/test/wsdl/soap/wsdl2ruby/expectedService.rb +56 -0
- data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
- data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +38 -0
- data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
- data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +84 -0
- data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +103 -0
- data/test/wsdl/soaptype/soaptype.wsdl +61 -0
- data/test/wsdl/soaptype/test_soaptype.rb +179 -0
- data/test/wsdl/test_emptycomplextype.rb +22 -0
- data/test/wsdl/test_fault.rb +51 -0
- data/test/wsdl/test_multiplefault.rb +42 -0
- data/test/xsd/codegen/test_classdef.rb +245 -0
- data/test/xsd/noencoding.xml +4 -0
- data/test/xsd/test_noencoding.rb +33 -0
- data/test/xsd/test_ns.rb +42 -0
- data/test/xsd/test_xmlschemaparser.rb +23 -0
- data/test/xsd/test_xsd.rb +1639 -0
- data/test/xsd/xmllang.xml +43 -0
- data/test/xsd/xmlschema.xml +12 -0
- data/test/xsd/xsd2ruby/expected_mysample.rb +66 -0
- data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +12 -0
- data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +52 -0
- data/test/xsd/xsd2ruby/section.xsd +49 -0
- data/test/xsd/xsd2ruby/test_xsd2ruby.rb +91 -0
- metadata +490 -0
data/lib/soap/rpc/rpc.rb
ADDED
@@ -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
|