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

Re: [soaplite] Upgraded client, getting SOAP errors

Expand Messages
  • rahed
    ... You can change the content-type with $soap- transport- http_request- header( Content-type = text/xml ); -- Radek
    Message 1 of 5 , Oct 14, 2008
    • 0 Attachment
      > I tried changing the SOAP version to 1.1 just to send the content-
      > type that it's expecting, but then other issues come up, like a
      > hardcoded prefix SOAP-ENC:Array needs to be soapenc:Array.
      >
      > Can I force the content-type of a v1.2 transaction to text/xml?
      > What else can be done to remedy this situation? The people who own
      > the remote server will certainly not upgrade because of this.

      You can change the content-type with

      $soap->transport->http_request->header('Content-type' => 'text/xml');

      --
      Radek
    • Tony Gravagno
      ... Radek responded ... Thank you for the suggestion. This does change the header but the server is now complaining that the client is using the wrong SOAP
      Message 2 of 5 , Oct 18, 2008
      • 0 Attachment
        I wrote:
        > > I tried changing the SOAP version to 1.1 just to send the content-
        > > type that it's expecting, but then other issues come up, like a
        > > hardcoded prefix SOAP-ENC:Array needs to be soapenc:Array.
        > >
        > > Can I force the content-type of a v1.2 transaction to text/xml?
        > > What else can be done to remedy this situation? The people who own
        > > the remote server will certainly not upgrade because of this.

        Radek responded
        > You can change the content-type with
        >
        > $soap->transport->http_request->header('Content-type' => 'text/xml');

        Thank you for the suggestion. This does change the header but the
        server is now complaining that the client is using the wrong SOAP
        version. There is a major difference between the headers sent before
        and after the upgrade.

        Before upgrade:

        <SOAP-ENV:Envelope
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:SOAP-ENC="http://www.w3.org/2001/06/soap-encoding"
        xmlns:SOAP-ENV="http://www.w3.org/2001/06/soap-envelope"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        SOAP-ENV:encodingStyle="http://www.w3.org/2001/06/soap-encoding">

        After upgrade:

        <soap:Envelope
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
        xmlns:soap="http://www.w3.org/2003/05/soap-envelope">

        It looks like the server isn't prepared for the v2003 schemas that come
        with SOAP::Lite v0.710 compared to v0.55 - and we cannot change the
        server. As mentioned in my original post, SOAP-ENC:Array is hardcoded
        into the transaction code and doesn't agree with the newer schema
        anyway.

        My current recommendation to the client is to downgrade SOAP::Lite and
        that probably involves a downgrade of Perl as well, and that may affect
        yet other dependencies. Better suggestions are welcome.

        I'm hoping for a quick solution here, but my client is willing to pay
        to get this resolved quickly if a solution needs to be more involved.
        So far I have emailed Paul Kulchenko to request compensated services
        but I have not received a response. I welcome emails from qualified
        developers with references. You must have a complete understanding of
        the situation (I believe my postings here have provided that) and a
        ready proposal for a solution, we cannot fund research or education.

        Thanks for your time.
      • Martin Kutter
        Hi Tony, the namespaces are defined in SOAP::Constants. Unfortunately they cannot be overridden at run time, because perl s peep-hole optimizer inlines
        Message 3 of 5 , Oct 19, 2008
        • 0 Attachment
          Hi Tony,

          the namespaces are defined in SOAP::Constants. Unfortunately they cannot
          be overridden at run time, because perl's peep-hole optimizer inlines
          constants.

          However, the constants are not used directly by SOAP::Lite, but through
          the following SOAP::Constants variables:

          @SUPPORTED_ENCODING_STYLES
          %XML_SCHEMAS
          %XML_SCHEMA_OF
          %SOAP_VERSIONS

          To change all occurances, do the following:

          BEGIN {
          use SOAP::Lite

          my $url_enc = "http://www.w3.org/2001/06/soap-encoding";
          my $url_env = "http://www.w3.org/2001/06/soap-envelope";

          push @SOAP::Constants::SUPPORTED_ENCODING_STYLES, $url_enc;

          $SOAP::Constants::SOAP_VERSIONS{'1.2'}->{NS_ENC} = $url_enc;
          $SOAP::Constants::SOAP_VERSIONS{'1.2'}->{NS_ENV} = $url_env;

          $SOAP::Contants::XML_SCHEMAS{$url_enc} = 'SOAP::XMLSchemaSOAP1_2';
          $SOAP::Contants::XML_SCHEMAS_OF{$url_enc} = 'XMLSchemaSOAP1_2';
          }

          This should change the (new) namespaces back to the old ones throughout
          SOAP::Lite (untested...).

          Note that SOAP::Constants variables are global - all your SOAP::Lite
          instances in the current process will be affected (may be an issue under
          mod_perl).

          Martin


          Am Samstag, den 18.10.2008, 22:57 +0000 schrieb Tony Gravagno:
          > ...
          > Thank you for the suggestion. This does change the header but the
          > server is now complaining that the client is using the wrong SOAP
          > version. There is a major difference between the headers sent before
          > and after the upgrade.
          >
          > Before upgrade:
          >
          > <SOAP-ENV:Envelope
          > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          > xmlns:SOAP-ENC="http://www.w3.org/2001/06/soap-encoding"
          > xmlns:SOAP-ENV="http://www.w3.org/2001/06/soap-envelope"
          > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          > SOAP-ENV:encodingStyle="http://www.w3.org/2001/06/soap-encoding">
          >
          > After upgrade:
          >
          > <soap:Envelope
          > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          > xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding"
          > xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          > soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
          > xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
          >
          > It looks like the server isn't prepared for the v2003 schemas that
          > come
          > with SOAP::Lite v0.710 compared to v0.55 - and we cannot change the
          > server. As mentioned in my original post, SOAP-ENC:Array is hardcoded
          > into the transaction code and doesn't agree with the newer schema
          > anyway.
          >
          > My current recommendation to the client is to downgrade SOAP::Lite
          > and
          > that probably involves a downgrade of Perl as well, and that may
          > affect
          > yet other dependencies. Better suggestions are welcome.
          >
          > I'm hoping for a quick solution here, but my client is willing to pay
          > to get this resolved quickly if a solution needs to be more involved.
          > So far I have emailed Paul Kulchenko to request compensated services
          > but I have not received a response. I welcome emails from qualified
          > developers with references. You must have a complete understanding of
          > the situation (I believe my postings here have provided that) and a
          > ready proposal for a solution, we cannot fund research or education.
          >
          > Thanks for your time.
          >
          >
          >
          >
          >
        • Tony Gravagno
          For anyone watching this thread, the issue was resolved for the most part with the code that Martin provided. Just add a semi-colon to the end of the using
          Message 4 of 5 , Nov 17, 2008
          • 0 Attachment
            For anyone watching this thread, the issue was resolved for the most
            part with the code that Martin provided. Just add a semi-colon to the
            end of the using statement. :) Martin, thank you very much!

            We also asked Paul Kulchenko for for-fee consultation and appreciate
            his assistance as well.
          Your message has been successfully submitted and would be delivered to recipients shortly.