Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Fellow monks, I come to you in a time of need.. seeking help in a SOAP::Lite battle. I'm using some proprietary SOAP service. I'm having trouble getting SOAP::Lite to generate the correct calls. From another application, I was able to extract the following (working format):
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="Urn:CoolService" xmlns:xsd="http://www.w3.org/2001/XMLS +chema" xmlns:ns2="http://api.cool.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" +> <SOAP-ENV:Body> <ns1:getCoolFunction> <in0 xsi:type="ns2:CoolType"> <coolKey xsi:type="xsd:string">0a0012ed77c3f0a0f075650a010000</co +olKey> <coolName xsi:type="xsd:string">Foo</coolName> <coolType xsi:type="xsd:string">Bar</coolType> </in0> </ns1:getCoolFunction> </SOAP-ENV:Body></SOAP-ENV:Envelope>
This is what SOAP::Lite is generating so far:
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getCoolFunction xmlns="http://url:88080/bla/cool?wsdl"> <c-gensym3> <coolType xsi:type="xsd:string">Bar</coolType> <coolName xsi:type="xsd:string">Foo</coolName> </c-gensym3></getCoolFunction> </soap:Body> </soap:Envelope>
I'm using pretty basic code, based on some older sources I had access to..
$queryResult = new SOAP::Lite->uri($uri)->proxy($proxy)->$command({coo +lName=>"Foo", coolType=>"Bar"});
I have tried generated a Stub module from a WDSL file with stubmaker but that fails to return anything. Any suggestions?

Replies are listed 'Best First'.
Re: Custom SOAP XML formats
by mda2 (Hermit) on Apr 10, 2006 at 04:48 UTC
    Some times you need to touch on serialize attributes. It´a a complex interaction on SOAP::Lite, but some info at pod are available:
    $uri='/TestCode'; $proxy='http://localhost/'; $command='TestMethod'; $queryResult = new SOAP::Lite ->uri($uri) ->proxy($proxy) ->$command( SOAP::Data->name('in0') ->attr({'xsi:type' => 'ns2:CoolType'}) ->value( { coolName => Foo, coolType=>Bar}));
    This is the result: .............

    --
    Marco Antonio
    Rio-PM

      The system used is Axis. There appear to be some issues with Axis with SOAP::Lite. Your comments is very handy to get started (although I haven't found the time to test it). I found a comments on the SOAP::Lite mailing list (Working with multirefs, Axis, and SOAP::Lite) but again, I haven't found the time to test it.. I'll keep this thread updated.
      I've tracked it down to an optional parameter that was actually a required parameter. Generating that variable is a whole different problem whatsoever. Expect a tool developer to get a wedgie anytime soon now :)