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

RE: [soaplite] Re: How to get errors

Expand Messages
  • Oeschey, Lars (I/ET-83, extern)
    ... as you can see from the post after that one (btw, this is the slowest list I know, not from participants but post speed, i.e. yahoo ;)), I ve been able to
    Message 1 of 15 , Oct 2, 2008
    • 0 Attachment
      > the parameter missing error you are receiving is because it
      > expects two (3)
      > args, and you were only sending one - now, you do need to get your
      > error detection working - and i haven't had any problem printing
      > the faultcode and strings -
      > i recommend you read the wsdl with soap lite that will get
      > the type correct.
      > in your second response

      as you can see from the post after that one (btw, this is the slowest
      list I know, not from participants but post speed, i.e. yahoo ;)), I've
      been able to trace sent and received stuff. I also managed meanwhile, to
      force the third parameter into "string" type, which can be seen with the
      trace. I still get the same error from the other side, which I blame on
      the server side now, but I still don't get the faultcode/string, and it
      definitely is sent (which is also seen in the trace mentioned in the
      previous mail)

      > faultstring may only contain
      > "500 Internal Server Error at soaptest.pl line 6"
      > perhaps your server side code is bad?

      maybe server-side code is bad... but the 500 Message comes not from
      *within* SOAP but is just the transport error (same as with a web
      server). I do see the SOAP fault in the trace, and it looks like it
      should be captured by SOAP::Lite, but it isn't...

      regards, Lars
    • rahed
      ... First don t input raw values to teInput function. Follow your service description. Something like this: my $som=$soap- teInput( SOAP::Data- name(in0 =
      Message 2 of 15 , Oct 4, 2008
      • 0 Attachment
        > <message name="teInput">
        > <part name="in0" type="xs:string"/>
        > <part name="in1" type="xs:string"/>
        > <part name="in2" type="xs:string"/>
        > </message>

        First don't input raw values to teInput function. Follow your service
        description.
        Something like this:

        my $som=$soap->teInput(
        SOAP::Data->name(in0 => 'MAN9999999/1'),
        SOAP::Data->name(in1 => 'LAD1020'),
        SOAP::Data->name(in2 =>
        1)->type('string'),
        );


        --
        Radek
      • Oeschey, Lars (I/ET-83, extern)
        ... great, this works! Thanks a lot! Would you mind explaining what the difference is now? Can I maybe read up somewhere about generic Soap handling? It seems
        Message 3 of 15 , Oct 6, 2008
        • 0 Attachment
          > > <message name="teInput">
          > > <part name="in0" type="xs:string"/>
          > > <part name="in1" type="xs:string"/>
          > > <part name="in2" type="xs:string"/>
          > > </message>
          >
          > First don't input raw values to teInput function. Follow your service
          > description.
          > Something like this:
          >
          > my $som=$soap->teInput(
          > SOAP::Data->name(in0 =>
          > 'MAN9999999/1'),
          > SOAP::Data->name(in1 =>
          > 'LAD1020'),
          > SOAP::Data->name(in2 =>
          > 1)->type('string'),

          great, this works! Thanks a lot! Would you mind explaining what the
          difference is now? Can I maybe read up somewhere about generic Soap
          handling? It seems my fault was just not following "best practice", so
          I'd like to know what "best practice" would be ;)

          Lars
        • Oeschey, Lars (I/ET-83, extern)
          ... This works good for the positive case (i.e. all values are good). If I want to get an error, by sending the last value as string, I should get an error
          Message 4 of 15 , Oct 6, 2008
          • 0 Attachment
            > First don't input raw values to teInput function. Follow your service
            > description.
            > Something like this:
            >
            > my $som=$soap->teInput(
            > SOAP::Data->name(in0 =>
            > 'MAN9999999/1'),
            > SOAP::Data->name(in1 =>
            > 'LAD1020'),
            > SOAP::Data->name(in2 =>
            > 1)->type('string'),

            This works good for the positive case (i.e. all values are good). If I
            want to get an error, by sending the last value as string, I should get
            an error from $som->fault however. I only get a http 500 error. The
            trace contains the fault though:

            <?xml version="1.0" encoding="UTF-8"?><soap:Envelope
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:soapenc="http://schemas.xmlsoap.org/s
            oap/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><teInput
            xmlns="http://soap.data.inform.com"><in0
            xsi:type="xsd:string">MAN9999999/1</in0><in1 xsi:type="xsd:st
            ring">LAD22010</in1><in2
            xsi:type="xsd:int">1</in2></teInput></soap:Body></soap:Envelope>
            SOAP::Transport::HTTP::Client::send_receive:
            HTTP::Response=HASH(0x1e38270)
            SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 500 Internal
            Server Error
            Cache-Control: proxy-revalidate
            Connection: close
            Date: Mon, 06 Oct 2008 13:44:41 GMT
            Server: Indy/9.0.18
            Content-Length: 689
            Content-Type: text/xml; charset=utf-8
            Client-Date: Mon, 06 Oct 2008 13:44:40 GMT
            Client-Peer: 10.250.52.241:8080
            Client-Response-Num: 1

            <?xml version="1.0" encoding="UTF-8"?>
            <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
            xmlns:xs="http://www.
            w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><soap:F
            ault><soap:faultcode>soap:Server</soap:faultcode><soap:
            faultstring>Type Mismatch. For the parameter in2, the type found was
            "int" in the namespace
            "http://www.w3.org/2001/XMLSchema", which
            doesn't match any of the expected values:
            {http://www.w3.org/2001/XMLSchema}string</soap:faultstring><detail
            xsi:type="EIdSoapRequirementFail"></d
            etail></soap:Fault></soap:Body></soap:Envelope>

            I'm trying to get the fault like this:

            if ($som->fault) {
            print $som->faultdetail; # returns value of 'detail' element as
            # string or object
            print $som->faultcode; #
            print $som->faultstring; # also available
            print $som->faultactor; #
            }
            else {print "result:$som\n";}
          • rahed
            ... You should get the fault this way. You may changed the $som object before calling a fault method. -- Radek
            Message 5 of 15 , Oct 8, 2008
            • 0 Attachment
              > I'm trying to get the fault like this:
              >
              > if ($som->fault) {
              > print $som->faultdetail; # returns value of 'detail' element as
              > # string or object
              > print $som->faultcode; #
              > print $som->faultstring; # also available
              > print $som->faultactor; #
              > }
              > else {print "result:$som\n";}

              You should get the fault this way. You may changed the $som object
              before calling a fault method.


              --
              Radek
            • rahed
              ... A request expects a soap structure which is done by SOAP::Data class. Check the SOAP::Lite docs. -- Radek
              Message 6 of 15 , Oct 8, 2008
              • 0 Attachment
                > great, this works! Thanks a lot! Would you mind explaining what the
                > difference is now? Can I maybe read up somewhere about generic Soap
                > handling? It seems my fault was just not following "best practice", so
                > I'd like to know what "best practice" would be ;)

                A request expects a soap structure which is done by SOAP::Data class.
                Check the SOAP::Lite docs.

                --
                Radek
              Your message has been successfully submitted and would be delivered to recipients shortly.