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
@@ -0,0 +1,389 @@
|
|
1
|
+
# encoding: ASCII-8BIT
|
2
|
+
# SOAP4R - Mapping factory.
|
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
|
+
module Mapping
|
12
|
+
|
13
|
+
|
14
|
+
class Factory
|
15
|
+
include TraverseSupport
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
# nothing to do
|
19
|
+
end
|
20
|
+
|
21
|
+
def obj2soap(soap_class, obj, info, map)
|
22
|
+
raise NotImplementError.new
|
23
|
+
# return soap_obj
|
24
|
+
end
|
25
|
+
|
26
|
+
def soap2obj(obj_class, node, info, map)
|
27
|
+
raise NotImplementError.new
|
28
|
+
# return convert_succeeded_or_not, obj
|
29
|
+
end
|
30
|
+
|
31
|
+
def setiv2obj(obj, node, map)
|
32
|
+
return if node.nil?
|
33
|
+
if obj.is_a?(Array)
|
34
|
+
setiv2ary(obj, node, map)
|
35
|
+
else
|
36
|
+
setiv2struct(obj, node, map)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def setiv2soap(node, obj, map)
|
41
|
+
if obj.class.class_variables.include?('@@schema_element')
|
42
|
+
setdefinediv2soap(node, obj, map)
|
43
|
+
else
|
44
|
+
# should we sort instance_variables? how?
|
45
|
+
obj.instance_variables.each do |var|
|
46
|
+
name = var.to_s.sub(/^@/, '')
|
47
|
+
elename = Mapping.name2elename(name)
|
48
|
+
node.add(elename,
|
49
|
+
Mapping._obj2soap(obj.instance_variable_get(var), map))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def setdefinediv2soap(ele, obj, map)
|
57
|
+
definition = Mapping.schema_definition_classdef(obj.class)
|
58
|
+
definition.elements.each do |eledef|
|
59
|
+
child = Mapping.get_attribute(obj, eledef.varname)
|
60
|
+
# extract method
|
61
|
+
if child.nil?
|
62
|
+
value = SOAPNil.new
|
63
|
+
elsif child.is_a?(XSD::NSDBase)
|
64
|
+
value = child
|
65
|
+
else
|
66
|
+
klass = Mapping.class_from_name(eledef.type)
|
67
|
+
if klass && klass.include?(::SOAP::SOAPBasetype)
|
68
|
+
value = klass.new(child)
|
69
|
+
else
|
70
|
+
# should check klass matches an actual object?
|
71
|
+
value = Mapping._obj2soap(child, map)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
ele.add(eledef.elename.name, value)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def setiv2ary(obj, node, map)
|
79
|
+
node.each do |name, value|
|
80
|
+
Array.instance_method(:<<).bind(obj).call(Mapping._soap2obj(value, map))
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def setiv2struct(obj, node, map)
|
85
|
+
vars = {}
|
86
|
+
node.each do |name, value|
|
87
|
+
vars[Mapping.elename2name(name)] = Mapping._soap2obj(value, map)
|
88
|
+
end
|
89
|
+
Mapping.set_attributes(obj, vars)
|
90
|
+
end
|
91
|
+
|
92
|
+
def anonymous_class?(obj)
|
93
|
+
name = obj.class.name
|
94
|
+
name.nil? or name.empty? # 1.8 returns ""
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
class StringFactory_ < Factory
|
99
|
+
def initialize(allow_original_mapping = false)
|
100
|
+
super()
|
101
|
+
@allow_original_mapping = allow_original_mapping
|
102
|
+
end
|
103
|
+
|
104
|
+
def obj2soap(soap_class, obj, info, map)
|
105
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
106
|
+
return nil
|
107
|
+
end
|
108
|
+
begin
|
109
|
+
encoded = XSD::Charset.encoding_conv(obj, Mapping.external_ces,
|
110
|
+
XSD::Charset.encoding)
|
111
|
+
soap_obj = soap_class.new(encoded)
|
112
|
+
rescue XSD::ValueSpaceError
|
113
|
+
return nil
|
114
|
+
end
|
115
|
+
mark_marshalled_obj(obj, soap_obj)
|
116
|
+
soap_obj
|
117
|
+
end
|
118
|
+
|
119
|
+
def soap2obj(obj_class, node, info, map)
|
120
|
+
obj = Mapping.create_empty_object(obj_class)
|
121
|
+
decoded = XSD::Charset.encoding_conv(node.data, XSD::Charset.encoding,
|
122
|
+
Mapping.external_ces)
|
123
|
+
obj.replace(decoded)
|
124
|
+
mark_unmarshalled_obj(node, obj)
|
125
|
+
return true, obj
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
class FixnumFactory_ < Factory
|
130
|
+
def obj2soap(soap_class, obj, info, map)
|
131
|
+
soap_obj = nil
|
132
|
+
begin
|
133
|
+
soap_obj = soap_class.new(obj)
|
134
|
+
rescue XSD::ValueSpaceError
|
135
|
+
return nil
|
136
|
+
end
|
137
|
+
soap_obj
|
138
|
+
end
|
139
|
+
|
140
|
+
def soap2obj(obj_class, node, info, map)
|
141
|
+
obj = node.data
|
142
|
+
return true, obj
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
class BasetypeFactory_ < Factory
|
147
|
+
def initialize(allow_original_mapping = false)
|
148
|
+
super()
|
149
|
+
@allow_original_mapping = allow_original_mapping
|
150
|
+
end
|
151
|
+
|
152
|
+
def obj2soap(soap_class, obj, info, map)
|
153
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
154
|
+
return nil
|
155
|
+
end
|
156
|
+
soap_obj = nil
|
157
|
+
begin
|
158
|
+
soap_obj = soap_class.new(obj)
|
159
|
+
rescue XSD::ValueSpaceError
|
160
|
+
return nil
|
161
|
+
end
|
162
|
+
if @allow_original_mapping
|
163
|
+
# Basetype except String should not be multiref-ed in SOAP/1.1.
|
164
|
+
mark_marshalled_obj(obj, soap_obj)
|
165
|
+
end
|
166
|
+
soap_obj
|
167
|
+
end
|
168
|
+
|
169
|
+
def soap2obj(obj_class, node, info, map)
|
170
|
+
obj = node.data
|
171
|
+
mark_unmarshalled_obj(node, obj)
|
172
|
+
return true, obj
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
class DateTimeFactory_ < Factory
|
177
|
+
def initialize(allow_original_mapping = false)
|
178
|
+
super()
|
179
|
+
@allow_original_mapping = allow_original_mapping
|
180
|
+
end
|
181
|
+
|
182
|
+
def obj2soap(soap_class, obj, info, map)
|
183
|
+
if !@allow_original_mapping and
|
184
|
+
Time === obj and !obj.instance_variables.empty?
|
185
|
+
return nil
|
186
|
+
end
|
187
|
+
soap_obj = nil
|
188
|
+
begin
|
189
|
+
soap_obj = soap_class.new(obj)
|
190
|
+
rescue XSD::ValueSpaceError
|
191
|
+
return nil
|
192
|
+
end
|
193
|
+
mark_marshalled_obj(obj, soap_obj)
|
194
|
+
soap_obj
|
195
|
+
end
|
196
|
+
|
197
|
+
def soap2obj(obj_class, node, info, map)
|
198
|
+
if node.respond_to?(:to_obj)
|
199
|
+
obj = node.to_obj(obj_class)
|
200
|
+
return false if obj.nil?
|
201
|
+
mark_unmarshalled_obj(node, obj)
|
202
|
+
return true, obj
|
203
|
+
else
|
204
|
+
return false
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
class Base64Factory_ < Factory
|
210
|
+
def obj2soap(soap_class, obj, info, map)
|
211
|
+
return nil unless obj.instance_variables.empty?
|
212
|
+
soap_obj = soap_class.new(obj)
|
213
|
+
mark_marshalled_obj(obj, soap_obj) if soap_obj
|
214
|
+
soap_obj
|
215
|
+
end
|
216
|
+
|
217
|
+
def soap2obj(obj_class, node, info, map)
|
218
|
+
obj = node.string
|
219
|
+
mark_unmarshalled_obj(node, obj)
|
220
|
+
return true, obj
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
class URIFactory_ < Factory
|
225
|
+
def obj2soap(soap_class, obj, info, map)
|
226
|
+
soap_obj = soap_class.new(obj)
|
227
|
+
mark_marshalled_obj(obj, soap_obj) if soap_obj
|
228
|
+
soap_obj
|
229
|
+
end
|
230
|
+
|
231
|
+
def soap2obj(obj_class, node, info, map)
|
232
|
+
obj = node.data
|
233
|
+
mark_unmarshalled_obj(node, obj)
|
234
|
+
return true, obj
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
class ArrayFactory_ < Factory
|
239
|
+
def initialize(allow_original_mapping = false)
|
240
|
+
super()
|
241
|
+
@allow_original_mapping = allow_original_mapping
|
242
|
+
end
|
243
|
+
|
244
|
+
# [[1], [2]] is converted to Array of Array, not 2-D Array.
|
245
|
+
# To create M-D Array, you must call Mapping.ary2md.
|
246
|
+
def obj2soap(soap_class, obj, info, map)
|
247
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
248
|
+
return nil
|
249
|
+
end
|
250
|
+
arytype = Mapping.obj2element(obj)
|
251
|
+
if arytype.name
|
252
|
+
arytype.namespace ||= RubyTypeNamespace
|
253
|
+
else
|
254
|
+
arytype = XSD::AnyTypeName
|
255
|
+
end
|
256
|
+
soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
|
257
|
+
mark_marshalled_obj(obj, soap_obj)
|
258
|
+
obj.each do |item|
|
259
|
+
soap_obj.add(Mapping._obj2soap(item, map))
|
260
|
+
end
|
261
|
+
soap_obj
|
262
|
+
end
|
263
|
+
|
264
|
+
def soap2obj(obj_class, node, info, map)
|
265
|
+
obj = Mapping.create_empty_object(obj_class)
|
266
|
+
mark_unmarshalled_obj(node, obj)
|
267
|
+
node.soap2array(obj) do |elem|
|
268
|
+
elem ? Mapping._soap2obj(elem, map) : nil
|
269
|
+
end
|
270
|
+
return true, obj
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
class TypedArrayFactory_ < Factory
|
275
|
+
def initialize(allow_original_mapping = false)
|
276
|
+
super()
|
277
|
+
@allow_original_mapping = allow_original_mapping
|
278
|
+
end
|
279
|
+
|
280
|
+
def obj2soap(soap_class, obj, info, map)
|
281
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
282
|
+
return nil
|
283
|
+
end
|
284
|
+
arytype = info[:type] || info[0]
|
285
|
+
soap_obj = SOAPArray.new(ValueArrayName, 1, arytype)
|
286
|
+
mark_marshalled_obj(obj, soap_obj)
|
287
|
+
obj.each do |var|
|
288
|
+
soap_obj.add(Mapping._obj2soap(var, map))
|
289
|
+
end
|
290
|
+
soap_obj
|
291
|
+
end
|
292
|
+
|
293
|
+
def soap2obj(obj_class, node, info, map)
|
294
|
+
if node.rank > 1
|
295
|
+
return false
|
296
|
+
end
|
297
|
+
arytype = info[:type] || info[0]
|
298
|
+
unless node.arytype == arytype
|
299
|
+
return false
|
300
|
+
end
|
301
|
+
obj = Mapping.create_empty_object(obj_class)
|
302
|
+
mark_unmarshalled_obj(node, obj)
|
303
|
+
node.soap2array(obj) do |elem|
|
304
|
+
elem ? Mapping._soap2obj(elem, map) : nil
|
305
|
+
end
|
306
|
+
return true, obj
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
class TypedStructFactory_ < Factory
|
311
|
+
def obj2soap(soap_class, obj, info, map)
|
312
|
+
type = info[:type] || info[0]
|
313
|
+
soap_obj = soap_class.new(type)
|
314
|
+
mark_marshalled_obj(obj, soap_obj)
|
315
|
+
if obj.class <= SOAP::Marshallable
|
316
|
+
setiv2soap(soap_obj, obj, map)
|
317
|
+
else
|
318
|
+
# allow to serialize an instance of unmarked class
|
319
|
+
setiv2soap(soap_obj, obj, map)
|
320
|
+
end
|
321
|
+
soap_obj
|
322
|
+
end
|
323
|
+
|
324
|
+
def soap2obj(obj_class, node, info, map)
|
325
|
+
type = info[:type] || info[0]
|
326
|
+
unless node.type == type
|
327
|
+
return false
|
328
|
+
end
|
329
|
+
obj = Mapping.create_empty_object(obj_class)
|
330
|
+
mark_unmarshalled_obj(node, obj)
|
331
|
+
setiv2obj(obj, node, map)
|
332
|
+
return true, obj
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
MapQName = XSD::QName.new(ApacheSOAPTypeNamespace, 'Map')
|
337
|
+
class HashFactory_ < Factory
|
338
|
+
def initialize(allow_original_mapping = false)
|
339
|
+
super()
|
340
|
+
@allow_original_mapping = allow_original_mapping
|
341
|
+
end
|
342
|
+
|
343
|
+
def obj2soap(soap_class, obj, info, map)
|
344
|
+
if !@allow_original_mapping and !obj.instance_variables.empty?
|
345
|
+
return nil
|
346
|
+
end
|
347
|
+
if !obj.default.nil? or
|
348
|
+
(obj.respond_to?(:default_proc) and obj.default_proc)
|
349
|
+
return nil
|
350
|
+
end
|
351
|
+
soap_obj = SOAPStruct.new(MapQName)
|
352
|
+
mark_marshalled_obj(obj, soap_obj)
|
353
|
+
obj.each do |key, value|
|
354
|
+
elem = SOAPStruct.new
|
355
|
+
elem.add("key", Mapping._obj2soap(key, map))
|
356
|
+
elem.add("value", Mapping._obj2soap(value, map))
|
357
|
+
# ApacheAxis allows only 'item' here.
|
358
|
+
soap_obj.add("item", elem)
|
359
|
+
end
|
360
|
+
soap_obj
|
361
|
+
end
|
362
|
+
|
363
|
+
def soap2obj(obj_class, node, info, map)
|
364
|
+
unless node.type == MapQName
|
365
|
+
return false
|
366
|
+
end
|
367
|
+
if node.class == SOAPStruct and node.key?('default')
|
368
|
+
return false
|
369
|
+
end
|
370
|
+
obj = Mapping.create_empty_object(obj_class)
|
371
|
+
mark_unmarshalled_obj(node, obj)
|
372
|
+
if node.class == SOAPStruct
|
373
|
+
node.each do |key, value|
|
374
|
+
obj[Mapping._soap2obj(value['key'], map)] =
|
375
|
+
Mapping._soap2obj(value['value'], map)
|
376
|
+
end
|
377
|
+
else
|
378
|
+
node.each do |value|
|
379
|
+
obj[Mapping._soap2obj(value['key'], map)] =
|
380
|
+
Mapping._soap2obj(value['value'], map)
|
381
|
+
end
|
382
|
+
end
|
383
|
+
return true, obj
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
|
388
|
+
end
|
389
|
+
end
|
@@ -0,0 +1,392 @@
|
|
1
|
+
# encoding: ASCII-8BIT
|
2
|
+
# SOAP4R - literal mapping registry.
|
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/mapping'
|
12
|
+
require 'soap/mapping/typeMap'
|
13
|
+
require 'xsd/codegen/gensupport'
|
14
|
+
require 'xsd/namedelements'
|
15
|
+
|
16
|
+
|
17
|
+
module SOAP
|
18
|
+
module Mapping
|
19
|
+
|
20
|
+
|
21
|
+
class LiteralRegistry
|
22
|
+
include RegistrySupport
|
23
|
+
|
24
|
+
attr_accessor :excn_handler_obj2soap
|
25
|
+
attr_accessor :excn_handler_soap2obj
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
super()
|
29
|
+
@excn_handler_obj2soap = nil
|
30
|
+
@excn_handler_soap2obj = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def obj2soap(obj, qname, obj_class = nil)
|
34
|
+
soap_obj = nil
|
35
|
+
if obj.is_a?(SOAPElement)
|
36
|
+
soap_obj = obj
|
37
|
+
else
|
38
|
+
soap_obj = any2soap(obj, qname, obj_class)
|
39
|
+
end
|
40
|
+
return soap_obj if soap_obj
|
41
|
+
if @excn_handler_obj2soap
|
42
|
+
soap_obj = @excn_handler_obj2soap.call(obj) { |yield_obj|
|
43
|
+
Mapping.obj2soap(yield_obj, nil, nil, MAPPING_OPT)
|
44
|
+
}
|
45
|
+
return soap_obj if soap_obj
|
46
|
+
end
|
47
|
+
raise MappingError.new("cannot map #{obj.class.name} as #{qname}")
|
48
|
+
end
|
49
|
+
|
50
|
+
# node should be a SOAPElement
|
51
|
+
def soap2obj(node, obj_class = nil)
|
52
|
+
cause = nil
|
53
|
+
begin
|
54
|
+
return any2obj(node, obj_class)
|
55
|
+
rescue MappingError
|
56
|
+
cause = $!
|
57
|
+
end
|
58
|
+
if @excn_handler_soap2obj
|
59
|
+
begin
|
60
|
+
return @excn_handler_soap2obj.call(node) { |yield_node|
|
61
|
+
Mapping.soap2obj(yield_node, nil, nil, MAPPING_OPT)
|
62
|
+
}
|
63
|
+
rescue Exception
|
64
|
+
end
|
65
|
+
end
|
66
|
+
raise MappingError.new("cannot map #{node.elename.name}/#{node.type.name} to Ruby object", cause)
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
MAPPING_OPT = { :no_reference => true }
|
72
|
+
|
73
|
+
def definedobj2soap(obj, definition)
|
74
|
+
obj2soap(obj, definition.elename, definition.mapped_class)
|
75
|
+
end
|
76
|
+
|
77
|
+
def any2soap(obj, qname, obj_class)
|
78
|
+
ele = nil
|
79
|
+
if obj.is_a?(SOAP::Mapping::Object)
|
80
|
+
return mappingobj2soap(obj, qname)
|
81
|
+
end
|
82
|
+
class_definition = schema_definition_from_class(obj.class)
|
83
|
+
if class_definition.nil? and obj_class
|
84
|
+
class_definition = schema_definition_from_class(obj_class)
|
85
|
+
end
|
86
|
+
elename_definition = schema_definition_from_elename(qname)
|
87
|
+
if !class_definition and !elename_definition
|
88
|
+
# no definition found
|
89
|
+
return anyobj2soap(obj, qname)
|
90
|
+
end
|
91
|
+
if !class_definition or !elename_definition
|
92
|
+
# use found one
|
93
|
+
return stubobj2soap(obj, qname, class_definition || elename_definition)
|
94
|
+
end
|
95
|
+
# found both:
|
96
|
+
if class_definition.class_for == elename_definition.class_for
|
97
|
+
# if two definitions are for the same class, give qname a priority.
|
98
|
+
return stubobj2soap(obj, qname, elename_definition)
|
99
|
+
end
|
100
|
+
# it should be a derived class
|
101
|
+
return stubobj2soap(obj, qname, class_definition)
|
102
|
+
end
|
103
|
+
|
104
|
+
def anyobj2soap(obj, qname)
|
105
|
+
ele = nil
|
106
|
+
case obj
|
107
|
+
when Hash
|
108
|
+
ele = SOAPElement.from_obj(obj, nil)
|
109
|
+
ele.elename = qname
|
110
|
+
when Array
|
111
|
+
# treat as a list of simpletype
|
112
|
+
ele = SOAPElement.new(qname, obj.join(" "))
|
113
|
+
when XSD::QName
|
114
|
+
ele = SOAPElement.new(qname)
|
115
|
+
ele.text = obj
|
116
|
+
else
|
117
|
+
# expected to be a basetype or an anyType.
|
118
|
+
# SOAPStruct, etc. is used instead of SOAPElement.
|
119
|
+
begin
|
120
|
+
ele = Mapping.obj2soap(obj, nil, nil, MAPPING_OPT)
|
121
|
+
ele.elename = qname
|
122
|
+
rescue MappingError
|
123
|
+
ele = SOAPElement.new(qname, obj.to_s)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
add_attributes2soap(obj, ele)
|
127
|
+
ele
|
128
|
+
end
|
129
|
+
|
130
|
+
def stubobj2soap(obj, qname, definition)
|
131
|
+
if obj.nil?
|
132
|
+
ele = SOAPNil.new
|
133
|
+
ele.elename = qname
|
134
|
+
elsif obj.is_a?(::String)
|
135
|
+
ele = SOAPElement.new(qname, obj)
|
136
|
+
else
|
137
|
+
ele = SOAPElement.new(qname)
|
138
|
+
end
|
139
|
+
ele.qualified = definition.qualified
|
140
|
+
if definition.type
|
141
|
+
ele.type = definition.type
|
142
|
+
if definition.basetype or Mapping.root_type_hint
|
143
|
+
Mapping.reset_root_type_hint
|
144
|
+
ele.force_typed = true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
if qname.nil? and definition.elename
|
148
|
+
ele.elename = definition.elename
|
149
|
+
end
|
150
|
+
return ele if obj.nil?
|
151
|
+
stubobj2soap_elements(obj, ele, definition.elements)
|
152
|
+
add_definedattributes2soap(obj, ele, definition)
|
153
|
+
ele
|
154
|
+
end
|
155
|
+
|
156
|
+
def stubobj2soap_elements(obj, ele, definition, is_choice = false)
|
157
|
+
added = false
|
158
|
+
case definition
|
159
|
+
when SchemaSequenceDefinition, SchemaEmptyDefinition
|
160
|
+
definition.each do |eledef|
|
161
|
+
ele_added = stubobj2soap_elements(obj, ele, eledef, is_choice)
|
162
|
+
added = true if ele_added
|
163
|
+
end
|
164
|
+
when SchemaChoiceDefinition
|
165
|
+
definition.each do |eledef|
|
166
|
+
added = stubobj2soap_elements(obj, ele, eledef, true)
|
167
|
+
break if added
|
168
|
+
end
|
169
|
+
else
|
170
|
+
added = true
|
171
|
+
if definition.as_any?
|
172
|
+
any = Mapping.get_attributes_for_any(obj)
|
173
|
+
SOAPElement.from_objs(any).each do |child|
|
174
|
+
ele.add(child)
|
175
|
+
end
|
176
|
+
elsif obj.respond_to?(:each) and definition.as_array?
|
177
|
+
obj.each do |item|
|
178
|
+
ele.add(definedobj2soap(item, definition))
|
179
|
+
end
|
180
|
+
else
|
181
|
+
child = Mapping.get_attribute(obj, definition.varname)
|
182
|
+
if child.nil? and (is_choice or definition.minoccurs == 0)
|
183
|
+
added = false
|
184
|
+
else
|
185
|
+
if child.respond_to?(:each) and definition.as_array?
|
186
|
+
if child.empty?
|
187
|
+
added = false
|
188
|
+
else
|
189
|
+
child.each do |item|
|
190
|
+
ele.add(definedobj2soap(item, definition))
|
191
|
+
end
|
192
|
+
end
|
193
|
+
else
|
194
|
+
ele.add(definedobj2soap(child, definition))
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
added
|
200
|
+
end
|
201
|
+
|
202
|
+
def mappingobj2soap(obj, qname)
|
203
|
+
ele = SOAPElement.new(qname)
|
204
|
+
obj.__xmlele.each do |key, value|
|
205
|
+
if value.is_a?(::Array)
|
206
|
+
value.each do |item|
|
207
|
+
ele.add(obj2soap(item, key))
|
208
|
+
end
|
209
|
+
else
|
210
|
+
ele.add(obj2soap(value, key))
|
211
|
+
end
|
212
|
+
end
|
213
|
+
obj.__xmlattr.each do |key, value|
|
214
|
+
ele.extraattr[key] = value
|
215
|
+
end
|
216
|
+
ele
|
217
|
+
end
|
218
|
+
|
219
|
+
def any2obj(node, obj_class = nil)
|
220
|
+
is_compound = node.is_a?(::SOAP::SOAPCompoundtype)
|
221
|
+
# trust xsi:type first
|
222
|
+
if is_compound and node.type
|
223
|
+
definition = schema_definition_from_type(node.type)
|
224
|
+
end
|
225
|
+
# element name next
|
226
|
+
definition ||= schema_definition_from_elename(node.elename)
|
227
|
+
# class defined in parent type last
|
228
|
+
if obj_class
|
229
|
+
definition ||= schema_definition_from_class(obj_class)
|
230
|
+
end
|
231
|
+
if definition
|
232
|
+
obj_class = definition.class_for
|
233
|
+
end
|
234
|
+
if is_compound
|
235
|
+
if definition
|
236
|
+
return elesoap2stubobj(node, obj_class, definition)
|
237
|
+
elsif node.is_a?(::SOAP::SOAPNameAccessible)
|
238
|
+
return elesoap2plainobj(node)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
obj = Mapping.soap2obj(node, nil, obj_class, MAPPING_OPT)
|
242
|
+
add_attributes2obj(node, obj)
|
243
|
+
obj
|
244
|
+
end
|
245
|
+
|
246
|
+
def elesoap2stubobj(node, obj_class, definition)
|
247
|
+
obj = nil
|
248
|
+
if obj_class == ::String
|
249
|
+
obj = node.text
|
250
|
+
elsif obj_class < ::String and node.respond_to?(:text)
|
251
|
+
obj = obj_class.new(node.text)
|
252
|
+
else
|
253
|
+
obj = Mapping.create_empty_object(obj_class)
|
254
|
+
add_elesoap2stubobj(node, obj, definition)
|
255
|
+
end
|
256
|
+
add_attributes2stubobj(node, obj, definition)
|
257
|
+
obj
|
258
|
+
end
|
259
|
+
|
260
|
+
def elesoap2plainobj(node)
|
261
|
+
obj = nil
|
262
|
+
if !node.have_member
|
263
|
+
obj = base2obj(node, ::SOAP::SOAPString)
|
264
|
+
else
|
265
|
+
obj = anytype2obj(node)
|
266
|
+
add_elesoap2plainobj(node, obj)
|
267
|
+
end
|
268
|
+
add_attributes2obj(node, obj)
|
269
|
+
obj
|
270
|
+
end
|
271
|
+
|
272
|
+
def anytype2obj(node)
|
273
|
+
if node.is_a?(::SOAP::SOAPBasetype)
|
274
|
+
return node.data
|
275
|
+
end
|
276
|
+
::SOAP::Mapping::Object.new
|
277
|
+
end
|
278
|
+
|
279
|
+
def add_elesoap2stubobj(node, obj, definition)
|
280
|
+
vars = {}
|
281
|
+
node.each do |name, value|
|
282
|
+
item = definition.elements.find_element(value.elename)
|
283
|
+
if item
|
284
|
+
child = elesoapchild2obj(value, item)
|
285
|
+
else
|
286
|
+
# unknown element is treated as anyType.
|
287
|
+
child = any2obj(value)
|
288
|
+
end
|
289
|
+
if item and item.as_array?
|
290
|
+
(vars[name] ||= []) << child
|
291
|
+
elsif vars.key?(name)
|
292
|
+
vars[name] = [vars[name], child].flatten
|
293
|
+
else
|
294
|
+
vars[name] = child
|
295
|
+
end
|
296
|
+
end
|
297
|
+
if obj.is_a?(::Array) and is_stubobj_elements_for_array(vars)
|
298
|
+
Array.instance_method(:replace).bind(obj).call(vars.values[0])
|
299
|
+
else
|
300
|
+
Mapping.set_attributes(obj, vars)
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
def elesoapchild2obj(value, eledef)
|
305
|
+
if eledef.mapped_class
|
306
|
+
if eledef.mapped_class.include?(::SOAP::SOAPBasetype)
|
307
|
+
base2obj(value, eledef.mapped_class)
|
308
|
+
else
|
309
|
+
any2obj(value, eledef.mapped_class)
|
310
|
+
end
|
311
|
+
else
|
312
|
+
child_definition = schema_definition_from_elename(eledef.elename)
|
313
|
+
if child_definition
|
314
|
+
any2obj(value, child_definition.class_for)
|
315
|
+
else
|
316
|
+
# untyped element is treated as anyType.
|
317
|
+
any2obj(value)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
def add_attributes2stubobj(node, obj, definition)
|
323
|
+
return if obj.nil? or node.extraattr.empty?
|
324
|
+
if attributes = definition.attributes
|
325
|
+
define_xmlattr(obj)
|
326
|
+
attributes.each do |qname, class_name|
|
327
|
+
child = node.extraattr[qname]
|
328
|
+
next if child.nil?
|
329
|
+
if class_name
|
330
|
+
klass = Mapping.class_from_name(class_name)
|
331
|
+
if klass.include?(::SOAP::SOAPBasetype)
|
332
|
+
child = klass.to_data(child)
|
333
|
+
end
|
334
|
+
end
|
335
|
+
obj.__xmlattr[qname] = child
|
336
|
+
define_xmlattr_accessor(obj, qname)
|
337
|
+
end
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
341
|
+
def add_elesoap2plainobj(node, obj)
|
342
|
+
node.each do |name, value|
|
343
|
+
obj.__add_xmlele_value(value.elename, any2obj(value))
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
def add_attributes2obj(node, obj)
|
348
|
+
return if obj.nil? or node.extraattr.empty?
|
349
|
+
define_xmlattr(obj)
|
350
|
+
node.extraattr.each do |qname, value|
|
351
|
+
obj.__xmlattr[qname] = value
|
352
|
+
define_xmlattr_accessor(obj, qname)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
# Mapping.define_attr_accessor calls define_method with proc and it exhausts
|
357
|
+
# much memory for each singleton Object. just instance_eval instead of it.
|
358
|
+
def define_xmlattr_accessor(obj, qname)
|
359
|
+
# untaint depends GenSupport.safemethodname
|
360
|
+
name = Mapping.safemethodname('xmlattr_' + qname.name).untaint
|
361
|
+
unless obj.respond_to?(name)
|
362
|
+
# untaint depends QName#dump
|
363
|
+
qnamedump = qname.dump.untaint
|
364
|
+
obj.instance_eval <<-EOS
|
365
|
+
def #{name}
|
366
|
+
@__xmlattr[#{qnamedump}]
|
367
|
+
end
|
368
|
+
|
369
|
+
def #{name}=(value)
|
370
|
+
@__xmlattr[#{qnamedump}] = value
|
371
|
+
end
|
372
|
+
EOS
|
373
|
+
end
|
374
|
+
end
|
375
|
+
|
376
|
+
# Mapping.define_attr_accessor calls define_method with proc and it exhausts
|
377
|
+
# much memory for each singleton Object. just instance_eval instead of it.
|
378
|
+
def define_xmlattr(obj)
|
379
|
+
obj.instance_variable_set('@__xmlattr', {})
|
380
|
+
unless obj.respond_to?(:__xmlattr)
|
381
|
+
obj.instance_eval <<-EOS
|
382
|
+
def __xmlattr
|
383
|
+
@__xmlattr
|
384
|
+
end
|
385
|
+
EOS
|
386
|
+
end
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
|
391
|
+
end
|
392
|
+
end
|