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

Show me please, how I can disable autotyping of tags in response of SOAP-server (SOAP :: Lite)?

On SOAP-client I use code like this

use SOAP::Lite; # SOAP library # SOAP tunning my $soap = SOAP::Lite -> ns('http://localhost/AnPackage', 'ns4') -> proxy('http://localhost/cgi-bin/AnService.cgi'); # Disable XML-typing $soap->autotype(0);

I do not know how to do it on SOAP-server

Thanks

Replies are listed 'Best First'.
Re: How to disable autotyping of tags in response of SOAP-server?
by Anonymous Monk on Dec 25, 2012 at 23:15 UTC
    It is not the tags that get autotyped, it is the values -- if you don't want autotyping, specify a type
      My SOAP-client send: <soap:Body><ns4:createRequestRequest><smev:Message xmlns:smev="http://smev.com/rev110801" soapenc:arrayType="xsd:anyType[10]" xsi:type="soapenc:Array"><smev:Sender soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array"><MyCode xsi:type="xsd:string">FM</MyCode><Name xsi:type="xsd:string">FM</Name></smev:Sender><smev:Recepient soapenc:arrayType="xsd:string[2]" xsi:type="soapenc:Array"><MyCode xsi:type="xsd:string">RR</MyCode><Name xsi:type="xsd:string">RR</Name></smev:Recepient><smev:Originator soapenc:arrayType="xsd:string[2]" xsi:type="soapenc:Array"><MyCode xsi:type="xsd:string">FM</MyCode><Name xsi:type="xsd:string">FM</Name></smev:Originator><smev:TypeCode xsi:type="xsd:string">GSRV</smev:TypeCode><smev:Status xsi:type="xsd:string">REQUEST</smev:Status><smev:Date xsi:type="xsd:dateTime">2012-07-26T15:47:13.459+07:00</smev:Date><smev:ExchangeType xsi:type="xsd:int">2</smev:ExchangeType><smev:ServiceCode xsi:type="xsd:long">10000013628</smev:ServiceCode><smev:CaseNumber xsi:type="xsd:string">1/1</smev:CaseNumber><smev:TestMsg xsi:type="xsd:boolean">true</smev:TestMsg></smev:Message><smev:MessageData soapenc:arrayType="soapenc:Array[2]" xsi:type="soapenc:Array"><smev:AppData soapenc:arrayType="soapenc:Array[1]" xsi:type="soapenc:Array"><ns2:CreateRequestBean soapenc:arrayType="xsd:long[2]" xsi:type="soapenc:Array" xmlns:ns2="http://portal.fccland.ru/types/"><ns2:okato xsi:type="xsd:long">29202808001</ns2:okato><ns2:requestType xsi:type="xsd:long">558101010000</ns2:requestType></ns2:CreateRequestBean></smev:AppData><smev:AppDocument soapenc:arrayType="xsd:string[2]" xsi:type="soapenc:Array"><RequestCode xsi:type="xsd:string">req_ee0b4ef0-f1b3-4353-993a-368a33bc6435</RequestCode><BinaryData xsi:type="xsd:string">UEsDBBQAAAAIAGCr90DD5xxPD9gBANcGAgBUAAAAZGVtYW5kX2RjZWEwNDU2LWZiNDYtNDcxNC05</BinaryData></smev:AppDocument></smev:MessageData></ns4:createRequestRequest></soap:Body> It was not OK! After that I set soap->autotype(0); and my SOAP-client now send: <soap:Body><ns4:createRequestRequest><smev:Message xmlns:smev="http://smev.com/rev110801"><smev:Sender><MyCode>FMS001001</MyCode><Name>FMS</Name></smev:Sender><smev:Recepient><MyCode>RRTR01001</MyCode><Name>RRTR</Name></smev:Recepient><smev:Originator><MyCode>FMS001001</MyCode><Name>FMS</Name></smev:Originator><smev:TypeCode>GSRV</smev:TypeCode><smev:Status>REQUEST</smev:Status><smev:Date>2012-07-26T15:47:13.459+07:00</smev:Date><smev:ExchangeType>2</smev:ExchangeType><smev:ServiceCode>10000013628</smev:ServiceCode><smev:CaseNumber>1/1</smev:CaseNumber><smev:TestMsg>TRUE</smev:TestMsg></smev:Message><smev:MessageData><smev:AppData><ns2:CreateRequestBean xmlns:ns2="http://portal.com/types/"><ns2:okato>29202808001</ns2:okato><ns2:requestType>558101010000</ns2:requestType></ns2:CreateRequestBean></smev:AppData><smev:AppDocument><RequestCode>req_ee0b4ef0-f1b3-4353-993a-368a33bc6435</RequestCode><BinaryData>UEsDBBQAAAAIAGCr90DD5xxPD9gBANcGAgBUAAAAZGVtYW5kX2RjZWEwNDU2LWZiNDYtNDcxNC05</BinaryData></smev:AppDocument></smev:MessageData></ns4:createRequestRequest></soap:Body> It is OK! But in SOAP-server side problem with response saved:
      <soap:Body><createRequestResponse xmlns="http://localhost/AnPackage" s +oapenc:arrayType="xsd:anyType[3]" xsi:type="soapenc:Array"><requestNu +mber xsi:type="xsd:string">1-13</requestNumber></createRequestRespons +e></soap:Body>
      But it must be:
      <soap:Body><createRequestResponse xmlns="http://localhost/AnPackage">< +requestNumber>1-13</requestNumber></createRequestResponse></soap:Body +>
      without any types! How I can disable response typing on server?
Re: How to disable autotyping of tags in response of SOAP-server?
by Anonymous Monk on Dec 26, 2012 at 14:16 UTC

    The same way :)

    The shortcut fails $daemon->autotype(0); fails with Can't locate object method "autotype" via package "HTTP::Daemon"

    but not the proper way :) $daemon->serializer->autotype(0);

      I do without daemons. This is my dispatcher:
      My::CGI::Handler->dispatch_to('AnPackage')->handle; BEGIN { package My::CGI::Handler; use vars qw(@ISA); @ISA = qw(SOAP::Transport::HTTP::CGI); sub handle { my $self = shift; $self->serializer->autotype(0); and so on....................
      Thank you! Now it works! Gm...but now type exists in xml if value is empty:
      <soap:Body> <CreateRequestResponse xmlns="http://localhost/AnPackage"> <ServiceCode xsi:nil="true" /> <requestNumber>1-13</requestNumber> </CreateRequestResponse></soap:Body>
      <<<<< xsi:nil="true" >>>> How to say serializer to hide all tag <ServiceCode xsi:nil="true" /> if this empty?
        don't return undef, return the empty string