Loading ...
Sorry, an error occurred while loading the content.

Receiving type 'xml' on serverside - preventing deserialization of body.

Expand Messages
  • stormmaster42
    Hi, I am trying to write a client/service-combination that exchanges a SOAP-message containing an XML document. I know how to put the XML into the message.
    Message 1 of 3 , Jun 23, 2003
    View Source
    • 0 Attachment
      Hi,

      I am trying to write a client/service-combination that exchanges a
      SOAP-message containing an XML document.

      I know how to put the XML into the message. What I am doing on the
      client is:
      $soapResult = $soap -> verify(SOAP::Data->type('xml')->name(info =>
      $myxml));

      Now how do I get the content of the variable $myxml on the server side
      inside my handling subroutine?
      To me it seems that SOAP::Lite is always trying to deserialize the
      body into hashes, which I do not want in this case. Because I would
      like to do some validation/transformation on the transmitted XML.

      Unfortunately encoding the XML as a base64 string or escaping special
      characters is not an option since the real client (not SOAP::Lite) is
      not able to do that.

      Any help greatly appreciated.
      Thanx,
      Stefan
    • Alberto Accomazzi
      Stefan, simply use the outputxml() option when you create your SOAP::Lite object: my $soap = SOAP::Lite - uri( http://simon.fell.com/calc ) -
      Message 2 of 3 , Jun 24, 2003
      View Source
      • 0 Attachment
        Stefan,

        simply use the outputxml() option when you create your SOAP::Lite object:

        my $soap = SOAP::Lite
        -> uri('http://simon.fell.com/calc')
        -> proxy('http://www.razorsoft.net/ssss4c/soap.asp')
        -> outputxml(1);



        -- Alberto

        > Date: Mon, 23 Jun 2003 12:02:49 -0000
        > From: "stormmaster42" <stefan@...>
        > Subject: Receiving type 'xml' on serverside - preventing deserialization of body.
        >
        > Hi,
        >
        > I am trying to write a client/service-combination that exchanges a
        > SOAP-message containing an XML document.
        >
        > I know how to put the XML into the message. What I am doing on the
        > client is:
        > $soapResult = $soap -> verify(SOAP::Data->type('xml')->name(info =>
        > $myxml));
        >
        > Now how do I get the content of the variable $myxml on the server side
        > inside my handling subroutine?
        > To me it seems that SOAP::Lite is always trying to deserialize the
        > body into hashes, which I do not want in this case. Because I would
        > like to do some validation/transformation on the transmitted XML.
        >
        > Unfortunately encoding the XML as a base64 string or escaping special
        > characters is not an option since the real client (not SOAP::Lite) is
        > not able to do that.
        >
        > Any help greatly appreciated.
        > Thanx,
        > Stefan
      • stormmaster42
        Hi Alberto, thanks for your reply. But maybe I m getting something completely wrong here. Why would I need a SOAP::Lite object on the server side? ... my $soap
        Message 3 of 3 , Jun 25, 2003
        View Source
        • 0 Attachment
          Hi Alberto,

          thanks for your reply.
          But maybe I'm getting something completely wrong here.
          Why would I need a SOAP::Lite object on the server side?

          And I tried your code like so:

          ----- SERVER -----
          my $soap = SOAP::Lite
          -> uri("urn:IplsRotSoap")
          -> proxy("myproxy")
          -> outputxml(1);

          my $s = SOAP::Transport::HTTP::CGI
          -> dispatch_to('MyPackage');
          $s -> handle;

          package MyPackage;
          sub echo {
          my ( $self, $a ) = @_;
          return $a;
          }
          ----

          But $a still is the deserialzed hash of the xml I threw in the message
          on the client like:
          $soapResult = $soap -> echo(SOAP::Data->type('xml')->name(info =>
          $myxml));

          What I want is that $a contains exactly the same xml-string as the
          original $myxml.

          Cheers,
          Stefan

          --- In soaplite@yahoogroups.com, Alberto Accomazzi <aaccomazzi@c...>
          wrote:
          >
          > Stefan,
          >
          > simply use the outputxml() option when you create your SOAP::Lite
          object:
          >
          > my $soap = SOAP::Lite
          > -> uri('http://simon.fell.com/calc')
          > -> proxy('http://www.razorsoft.net/ssss4c/soap.asp')
          > -> outputxml(1);
          >
          >
          >
          > -- Alberto
          >
          > > Date: Mon, 23 Jun 2003 12:02:49 -0000
          > > From: "stormmaster42" <stefan@c...>
          > > Subject: Receiving type 'xml' on serverside - preventing
          deserialization of body.
          > >
          > > Hi,
          > >
          > > I am trying to write a client/service-combination that exchanges a
          > > SOAP-message containing an XML document.
          > >
          > > I know how to put the XML into the message. What I am doing on the
          > > client is:
          > > $soapResult = $soap -> verify(SOAP::Data->type('xml')->name(info
          =>
          > > $myxml));
          > >
          > > Now how do I get the content of the variable $myxml on the server
          side
          > > inside my handling subroutine?
          > > To me it seems that SOAP::Lite is always trying to deserialize the
          > > body into hashes, which I do not want in this case. Because I
          would
          > > like to do some validation/transformation on the transmitted XML.
          > >
          > > Unfortunately encoding the XML as a base64 string or escaping
          special
          > > characters is not an option since the real client (not SOAP::Lite)
          is
          > > not able to do that.
          > >
          > > Any help greatly appreciated.
          > > Thanx,
          > > Stefan
        Your message has been successfully submitted and would be delivered to recipients shortly.