soap4r-sgonyea 1.5.9
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 +485 -0
data/bin/wsdl2ruby.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: ASCII-8BIT
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__),'../lib') if ENV['DEBUG_SOAP4R']
|
4
|
+
|
5
|
+
require 'getoptlong'
|
6
|
+
require 'logger'
|
7
|
+
require 'wsdl/soap/wsdl2ruby'
|
8
|
+
|
9
|
+
|
10
|
+
class WSDL2RubyApp < Logger::Application
|
11
|
+
private
|
12
|
+
|
13
|
+
OptSet = [
|
14
|
+
['--wsdl','-w', GetoptLong::REQUIRED_ARGUMENT],
|
15
|
+
['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT],
|
16
|
+
['--type','-t', GetoptLong::REQUIRED_ARGUMENT],
|
17
|
+
['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT],
|
18
|
+
['--mapping_registry','-r', GetoptLong::NO_ARGUMENT],
|
19
|
+
['--client_skelton','-c', GetoptLong::OPTIONAL_ARGUMENT],
|
20
|
+
['--servant_skelton','-s', GetoptLong::OPTIONAL_ARGUMENT],
|
21
|
+
['--cgi_stub','-g', GetoptLong::OPTIONAL_ARGUMENT],
|
22
|
+
['--servlet_stub','-l', GetoptLong::OPTIONAL_ARGUMENT],
|
23
|
+
['--standalone_server_stub','-a', GetoptLong::OPTIONAL_ARGUMENT],
|
24
|
+
['--driver','-d', GetoptLong::OPTIONAL_ARGUMENT],
|
25
|
+
['--drivername_postfix','-n', GetoptLong::REQUIRED_ARGUMENT],
|
26
|
+
['--force','-f', GetoptLong::NO_ARGUMENT],
|
27
|
+
['--quiet','-q', GetoptLong::NO_ARGUMENT],
|
28
|
+
]
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
super('app')
|
32
|
+
STDERR.sync = true
|
33
|
+
self.level = Logger::FATAL
|
34
|
+
end
|
35
|
+
|
36
|
+
def run
|
37
|
+
@worker = WSDL::SOAP::WSDL2Ruby.new
|
38
|
+
@worker.logger = @log
|
39
|
+
location, opt = parse_opt(GetoptLong.new(*OptSet))
|
40
|
+
usage_exit unless location
|
41
|
+
@worker.location = location
|
42
|
+
if opt['quiet']
|
43
|
+
self.level = Logger::FATAL
|
44
|
+
else
|
45
|
+
self.level = Logger::INFO
|
46
|
+
end
|
47
|
+
@worker.opt.update(opt)
|
48
|
+
@worker.run
|
49
|
+
0
|
50
|
+
end
|
51
|
+
|
52
|
+
def usage_exit
|
53
|
+
puts <<__EOU__
|
54
|
+
Usage: #{ $0 } --wsdl wsdl_location [options]
|
55
|
+
wsdl_location: filename or URL
|
56
|
+
|
57
|
+
Example:
|
58
|
+
For server side:
|
59
|
+
#{ $0 } --wsdl myapp.wsdl --type server
|
60
|
+
For client side:
|
61
|
+
#{ $0 } --wsdl myapp.wsdl --type client
|
62
|
+
|
63
|
+
Options:
|
64
|
+
--wsdl wsdl_location
|
65
|
+
--type server|client
|
66
|
+
--type server implies;
|
67
|
+
--classdef --mapping_registry --servant_skelton --standalone_server_stub
|
68
|
+
--type client implies;
|
69
|
+
--classdef --mapping_registry --client_skelton --driver
|
70
|
+
--classdef [filenameprefix]
|
71
|
+
--mapping_registry
|
72
|
+
--client_skelton [servicename]
|
73
|
+
--servant_skelton [porttypename]
|
74
|
+
--cgi_stub [servicename]
|
75
|
+
--servlet_stub [servicename]
|
76
|
+
--standalone_server_stub [servicename]
|
77
|
+
--driver [porttypename]
|
78
|
+
--drivername_postfix driver_classname_postfix
|
79
|
+
--module_path Module::Path::Name
|
80
|
+
--force
|
81
|
+
--quiet
|
82
|
+
|
83
|
+
Terminology:
|
84
|
+
Client <-> Driver <-(SOAP)-> Stub <-> Servant
|
85
|
+
|
86
|
+
Driver and Stub: Automatically generated
|
87
|
+
Client and Servant: Skelton generated (you should change)
|
88
|
+
__EOU__
|
89
|
+
exit 1
|
90
|
+
end
|
91
|
+
|
92
|
+
def parse_opt(getoptlong)
|
93
|
+
opt = {}
|
94
|
+
wsdl = nil
|
95
|
+
begin
|
96
|
+
getoptlong.each do |name, arg|
|
97
|
+
case name
|
98
|
+
when "--wsdl"
|
99
|
+
wsdl = arg
|
100
|
+
when "--module_path"
|
101
|
+
opt['module_path'] = arg
|
102
|
+
when "--type"
|
103
|
+
case arg
|
104
|
+
when "server"
|
105
|
+
opt['classdef'] ||= nil
|
106
|
+
opt['mapping_registry'] ||= nil
|
107
|
+
opt['servant_skelton'] ||= nil
|
108
|
+
opt['standalone_server_stub'] ||= nil
|
109
|
+
when "client"
|
110
|
+
opt['classdef'] ||= nil
|
111
|
+
opt['mapping_registry'] ||= nil
|
112
|
+
opt['driver'] ||= nil
|
113
|
+
opt['client_skelton'] ||= nil
|
114
|
+
else
|
115
|
+
raise ArgumentError.new("Unknown type #{ arg }")
|
116
|
+
end
|
117
|
+
when "--classdef", "--mapping_registry",
|
118
|
+
"--client_skelton", "--servant_skelton",
|
119
|
+
"--cgi_stub", "--servlet_stub", "--standalone_server_stub",
|
120
|
+
"--driver"
|
121
|
+
opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg
|
122
|
+
when "--drivername_postfix"
|
123
|
+
opt['drivername_postfix'] = arg
|
124
|
+
when "--force"
|
125
|
+
opt['force'] = true
|
126
|
+
when "--quiet"
|
127
|
+
opt['quiet'] = true
|
128
|
+
else
|
129
|
+
raise ArgumentError.new("Unknown type #{ arg }")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
rescue
|
133
|
+
usage_exit
|
134
|
+
end
|
135
|
+
return wsdl, opt
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
WSDL2RubyApp.new.start
|
data/bin/xsd2ruby.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: ASCII-8BIT
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__),'../lib') if ENV['DEBUG_SOAP4R']
|
4
|
+
|
5
|
+
require 'getoptlong'
|
6
|
+
require 'logger'
|
7
|
+
require 'wsdl/xmlSchema/xsd2ruby'
|
8
|
+
|
9
|
+
class XSD2RubyApp < Logger::Application
|
10
|
+
private
|
11
|
+
|
12
|
+
OptSet = [
|
13
|
+
['--xsd','-x', GetoptLong::REQUIRED_ARGUMENT],
|
14
|
+
['--module_path','-m', GetoptLong::REQUIRED_ARGUMENT],
|
15
|
+
['--classdef','-e', GetoptLong::OPTIONAL_ARGUMENT],
|
16
|
+
['--mapping_registry','-r', GetoptLong::NO_ARGUMENT],
|
17
|
+
['--mapper','-p', GetoptLong::NO_ARGUMENT],
|
18
|
+
['--force','-f', GetoptLong::NO_ARGUMENT],
|
19
|
+
['--quiet','-q', GetoptLong::NO_ARGUMENT],
|
20
|
+
]
|
21
|
+
|
22
|
+
def initialize
|
23
|
+
super('app')
|
24
|
+
STDERR.sync = true
|
25
|
+
self.level = Logger::FATAL
|
26
|
+
end
|
27
|
+
|
28
|
+
def run
|
29
|
+
@worker = WSDL::XMLSchema::XSD2Ruby.new
|
30
|
+
@worker.logger = @log
|
31
|
+
location, opt = parse_opt(GetoptLong.new(*OptSet))
|
32
|
+
usage_exit unless location
|
33
|
+
@worker.location = location
|
34
|
+
if opt['quiet']
|
35
|
+
self.level = Logger::FATAL
|
36
|
+
else
|
37
|
+
self.level = Logger::INFO
|
38
|
+
end
|
39
|
+
@worker.opt.update(opt)
|
40
|
+
@worker.run
|
41
|
+
0
|
42
|
+
end
|
43
|
+
|
44
|
+
def usage_exit
|
45
|
+
puts <<__EOU__
|
46
|
+
Usage: #{ $0 } --xsd xsd_location [options]
|
47
|
+
xsd_location: filename or URL
|
48
|
+
|
49
|
+
Example:
|
50
|
+
#{ $0 } --xsd myapp.xsd --classdef foo
|
51
|
+
|
52
|
+
Options:
|
53
|
+
--xsd xsd_location
|
54
|
+
--classdef [filenameprefix]
|
55
|
+
--mapping_registry
|
56
|
+
--mapper
|
57
|
+
--module_path [Module::Path::Name]
|
58
|
+
--force
|
59
|
+
--quiet
|
60
|
+
__EOU__
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_opt(getoptlong)
|
65
|
+
opt = {}
|
66
|
+
xsd = nil
|
67
|
+
begin
|
68
|
+
getoptlong.each do |name, arg|
|
69
|
+
case name
|
70
|
+
when "--xsd"
|
71
|
+
xsd = arg
|
72
|
+
when "--module_path"
|
73
|
+
opt['module_path'] = arg
|
74
|
+
when "--classdef", "--mapping_registry", "--mapper"
|
75
|
+
opt[name.sub(/^--/, '')] = arg.empty? ? nil : arg
|
76
|
+
when "--force"
|
77
|
+
opt['force'] = true
|
78
|
+
when "--quiet"
|
79
|
+
opt['quiet'] = true
|
80
|
+
else
|
81
|
+
raise ArgumentError.new("Unknown type #{ arg }")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
rescue
|
85
|
+
usage_exit
|
86
|
+
end
|
87
|
+
return xsd, opt
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
XSD2RubyApp.new.start
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# encoding: ASCII-8BIT
|
2
|
+
# soap/attachment.rb: SOAP4R - SwA implementation.
|
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/baseData'
|
11
|
+
require 'soap/mapping'
|
12
|
+
|
13
|
+
|
14
|
+
module SOAP
|
15
|
+
|
16
|
+
|
17
|
+
class SOAPAttachment < SOAPExternalReference
|
18
|
+
attr_reader :data
|
19
|
+
|
20
|
+
def initialize(value)
|
21
|
+
super()
|
22
|
+
@data = value
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def external_contentid
|
28
|
+
@data.contentid
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
class Attachment
|
34
|
+
attr_reader :io
|
35
|
+
attr_accessor :contenttype
|
36
|
+
|
37
|
+
def initialize(string_or_readable = nil)
|
38
|
+
@string_or_readable = string_or_readable
|
39
|
+
@contenttype = "application/octet-stream"
|
40
|
+
@contentid = nil
|
41
|
+
@content = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def contentid
|
45
|
+
@contentid ||= Attachment.contentid(self)
|
46
|
+
end
|
47
|
+
|
48
|
+
def contentid=(contentid)
|
49
|
+
@contentid = contentid
|
50
|
+
end
|
51
|
+
|
52
|
+
def mime_contentid
|
53
|
+
'<' + contentid + '>'
|
54
|
+
end
|
55
|
+
|
56
|
+
def content
|
57
|
+
if @content == nil and @string_or_readable != nil
|
58
|
+
@content = @string_or_readable.respond_to?(:read) ?
|
59
|
+
@string_or_readable.read : @string_or_readable
|
60
|
+
end
|
61
|
+
@content
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_s
|
65
|
+
content
|
66
|
+
end
|
67
|
+
|
68
|
+
def write(out)
|
69
|
+
out.write(content)
|
70
|
+
end
|
71
|
+
|
72
|
+
def save(filename)
|
73
|
+
File.open(filename, "wb") do |f|
|
74
|
+
write(f)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.contentid(obj)
|
79
|
+
# this needs to be fixed
|
80
|
+
[obj.__id__.to_s, Process.pid.to_s].join('.')
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.mime_contentid(obj)
|
84
|
+
'<' + contentid(obj) + '>'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
module Mapping
|
90
|
+
class AttachmentFactory < SOAP::Mapping::Factory
|
91
|
+
def obj2soap(soap_class, obj, info, map)
|
92
|
+
soap_obj = soap_class.new(obj)
|
93
|
+
mark_marshalled_obj(obj, soap_obj)
|
94
|
+
soap_obj
|
95
|
+
end
|
96
|
+
|
97
|
+
def soap2obj(obj_class, node, info, map)
|
98
|
+
obj = node.data
|
99
|
+
mark_unmarshalled_obj(node, obj)
|
100
|
+
return true, obj
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
DefaultRegistry.add(::SOAP::Attachment, ::SOAP::SOAPAttachment,
|
105
|
+
AttachmentFactory.new, nil)
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: ASCII-8BIT
|
2
|
+
# SOAP4R - attribute proxy interface.
|
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 AttrProxy
|
14
|
+
def self.included(klass)
|
15
|
+
klass.extend(AttrProxyClassSupport)
|
16
|
+
end
|
17
|
+
|
18
|
+
module AttrProxyClassSupport
|
19
|
+
def attr_proxy(symbol, assignable = false)
|
20
|
+
name = symbol.to_s
|
21
|
+
define_method(name) {
|
22
|
+
attrproxy.__send__(name)
|
23
|
+
}
|
24
|
+
if assignable
|
25
|
+
aname = name + '='
|
26
|
+
define_method(aname) { |rhs|
|
27
|
+
attrproxy.__send__(aname, rhs)
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,1095 @@
|
|
1
|
+
# encoding: ASCII-8BIT
|
2
|
+
# soap/baseData.rb: SOAP4R - Base type library
|
3
|
+
# Copyright (C) 2000-2007 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
4
|
+
|
5
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
6
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
7
|
+
# either the dual license version in 2003, or any later version.
|
8
|
+
|
9
|
+
|
10
|
+
require 'xsd/datatypes'
|
11
|
+
require 'soap/soap'
|
12
|
+
require 'xsd/codegen/gensupport'
|
13
|
+
require 'soap/mapping/mapping'
|
14
|
+
|
15
|
+
|
16
|
+
module SOAP
|
17
|
+
|
18
|
+
|
19
|
+
###
|
20
|
+
## Mix-in module for SOAP base type classes.
|
21
|
+
#
|
22
|
+
module SOAPModuleUtils
|
23
|
+
include SOAP
|
24
|
+
|
25
|
+
public
|
26
|
+
|
27
|
+
def decode(elename)
|
28
|
+
d = self.new
|
29
|
+
d.elename = elename
|
30
|
+
d
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_data(str)
|
34
|
+
new(str).data
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
###
|
40
|
+
## for SOAP type(base and compound)
|
41
|
+
#
|
42
|
+
module SOAPType
|
43
|
+
attr_accessor :encodingstyle
|
44
|
+
attr_accessor :elename
|
45
|
+
attr_accessor :id
|
46
|
+
attr_reader :precedents
|
47
|
+
attr_accessor :root
|
48
|
+
attr_accessor :parent
|
49
|
+
attr_accessor :position
|
50
|
+
attr_reader :extraattr
|
51
|
+
attr_accessor :definedtype
|
52
|
+
attr_accessor :force_typed
|
53
|
+
|
54
|
+
def initialize(*arg)
|
55
|
+
super
|
56
|
+
@encodingstyle = nil
|
57
|
+
@elename = XSD::QName::EMPTY
|
58
|
+
@id = nil
|
59
|
+
@precedents = []
|
60
|
+
@root = false
|
61
|
+
@parent = nil
|
62
|
+
@position = nil
|
63
|
+
@definedtype = nil
|
64
|
+
@extraattr = {}
|
65
|
+
@force_typed = false
|
66
|
+
end
|
67
|
+
|
68
|
+
def inspect
|
69
|
+
if self.is_a?(XSD::NSDBase)
|
70
|
+
sprintf("#<%s:0x%x %s %s>", self.class.name, __id__, self.elename, self.type)
|
71
|
+
else
|
72
|
+
sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def rootnode
|
77
|
+
node = self
|
78
|
+
while node = node.parent
|
79
|
+
break if SOAPEnvelope === node
|
80
|
+
end
|
81
|
+
node
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
###
|
87
|
+
## for SOAP base type
|
88
|
+
#
|
89
|
+
module SOAPBasetype
|
90
|
+
include SOAPType
|
91
|
+
include SOAP
|
92
|
+
|
93
|
+
attr_accessor :qualified
|
94
|
+
|
95
|
+
def initialize(*arg)
|
96
|
+
super
|
97
|
+
@qualified = nil
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
###
|
103
|
+
## for SOAP compound type
|
104
|
+
#
|
105
|
+
module SOAPCompoundtype
|
106
|
+
include SOAPType
|
107
|
+
include SOAP
|
108
|
+
|
109
|
+
attr_accessor :qualified
|
110
|
+
|
111
|
+
def initialize(*arg)
|
112
|
+
super
|
113
|
+
@qualified = nil
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# marker for compound types which have named accessor
|
118
|
+
module SOAPNameAccessible
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
###
|
123
|
+
## Convenience datatypes.
|
124
|
+
#
|
125
|
+
class SOAPReference < XSD::NSDBase
|
126
|
+
include SOAPBasetype
|
127
|
+
extend SOAPModuleUtils
|
128
|
+
|
129
|
+
public
|
130
|
+
|
131
|
+
attr_accessor :refid
|
132
|
+
|
133
|
+
# Override the definition in SOAPBasetype.
|
134
|
+
def initialize(obj = nil)
|
135
|
+
super()
|
136
|
+
@type = XSD::QName::EMPTY
|
137
|
+
@refid = nil
|
138
|
+
@obj = nil
|
139
|
+
__setobj__(obj) if obj
|
140
|
+
end
|
141
|
+
|
142
|
+
def __getobj__
|
143
|
+
@obj
|
144
|
+
end
|
145
|
+
|
146
|
+
def __setobj__(obj)
|
147
|
+
@obj = obj
|
148
|
+
@refid = @obj.id || SOAPReference.create_refid(@obj)
|
149
|
+
@obj.id = @refid unless @obj.id
|
150
|
+
@obj.precedents << self
|
151
|
+
# Copies NSDBase information
|
152
|
+
@obj.type = @type unless @obj.type
|
153
|
+
end
|
154
|
+
|
155
|
+
# Why don't I use delegate.rb?
|
156
|
+
# -> delegate requires target object type at initialize time.
|
157
|
+
# Why don't I use forwardable.rb?
|
158
|
+
# -> forwardable requires a list of forwarding methods.
|
159
|
+
#
|
160
|
+
# ToDo: Maybe I should use forwardable.rb and give it a methods list like
|
161
|
+
# delegate.rb...
|
162
|
+
#
|
163
|
+
def method_missing(msg_id, *params)
|
164
|
+
if @obj
|
165
|
+
@obj.send(msg_id, *params)
|
166
|
+
else
|
167
|
+
nil
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
# for referenced base type such as a long value from Axis.
|
172
|
+
# base2obj requires a node to respond to :data
|
173
|
+
def data
|
174
|
+
if @obj.respond_to?(:data)
|
175
|
+
@obj.data
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def refidstr
|
180
|
+
'#' + @refid
|
181
|
+
end
|
182
|
+
|
183
|
+
def self.create_refid(obj)
|
184
|
+
'id' + obj.__id__.to_s
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.decode(elename, refidstr)
|
188
|
+
if /\A#(.*)\z/ =~ refidstr
|
189
|
+
refid = $1
|
190
|
+
elsif /\Acid:(.*)\z/ =~ refidstr
|
191
|
+
refid = $1
|
192
|
+
else
|
193
|
+
raise ArgumentError.new("illegal refid #{refidstr}")
|
194
|
+
end
|
195
|
+
d = super(elename)
|
196
|
+
d.refid = refid
|
197
|
+
d
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
class SOAPExternalReference < XSD::NSDBase
|
203
|
+
include SOAPBasetype
|
204
|
+
extend SOAPModuleUtils
|
205
|
+
|
206
|
+
def initialize
|
207
|
+
super()
|
208
|
+
@type = XSD::QName::EMPTY
|
209
|
+
end
|
210
|
+
|
211
|
+
def referred
|
212
|
+
rootnode.external_content[external_contentid] = self
|
213
|
+
end
|
214
|
+
|
215
|
+
def refidstr
|
216
|
+
'cid:' + external_contentid
|
217
|
+
end
|
218
|
+
|
219
|
+
private
|
220
|
+
|
221
|
+
def external_contentid
|
222
|
+
raise NotImplementedError.new
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
|
227
|
+
class SOAPNil < XSD::XSDNil
|
228
|
+
include SOAPBasetype
|
229
|
+
extend SOAPModuleUtils
|
230
|
+
|
231
|
+
public
|
232
|
+
|
233
|
+
def initialize(value = nil)
|
234
|
+
super(value)
|
235
|
+
@extraattr[XSD::AttrNilName] = 'true'
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
# SOAPRawString is for sending raw string. In contrast to SOAPString,
|
240
|
+
# SOAP4R does not do XML encoding and does not convert its CES. The string it
|
241
|
+
# holds is embedded to XML instance directly as a 'xsd:string'.
|
242
|
+
class SOAPRawString < XSD::XSDString
|
243
|
+
include SOAPBasetype
|
244
|
+
extend SOAPModuleUtils
|
245
|
+
end
|
246
|
+
|
247
|
+
|
248
|
+
###
|
249
|
+
## Basic datatypes.
|
250
|
+
#
|
251
|
+
class SOAPAnySimpleType < XSD::XSDAnySimpleType
|
252
|
+
include SOAPBasetype
|
253
|
+
extend SOAPModuleUtils
|
254
|
+
end
|
255
|
+
|
256
|
+
class SOAPString < XSD::XSDString
|
257
|
+
include SOAPBasetype
|
258
|
+
extend SOAPModuleUtils
|
259
|
+
SOAPENCType = QName.new(EncodingNamespace, StringLiteral)
|
260
|
+
end
|
261
|
+
|
262
|
+
class SOAPNormalizedString < XSD::XSDNormalizedString
|
263
|
+
include SOAPBasetype
|
264
|
+
extend SOAPModuleUtils
|
265
|
+
SOAPENCType = QName.new(EncodingNamespace, NormalizedStringLiteral)
|
266
|
+
end
|
267
|
+
|
268
|
+
class SOAPToken < XSD::XSDToken
|
269
|
+
include SOAPBasetype
|
270
|
+
extend SOAPModuleUtils
|
271
|
+
SOAPENCType = QName.new(EncodingNamespace, TokenLiteral)
|
272
|
+
end
|
273
|
+
|
274
|
+
class SOAPLanguage < XSD::XSDLanguage
|
275
|
+
include SOAPBasetype
|
276
|
+
extend SOAPModuleUtils
|
277
|
+
SOAPENCType = QName.new(EncodingNamespace, LanguageLiteral)
|
278
|
+
end
|
279
|
+
|
280
|
+
class SOAPNMTOKEN < XSD::XSDNMTOKEN
|
281
|
+
include SOAPBasetype
|
282
|
+
extend SOAPModuleUtils
|
283
|
+
SOAPENCType = QName.new(EncodingNamespace, NMTOKENLiteral)
|
284
|
+
end
|
285
|
+
|
286
|
+
class SOAPNMTOKENS < XSD::XSDNMTOKENS
|
287
|
+
include SOAPBasetype
|
288
|
+
extend SOAPModuleUtils
|
289
|
+
SOAPENCType = QName.new(EncodingNamespace, NMTOKENSLiteral)
|
290
|
+
end
|
291
|
+
|
292
|
+
class SOAPName < XSD::XSDName
|
293
|
+
include SOAPBasetype
|
294
|
+
extend SOAPModuleUtils
|
295
|
+
SOAPENCType = QName.new(EncodingNamespace, NameLiteral)
|
296
|
+
end
|
297
|
+
|
298
|
+
class SOAPNCName < XSD::XSDNCName
|
299
|
+
include SOAPBasetype
|
300
|
+
extend SOAPModuleUtils
|
301
|
+
SOAPENCType = QName.new(EncodingNamespace, NCNameLiteral)
|
302
|
+
end
|
303
|
+
|
304
|
+
class SOAPID < XSD::XSDID
|
305
|
+
include SOAPBasetype
|
306
|
+
extend SOAPModuleUtils
|
307
|
+
SOAPENCType = QName.new(EncodingNamespace, IDLiteral)
|
308
|
+
end
|
309
|
+
|
310
|
+
class SOAPIDREF < XSD::XSDIDREF
|
311
|
+
include SOAPBasetype
|
312
|
+
extend SOAPModuleUtils
|
313
|
+
SOAPENCType = QName.new(EncodingNamespace, IDREFLiteral)
|
314
|
+
end
|
315
|
+
|
316
|
+
class SOAPIDREFS < XSD::XSDIDREFS
|
317
|
+
include SOAPBasetype
|
318
|
+
extend SOAPModuleUtils
|
319
|
+
SOAPENCType = QName.new(EncodingNamespace, IDREFSLiteral)
|
320
|
+
end
|
321
|
+
|
322
|
+
class SOAPENTITY < XSD::XSDENTITY
|
323
|
+
include SOAPBasetype
|
324
|
+
extend SOAPModuleUtils
|
325
|
+
SOAPENCType = QName.new(EncodingNamespace, ENTITYLiteral)
|
326
|
+
end
|
327
|
+
|
328
|
+
class SOAPENTITIES < XSD::XSDENTITIES
|
329
|
+
include SOAPBasetype
|
330
|
+
extend SOAPModuleUtils
|
331
|
+
SOAPENCType = QName.new(EncodingNamespace, ENTITIESLiteral)
|
332
|
+
end
|
333
|
+
|
334
|
+
class SOAPBoolean < XSD::XSDBoolean
|
335
|
+
include SOAPBasetype
|
336
|
+
extend SOAPModuleUtils
|
337
|
+
SOAPENCType = QName.new(EncodingNamespace, BooleanLiteral)
|
338
|
+
end
|
339
|
+
|
340
|
+
class SOAPDecimal < XSD::XSDDecimal
|
341
|
+
include SOAPBasetype
|
342
|
+
extend SOAPModuleUtils
|
343
|
+
SOAPENCType = QName.new(EncodingNamespace, DecimalLiteral)
|
344
|
+
end
|
345
|
+
|
346
|
+
class SOAPFloat < XSD::XSDFloat
|
347
|
+
include SOAPBasetype
|
348
|
+
extend SOAPModuleUtils
|
349
|
+
SOAPENCType = QName.new(EncodingNamespace, FloatLiteral)
|
350
|
+
end
|
351
|
+
|
352
|
+
class SOAPDouble < XSD::XSDDouble
|
353
|
+
include SOAPBasetype
|
354
|
+
extend SOAPModuleUtils
|
355
|
+
SOAPENCType = QName.new(EncodingNamespace, DoubleLiteral)
|
356
|
+
end
|
357
|
+
|
358
|
+
class SOAPDuration < XSD::XSDDuration
|
359
|
+
include SOAPBasetype
|
360
|
+
extend SOAPModuleUtils
|
361
|
+
SOAPENCType = QName.new(EncodingNamespace, DurationLiteral)
|
362
|
+
end
|
363
|
+
|
364
|
+
class SOAPDateTime < XSD::XSDDateTime
|
365
|
+
include SOAPBasetype
|
366
|
+
extend SOAPModuleUtils
|
367
|
+
SOAPENCType = QName.new(EncodingNamespace, DateTimeLiteral)
|
368
|
+
end
|
369
|
+
|
370
|
+
class SOAPTime < XSD::XSDTime
|
371
|
+
include SOAPBasetype
|
372
|
+
extend SOAPModuleUtils
|
373
|
+
SOAPENCType = QName.new(EncodingNamespace, TimeLiteral)
|
374
|
+
end
|
375
|
+
|
376
|
+
class SOAPDate < XSD::XSDDate
|
377
|
+
include SOAPBasetype
|
378
|
+
extend SOAPModuleUtils
|
379
|
+
SOAPENCType = QName.new(EncodingNamespace, DateLiteral)
|
380
|
+
end
|
381
|
+
|
382
|
+
class SOAPGYearMonth < XSD::XSDGYearMonth
|
383
|
+
include SOAPBasetype
|
384
|
+
extend SOAPModuleUtils
|
385
|
+
SOAPENCType = QName.new(EncodingNamespace, GYearMonthLiteral)
|
386
|
+
end
|
387
|
+
|
388
|
+
class SOAPGYear < XSD::XSDGYear
|
389
|
+
include SOAPBasetype
|
390
|
+
extend SOAPModuleUtils
|
391
|
+
SOAPENCType = QName.new(EncodingNamespace, GYearLiteral)
|
392
|
+
end
|
393
|
+
|
394
|
+
class SOAPGMonthDay < XSD::XSDGMonthDay
|
395
|
+
include SOAPBasetype
|
396
|
+
extend SOAPModuleUtils
|
397
|
+
SOAPENCType = QName.new(EncodingNamespace, GMonthDayLiteral)
|
398
|
+
end
|
399
|
+
|
400
|
+
class SOAPGDay < XSD::XSDGDay
|
401
|
+
include SOAPBasetype
|
402
|
+
extend SOAPModuleUtils
|
403
|
+
SOAPENCType = QName.new(EncodingNamespace, GDayLiteral)
|
404
|
+
end
|
405
|
+
|
406
|
+
class SOAPGMonth < XSD::XSDGMonth
|
407
|
+
include SOAPBasetype
|
408
|
+
extend SOAPModuleUtils
|
409
|
+
SOAPENCType = QName.new(EncodingNamespace, GMonthLiteral)
|
410
|
+
end
|
411
|
+
|
412
|
+
class SOAPHexBinary < XSD::XSDHexBinary
|
413
|
+
include SOAPBasetype
|
414
|
+
extend SOAPModuleUtils
|
415
|
+
SOAPENCType = QName.new(EncodingNamespace, HexBinaryLiteral)
|
416
|
+
end
|
417
|
+
|
418
|
+
class SOAPBase64 < XSD::XSDBase64Binary
|
419
|
+
include SOAPBasetype
|
420
|
+
extend SOAPModuleUtils
|
421
|
+
Type = SOAPENCType = QName.new(EncodingNamespace, Base64Literal)
|
422
|
+
|
423
|
+
public
|
424
|
+
|
425
|
+
def initialize(value = nil)
|
426
|
+
super(value)
|
427
|
+
@type = Type
|
428
|
+
end
|
429
|
+
|
430
|
+
def as_xsd
|
431
|
+
@type = XSD::XSDBase64Binary::Type
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
class SOAPAnyURI < XSD::XSDAnyURI
|
436
|
+
include SOAPBasetype
|
437
|
+
extend SOAPModuleUtils
|
438
|
+
SOAPENCType = QName.new(EncodingNamespace, AnyURILiteral)
|
439
|
+
end
|
440
|
+
|
441
|
+
class SOAPQName < XSD::XSDQName
|
442
|
+
include SOAPBasetype
|
443
|
+
extend SOAPModuleUtils
|
444
|
+
SOAPENCType = QName.new(EncodingNamespace, QNameLiteral)
|
445
|
+
end
|
446
|
+
|
447
|
+
|
448
|
+
class SOAPInteger < XSD::XSDInteger
|
449
|
+
include SOAPBasetype
|
450
|
+
extend SOAPModuleUtils
|
451
|
+
SOAPENCType = QName.new(EncodingNamespace, IntegerLiteral)
|
452
|
+
end
|
453
|
+
|
454
|
+
class SOAPNonPositiveInteger < XSD::XSDNonPositiveInteger
|
455
|
+
include SOAPBasetype
|
456
|
+
extend SOAPModuleUtils
|
457
|
+
SOAPENCType = QName.new(EncodingNamespace, NonPositiveIntegerLiteral)
|
458
|
+
end
|
459
|
+
|
460
|
+
class SOAPNegativeInteger < XSD::XSDNegativeInteger
|
461
|
+
include SOAPBasetype
|
462
|
+
extend SOAPModuleUtils
|
463
|
+
SOAPENCType = QName.new(EncodingNamespace, NegativeIntegerLiteral)
|
464
|
+
end
|
465
|
+
|
466
|
+
class SOAPLong < XSD::XSDLong
|
467
|
+
include SOAPBasetype
|
468
|
+
extend SOAPModuleUtils
|
469
|
+
SOAPENCType = QName.new(EncodingNamespace, LongLiteral)
|
470
|
+
end
|
471
|
+
|
472
|
+
class SOAPInt < XSD::XSDInt
|
473
|
+
include SOAPBasetype
|
474
|
+
extend SOAPModuleUtils
|
475
|
+
SOAPENCType = QName.new(EncodingNamespace, IntLiteral)
|
476
|
+
end
|
477
|
+
|
478
|
+
class SOAPShort < XSD::XSDShort
|
479
|
+
include SOAPBasetype
|
480
|
+
extend SOAPModuleUtils
|
481
|
+
SOAPENCType = QName.new(EncodingNamespace, ShortLiteral)
|
482
|
+
end
|
483
|
+
|
484
|
+
class SOAPByte < XSD::XSDByte
|
485
|
+
include SOAPBasetype
|
486
|
+
extend SOAPModuleUtils
|
487
|
+
SOAPENCType = QName.new(EncodingNamespace, ByteLiteral)
|
488
|
+
end
|
489
|
+
|
490
|
+
class SOAPNonNegativeInteger < XSD::XSDNonNegativeInteger
|
491
|
+
include SOAPBasetype
|
492
|
+
extend SOAPModuleUtils
|
493
|
+
SOAPENCType = QName.new(EncodingNamespace, NonNegativeIntegerLiteral)
|
494
|
+
end
|
495
|
+
|
496
|
+
class SOAPUnsignedLong < XSD::XSDUnsignedLong
|
497
|
+
include SOAPBasetype
|
498
|
+
extend SOAPModuleUtils
|
499
|
+
SOAPENCType = QName.new(EncodingNamespace, UnsignedLongLiteral)
|
500
|
+
end
|
501
|
+
|
502
|
+
class SOAPUnsignedInt < XSD::XSDUnsignedInt
|
503
|
+
include SOAPBasetype
|
504
|
+
extend SOAPModuleUtils
|
505
|
+
SOAPENCType = QName.new(EncodingNamespace, UnsignedIntLiteral)
|
506
|
+
end
|
507
|
+
|
508
|
+
class SOAPUnsignedShort < XSD::XSDUnsignedShort
|
509
|
+
include SOAPBasetype
|
510
|
+
extend SOAPModuleUtils
|
511
|
+
SOAPENCType = QName.new(EncodingNamespace, UnsignedShortLiteral)
|
512
|
+
end
|
513
|
+
|
514
|
+
class SOAPUnsignedByte < XSD::XSDUnsignedByte
|
515
|
+
include SOAPBasetype
|
516
|
+
extend SOAPModuleUtils
|
517
|
+
SOAPENCType = QName.new(EncodingNamespace, UnsignedByteLiteral)
|
518
|
+
end
|
519
|
+
|
520
|
+
class SOAPPositiveInteger < XSD::XSDPositiveInteger
|
521
|
+
include SOAPBasetype
|
522
|
+
extend SOAPModuleUtils
|
523
|
+
SOAPENCType = QName.new(EncodingNamespace, PositiveIntegerLiteral)
|
524
|
+
end
|
525
|
+
|
526
|
+
|
527
|
+
###
|
528
|
+
## Compound datatypes.
|
529
|
+
#
|
530
|
+
class SOAPStruct < XSD::NSDBase
|
531
|
+
include Enumerable
|
532
|
+
include SOAPCompoundtype
|
533
|
+
include SOAPNameAccessible
|
534
|
+
|
535
|
+
public
|
536
|
+
|
537
|
+
def initialize(type = nil)
|
538
|
+
super()
|
539
|
+
@type = type || XSD::QName::EMPTY
|
540
|
+
@array = []
|
541
|
+
@data = []
|
542
|
+
end
|
543
|
+
|
544
|
+
def to_s
|
545
|
+
str = ''
|
546
|
+
self.each do |key, data|
|
547
|
+
str << "#{key}: #{data}\n"
|
548
|
+
end
|
549
|
+
str
|
550
|
+
end
|
551
|
+
|
552
|
+
def add(name, value)
|
553
|
+
value = SOAPNil.new if value.nil?
|
554
|
+
@array.push(name)
|
555
|
+
value.elename = value.elename.dup_name(name)
|
556
|
+
@data.push(value)
|
557
|
+
value.parent = self if value.respond_to?(:parent=)
|
558
|
+
value
|
559
|
+
end
|
560
|
+
|
561
|
+
def [](idx)
|
562
|
+
if idx.is_a?(Range)
|
563
|
+
@data[idx]
|
564
|
+
elsif idx.is_a?(Integer)
|
565
|
+
if (idx > @array.size)
|
566
|
+
raise ArrayIndexOutOfBoundsError.new('In ' << @type.name)
|
567
|
+
end
|
568
|
+
@data[idx]
|
569
|
+
else
|
570
|
+
if @array.include?(idx)
|
571
|
+
@data[@array.index(idx)]
|
572
|
+
else
|
573
|
+
nil
|
574
|
+
end
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
def []=(idx, data)
|
579
|
+
if @array.include?(idx)
|
580
|
+
data.parent = self if data.respond_to?(:parent=)
|
581
|
+
@data[@array.index(idx)] = data
|
582
|
+
else
|
583
|
+
add(idx, data)
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
587
|
+
def key?(name)
|
588
|
+
@array.include?(name)
|
589
|
+
end
|
590
|
+
|
591
|
+
def members
|
592
|
+
@array
|
593
|
+
end
|
594
|
+
|
595
|
+
def have_member
|
596
|
+
!@array.empty?
|
597
|
+
end
|
598
|
+
|
599
|
+
def to_obj
|
600
|
+
hash = {}
|
601
|
+
proptype = {}
|
602
|
+
each do |k, v|
|
603
|
+
value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
|
604
|
+
case proptype[k]
|
605
|
+
when :single
|
606
|
+
hash[k] = [hash[k], value]
|
607
|
+
proptype[k] = :multi
|
608
|
+
when :multi
|
609
|
+
hash[k] << value
|
610
|
+
else
|
611
|
+
hash[k] = value
|
612
|
+
proptype[k] = :single
|
613
|
+
end
|
614
|
+
end
|
615
|
+
hash
|
616
|
+
end
|
617
|
+
|
618
|
+
def each
|
619
|
+
idx = 0
|
620
|
+
while idx < @array.length
|
621
|
+
yield(@array[idx], @data[idx])
|
622
|
+
idx += 1
|
623
|
+
end
|
624
|
+
end
|
625
|
+
|
626
|
+
def replace
|
627
|
+
members.each do |member|
|
628
|
+
self[member] = yield(self[member])
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
def self.decode(elename, type)
|
633
|
+
s = SOAPStruct.new(type)
|
634
|
+
s.elename = elename
|
635
|
+
s
|
636
|
+
end
|
637
|
+
end
|
638
|
+
|
639
|
+
|
640
|
+
# SOAPElement is not typed so it is not derived from NSDBase.
|
641
|
+
class SOAPElement
|
642
|
+
include Enumerable
|
643
|
+
include SOAPCompoundtype
|
644
|
+
include SOAPNameAccessible
|
645
|
+
|
646
|
+
attr_accessor :type
|
647
|
+
# Text interface.
|
648
|
+
attr_accessor :text
|
649
|
+
alias data text
|
650
|
+
|
651
|
+
def initialize(elename, text = nil)
|
652
|
+
super()
|
653
|
+
if elename.nil?
|
654
|
+
elename = XSD::QName::EMPTY
|
655
|
+
else
|
656
|
+
elename = Mapping.to_qname(elename)
|
657
|
+
end
|
658
|
+
@encodingstyle = LiteralNamespace
|
659
|
+
@elename = elename
|
660
|
+
@type = nil
|
661
|
+
|
662
|
+
@array = []
|
663
|
+
@data = []
|
664
|
+
@text = text
|
665
|
+
end
|
666
|
+
|
667
|
+
def inspect
|
668
|
+
sprintf("#<%s:0x%x %s>", self.class.name, __id__, self.elename) +
|
669
|
+
(@text ? " #{@text.inspect}" : '') +
|
670
|
+
@data.collect { |ele| "\n#{ele.inspect}" }.join.gsub(/^/, ' ')
|
671
|
+
end
|
672
|
+
|
673
|
+
def set(value)
|
674
|
+
@text = value
|
675
|
+
end
|
676
|
+
|
677
|
+
# Element interfaces.
|
678
|
+
def add(value)
|
679
|
+
name = value.elename.name
|
680
|
+
@array.push(name)
|
681
|
+
@data.push(value)
|
682
|
+
value.parent = self if value.respond_to?(:parent=)
|
683
|
+
value
|
684
|
+
end
|
685
|
+
|
686
|
+
def [](idx)
|
687
|
+
if @array.include?(idx)
|
688
|
+
@data[@array.index(idx)]
|
689
|
+
else
|
690
|
+
nil
|
691
|
+
end
|
692
|
+
end
|
693
|
+
|
694
|
+
def []=(idx, data)
|
695
|
+
if @array.include?(idx)
|
696
|
+
data.parent = self if data.respond_to?(:parent=)
|
697
|
+
@data[@array.index(idx)] = data
|
698
|
+
else
|
699
|
+
add(data)
|
700
|
+
end
|
701
|
+
end
|
702
|
+
|
703
|
+
def key?(name)
|
704
|
+
@array.include?(name)
|
705
|
+
end
|
706
|
+
|
707
|
+
def members
|
708
|
+
@array
|
709
|
+
end
|
710
|
+
|
711
|
+
def have_member
|
712
|
+
!@array.empty?
|
713
|
+
end
|
714
|
+
|
715
|
+
def to_obj
|
716
|
+
if !have_member
|
717
|
+
@text
|
718
|
+
else
|
719
|
+
hash = {}
|
720
|
+
proptype = {}
|
721
|
+
each do |k, v|
|
722
|
+
value = v.respond_to?(:to_obj) ? v.to_obj : v.to_s
|
723
|
+
case proptype[k]
|
724
|
+
when :single
|
725
|
+
hash[k] = [hash[k], value]
|
726
|
+
proptype[k] = :multi
|
727
|
+
when :multi
|
728
|
+
hash[k] << value
|
729
|
+
else
|
730
|
+
hash[k] = value
|
731
|
+
proptype[k] = :single
|
732
|
+
end
|
733
|
+
end
|
734
|
+
hash
|
735
|
+
end
|
736
|
+
end
|
737
|
+
|
738
|
+
def each
|
739
|
+
idx = 0
|
740
|
+
while idx < @array.length
|
741
|
+
yield(@array[idx], @data[idx])
|
742
|
+
idx += 1
|
743
|
+
end
|
744
|
+
end
|
745
|
+
|
746
|
+
def self.decode(elename)
|
747
|
+
o = SOAPElement.new(elename)
|
748
|
+
o
|
749
|
+
end
|
750
|
+
|
751
|
+
def self.from_objs(objs)
|
752
|
+
objs.collect { |value|
|
753
|
+
if value.is_a?(SOAPElement)
|
754
|
+
value
|
755
|
+
else
|
756
|
+
k, v = value
|
757
|
+
ele = from_obj(v)
|
758
|
+
ele.elename = XSD::QName.new(nil, k)
|
759
|
+
ele
|
760
|
+
end
|
761
|
+
}
|
762
|
+
end
|
763
|
+
|
764
|
+
# when obj is a Hash or an Array:
|
765
|
+
# when key starts with "xmlattr_":
|
766
|
+
# value is added as an XML attribute with the key name however the
|
767
|
+
# "xmlattr_" is dropped from the name.
|
768
|
+
# when key starts with "xmlele_":
|
769
|
+
# value is added as an XML element with the key name however the
|
770
|
+
# "xmlele_" is dropped from the name.
|
771
|
+
# if else:
|
772
|
+
# value is added as an XML element with the key name.
|
773
|
+
def self.from_obj(obj, namespace = nil)
|
774
|
+
return obj if obj.is_a?(SOAPElement)
|
775
|
+
o = SOAPElement.new(nil)
|
776
|
+
case obj
|
777
|
+
when nil
|
778
|
+
o.text = nil
|
779
|
+
when Hash, Array
|
780
|
+
obj.each do |name, value|
|
781
|
+
addname, is_attr = parse_name(name, namespace)
|
782
|
+
if value.is_a?(Array)
|
783
|
+
value.each do |subvalue|
|
784
|
+
if is_attr
|
785
|
+
o.extraattr[addname] = subvalue
|
786
|
+
else
|
787
|
+
child = from_obj(subvalue, namespace)
|
788
|
+
child.elename = addname
|
789
|
+
o.add(child)
|
790
|
+
end
|
791
|
+
end
|
792
|
+
else
|
793
|
+
if is_attr
|
794
|
+
o.extraattr[addname] = value
|
795
|
+
else
|
796
|
+
child = from_obj(value, namespace)
|
797
|
+
child.elename = addname
|
798
|
+
o.add(child)
|
799
|
+
end
|
800
|
+
end
|
801
|
+
end
|
802
|
+
else
|
803
|
+
o.text = obj.to_s
|
804
|
+
end
|
805
|
+
o
|
806
|
+
end
|
807
|
+
|
808
|
+
def self.parse_name(obj, namespace = nil)
|
809
|
+
qname = to_qname(obj, namespace)
|
810
|
+
if /\Axmlele_/ =~ qname.name
|
811
|
+
qname = XSD::QName.new(qname.namespace, qname.name.sub(/\Axmlele_/, ''))
|
812
|
+
return qname, false
|
813
|
+
elsif /\Axmlattr_/ =~ qname.name
|
814
|
+
qname = XSD::QName.new(qname.namespace, qname.name.sub(/\Axmlattr_/, ''))
|
815
|
+
return qname, true
|
816
|
+
else
|
817
|
+
return qname, false
|
818
|
+
end
|
819
|
+
end
|
820
|
+
|
821
|
+
def self.to_qname(obj, namespace = nil)
|
822
|
+
if obj.is_a?(XSD::QName)
|
823
|
+
obj
|
824
|
+
elsif /\A(.+):([^:]+)\z/ =~ obj.to_s
|
825
|
+
XSD::QName.new($1, $2)
|
826
|
+
else
|
827
|
+
XSD::QName.new(namespace, obj.to_s)
|
828
|
+
end
|
829
|
+
end
|
830
|
+
end
|
831
|
+
|
832
|
+
|
833
|
+
class SOAPRawData < SOAPElement
|
834
|
+
def initialize(obj)
|
835
|
+
super(XSD::QName::EMPTY)
|
836
|
+
@obj = obj
|
837
|
+
end
|
838
|
+
|
839
|
+
def to_xmlpart
|
840
|
+
@obj.to_xmlpart
|
841
|
+
end
|
842
|
+
end
|
843
|
+
|
844
|
+
|
845
|
+
class SOAPREXMLElementWrap
|
846
|
+
def initialize(ele)
|
847
|
+
@ele = ele
|
848
|
+
end
|
849
|
+
|
850
|
+
def to_xmlpart
|
851
|
+
@ele.to_s
|
852
|
+
end
|
853
|
+
end
|
854
|
+
|
855
|
+
|
856
|
+
class SOAPArray < XSD::NSDBase
|
857
|
+
include SOAPCompoundtype
|
858
|
+
include Enumerable
|
859
|
+
|
860
|
+
public
|
861
|
+
|
862
|
+
attr_accessor :sparse
|
863
|
+
|
864
|
+
attr_reader :offset, :rank
|
865
|
+
attr_accessor :size, :size_fixed
|
866
|
+
attr_reader :arytype
|
867
|
+
|
868
|
+
def initialize(type = nil, rank = 1, arytype = nil)
|
869
|
+
super()
|
870
|
+
@type = type || ValueArrayName
|
871
|
+
@rank = rank
|
872
|
+
@data = Array.new
|
873
|
+
@sparse = false
|
874
|
+
@offset = Array.new(rank, 0)
|
875
|
+
@size = Array.new(rank, 0)
|
876
|
+
@size_fixed = false
|
877
|
+
@position = nil
|
878
|
+
@arytype = arytype
|
879
|
+
end
|
880
|
+
|
881
|
+
def offset=(var)
|
882
|
+
@offset = var
|
883
|
+
@sparse = true
|
884
|
+
end
|
885
|
+
|
886
|
+
def add(value)
|
887
|
+
self[*(@offset)] = value
|
888
|
+
end
|
889
|
+
|
890
|
+
def have_member
|
891
|
+
!@data.empty?
|
892
|
+
end
|
893
|
+
|
894
|
+
def [](*idxary)
|
895
|
+
if idxary.size != @rank
|
896
|
+
raise ArgumentError.new("given #{idxary.size} params does not match rank: #{@rank}")
|
897
|
+
end
|
898
|
+
retrieve(idxary)
|
899
|
+
end
|
900
|
+
|
901
|
+
def []=(*idxary)
|
902
|
+
value = idxary.slice!(-1)
|
903
|
+
if idxary.size != @rank
|
904
|
+
raise ArgumentError.new("given #{idxary.size} params(#{idxary}) does not match rank: #{@rank}")
|
905
|
+
end
|
906
|
+
idx = 0
|
907
|
+
while idx < idxary.size
|
908
|
+
if idxary[idx] + 1 > @size[idx]
|
909
|
+
@size[idx] = idxary[idx] + 1
|
910
|
+
end
|
911
|
+
idx += 1
|
912
|
+
end
|
913
|
+
data = retrieve(idxary[0, idxary.size - 1])
|
914
|
+
data[idxary.last] = value
|
915
|
+
if value.is_a?(SOAPType)
|
916
|
+
value.elename = ITEM_NAME
|
917
|
+
# Sync type
|
918
|
+
unless @type.name
|
919
|
+
@type = XSD::QName.new(value.type.namespace,
|
920
|
+
SOAPArray.create_arytype(value.type.name, @rank))
|
921
|
+
end
|
922
|
+
value.type ||= @type
|
923
|
+
end
|
924
|
+
@offset = idxary
|
925
|
+
value.parent = self if value.respond_to?(:parent=)
|
926
|
+
offsetnext
|
927
|
+
end
|
928
|
+
|
929
|
+
def each
|
930
|
+
@data.each do |data|
|
931
|
+
yield(data)
|
932
|
+
end
|
933
|
+
end
|
934
|
+
|
935
|
+
def to_a
|
936
|
+
@data.dup
|
937
|
+
end
|
938
|
+
|
939
|
+
def replace
|
940
|
+
@data = deep_map(@data) do |ele|
|
941
|
+
yield(ele)
|
942
|
+
end
|
943
|
+
end
|
944
|
+
|
945
|
+
def deep_map(ary, &block)
|
946
|
+
ary.collect do |ele|
|
947
|
+
if ele.is_a?(Array)
|
948
|
+
deep_map(ele, &block)
|
949
|
+
else
|
950
|
+
new_obj = block.call(ele)
|
951
|
+
new_obj.elename = ITEM_NAME
|
952
|
+
new_obj
|
953
|
+
end
|
954
|
+
end
|
955
|
+
end
|
956
|
+
|
957
|
+
def include?(var)
|
958
|
+
traverse_data(@data) do |v, *rank|
|
959
|
+
if v.is_a?(SOAPBasetype) && v.data == var
|
960
|
+
return true
|
961
|
+
end
|
962
|
+
end
|
963
|
+
false
|
964
|
+
end
|
965
|
+
|
966
|
+
def traverse
|
967
|
+
traverse_data(@data) do |v, *rank|
|
968
|
+
unless @sparse
|
969
|
+
yield(v)
|
970
|
+
else
|
971
|
+
yield(v, *rank) if v && !v.is_a?(SOAPNil)
|
972
|
+
end
|
973
|
+
end
|
974
|
+
end
|
975
|
+
|
976
|
+
def soap2array(ary)
|
977
|
+
traverse_data(@data) do |v, *position|
|
978
|
+
iteary = ary
|
979
|
+
rank = 1
|
980
|
+
while rank < position.size
|
981
|
+
idx = position[rank - 1]
|
982
|
+
if iteary[idx].nil?
|
983
|
+
iteary = iteary[idx] = Array.new
|
984
|
+
else
|
985
|
+
iteary = iteary[idx]
|
986
|
+
end
|
987
|
+
rank += 1
|
988
|
+
end
|
989
|
+
if block_given?
|
990
|
+
iteary[position.last] = yield(v)
|
991
|
+
else
|
992
|
+
iteary[position.last] = v
|
993
|
+
end
|
994
|
+
end
|
995
|
+
end
|
996
|
+
|
997
|
+
def position
|
998
|
+
@position
|
999
|
+
end
|
1000
|
+
|
1001
|
+
private
|
1002
|
+
|
1003
|
+
ITEM_NAME = XSD::QName.new(nil, 'item')
|
1004
|
+
|
1005
|
+
def retrieve(idxary)
|
1006
|
+
data = @data
|
1007
|
+
rank = 1
|
1008
|
+
while rank <= idxary.size
|
1009
|
+
idx = idxary[rank - 1]
|
1010
|
+
if data[idx].nil?
|
1011
|
+
data = data[idx] = Array.new
|
1012
|
+
else
|
1013
|
+
data = data[idx]
|
1014
|
+
end
|
1015
|
+
rank += 1
|
1016
|
+
end
|
1017
|
+
data
|
1018
|
+
end
|
1019
|
+
|
1020
|
+
def traverse_data(data, rank = 1)
|
1021
|
+
idx = 0
|
1022
|
+
while idx < ranksize(rank)
|
1023
|
+
if rank < @rank and data[idx]
|
1024
|
+
traverse_data(data[idx], rank + 1) do |*v|
|
1025
|
+
v[1, 0] = idx
|
1026
|
+
yield(*v)
|
1027
|
+
end
|
1028
|
+
else
|
1029
|
+
yield(data[idx], idx)
|
1030
|
+
end
|
1031
|
+
idx += 1
|
1032
|
+
end
|
1033
|
+
end
|
1034
|
+
|
1035
|
+
def ranksize(rank)
|
1036
|
+
@size[rank - 1]
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
def offsetnext
|
1040
|
+
move = false
|
1041
|
+
idx = @offset.size - 1
|
1042
|
+
while !move && idx >= 0
|
1043
|
+
@offset[idx] += 1
|
1044
|
+
if @size_fixed
|
1045
|
+
if @offset[idx] < @size[idx]
|
1046
|
+
move = true
|
1047
|
+
else
|
1048
|
+
@offset[idx] = 0
|
1049
|
+
idx -= 1
|
1050
|
+
end
|
1051
|
+
else
|
1052
|
+
move = true
|
1053
|
+
end
|
1054
|
+
end
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
def self.decode(elename, type, arytype)
|
1058
|
+
typestr, nofary = parse_type(arytype.name)
|
1059
|
+
rank = nofary.count(',') + 1
|
1060
|
+
plain_arytype = XSD::QName.new(arytype.namespace, typestr)
|
1061
|
+
o = SOAPArray.new(type, rank, plain_arytype)
|
1062
|
+
size = []
|
1063
|
+
nofary.split(',').each do |s|
|
1064
|
+
if s.empty?
|
1065
|
+
size.clear
|
1066
|
+
break
|
1067
|
+
else
|
1068
|
+
size << s.to_i
|
1069
|
+
end
|
1070
|
+
end
|
1071
|
+
unless size.empty?
|
1072
|
+
o.size = size
|
1073
|
+
o.size_fixed = true
|
1074
|
+
end
|
1075
|
+
o.elename = elename
|
1076
|
+
o
|
1077
|
+
end
|
1078
|
+
|
1079
|
+
def self.create_arytype(typename, rank)
|
1080
|
+
"#{typename}[" << ',' * (rank - 1) << ']'
|
1081
|
+
end
|
1082
|
+
|
1083
|
+
TypeParseRegexp = Regexp.new('^(.+)\[([\d,]*)\]$', nil, 'n')
|
1084
|
+
|
1085
|
+
def self.parse_type(string)
|
1086
|
+
TypeParseRegexp =~ string
|
1087
|
+
return $1, $2
|
1088
|
+
end
|
1089
|
+
end
|
1090
|
+
|
1091
|
+
|
1092
|
+
require 'soap/mapping/typeMap'
|
1093
|
+
|
1094
|
+
|
1095
|
+
end
|