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

SOAP::Lite autobinding problem

Expand Messages
  • Leon Brocard
    Heya kids, it s me again. Pierre found this problem a while ago but I came across it recently and have found a small test case. Basically, one of my objects is
    Message 1 of 6 , Aug 28, 2002
    • 0 Attachment
      Heya kids, it's me again. Pierre found this problem a while ago but I
      came across it recently and have found a small test case. Basically,
      one of my objects is being changed by SOAP::Lite.

      I've attached 3 files. If you run the server in the background and
      then run the client you get:

      Client has colours red, green, blue
      Client now has colours red, red, blue

      whereas I expect to get "red, green, blue". Somehow SOAP::Lite is
      getting confused in its autobinding and making $green red.

      Unfortunately I have no idea where the bug is in the SOAP::Lite
      code. However, I hope that the small test case shows off the bug and
      that someone with more experience with the code can help out ;-)

      Thanks, Leon
      --
      Leon Brocard.............................http://www.astray.com/
      scribot.................................http://www.scribot.com/

      ... Dragons love you. You're crunchy and good with ketchup
    • Duncan Cameron
      ... It s a problem with the autobinding, see the section of the docs to see what SOAP::Lite is trying to do. Autobinding doesn t seem to handle more than one
      Message 2 of 6 , Aug 28, 2002
      • 0 Attachment
        On 2002-08-28 Leon Brocard wrote:
        >Heya kids, it's me again. Pierre found this problem a while ago but I
        >came across it recently and have found a small test case. Basically,
        >one of my objects is being changed by SOAP::Lite.
        >
        >I've attached 3 files. If you run the server in the background and
        >then run the client you get:
        >
        >Client has colours red, green, blue
        >Client now has colours red, red, blue
        >
        >whereas I expect to get "red, green, blue". Somehow SOAP::Lite is
        >getting confused in its autobinding and making $green red.
        >
        >Unfortunately I have no idea where the bug is in the SOAP::Lite
        >code. However, I hope that the small test case shows off the bug and
        >that someone with more experience with the code can help out ;-)
        >
        It's a problem with the autobinding, see the section of the docs
        to see what SOAP::Lite is trying to do. Autobinding doesn't seem to
        handle more than one parameter of the same type. You can work
        around it by explicitly giving your parameter a different name, e.g.

        $red->get(SOAP::Data->name(p1 => $green)); # passed extra object

        Regards,
        Duncan Cameron
      • Leon Brocard
        ... The section on autobinding in the docs doesn t point out that it is buggy. ... I don t see why I should have to work around a bug in SOAP::Lite. I would
        Message 3 of 6 , Aug 29, 2002
        • 0 Attachment
          Duncan Cameron sent the following bits through the ether:

          > It's a problem with the autobinding, see the section of the docs
          > to see what SOAP::Lite is trying to do. Autobinding doesn't seem to
          > handle more than one parameter of the same type. You can work
          > around it by explicitly giving your parameter a different name, e.g.

          The section on autobinding in the docs doesn't point out that it is
          buggy.

          > $red->get(SOAP::Data->name(p1 => $green)); # passed extra object

          I don't see why I should have to work around a bug in SOAP::Lite. I
          would provide a patch to fix it if I could. Is the code around the
          comment "little bit tricky part that binds in/out parameters" the code
          I should be looking at?

          Leon
          --
          Leon Brocard.............................http://www.astray.com/
          scribot.................................http://www.scribot.com/

          ... To err is human, to moo bovine
        • Pierre Denis
          I ve reported problem with autobiding Fri 10/05/2002 10:58 The only solution I ve found so far is to deep clone all parameters (Storable::dclone) before
          Message 4 of 6 , Aug 29, 2002
          • 0 Attachment
            I've reported problem with autobiding Fri 10/05/2002 10:58
            The only solution I've found so far is to deep clone all parameters
            (Storable::dclone) before sending them to the server to prevent autobinding
            to alter my arguments.

            As far as I'm aware, this is a bug in SOAP::Lite and autobiding is not part
            of the SOAP specification. However, I haven't found an easy way to turn it
            off.

            Regards

            Pierre Denis
            Development Manager
            Fotango


            > -----Original Message-----
            > From: Duncan Cameron [mailto:dcameron@...]
            > Sent: 28 August 2002 00:00
            > To: Leon Brocard; soaplite@yahoogroups.com
            > Subject: Re: [soaplite] SOAP::Lite autobinding problem
            >
            >
            > On 2002-08-28 Leon Brocard wrote:
            > >Heya kids, it's me again. Pierre found this problem a while ago but I
            > >came across it recently and have found a small test case. Basically,
            > >one of my objects is being changed by SOAP::Lite.
            > >
            > >I've attached 3 files. If you run the server in the background and
            > >then run the client you get:
            > >
            > >Client has colours red, green, blue
            > >Client now has colours red, red, blue
            > >
            > >whereas I expect to get "red, green, blue". Somehow SOAP::Lite is
            > >getting confused in its autobinding and making $green red.
            > >
            > >Unfortunately I have no idea where the bug is in the SOAP::Lite
            > >code. However, I hope that the small test case shows off the bug and
            > >that someone with more experience with the code can help out ;-)
            > >
            > It's a problem with the autobinding, see the section of the docs
            > to see what SOAP::Lite is trying to do. Autobinding doesn't seem to
            > handle more than one parameter of the same type. You can work
            > around it by explicitly giving your parameter a different name, e.g.
            >
            > $red->get(SOAP::Data->name(p1 => $green)); # passed extra object
            >
            > Regards,
            > Duncan Cameron
            >
            >
            >
            >
            >
            >
            >
            > To unsubscribe from this group, send an email to:
            > soaplite-unsubscribe@yahoogroups.com
            >
            >
            >
            > Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
            >
            >
          • Duncan Cameron
            ... Er, no. Most docs don t, but I agree that it doesn t explain any limitations. ... Well, I think firstly we should specify what behaviour we expect. I m
            Message 5 of 6 , Aug 30, 2002
            • 0 Attachment
              On 2002-08-29 Leon Brocard wrote:
              >Duncan Cameron sent the following bits through the ether:
              >
              >> It's a problem with the autobinding, see the section of the docs
              >> to see what SOAP::Lite is trying to do. Autobinding doesn't seem to
              >> handle more than one parameter of the same type. You can work
              >> around it by explicitly giving your parameter a different name, e.g.
              >
              >The section on autobinding in the docs doesn't point out that it is
              >buggy.

              Er, no. Most docs don't, but I agree that it doesn't explain any
              limitations.

              >> $red->get(SOAP::Data->name(p1 => $green)); # passed extra object
              >
              >I don't see why I should have to work around a bug in SOAP::Lite. I
              >would provide a patch to fix it if I could. Is the code around the
              >comment "little bit tricky part that binds in/out parameters" the code
              >I should be looking at?

              Well, I think firstly we should specify what behaviour we expect. I'm
              not sure that I understand quite what I do expect to happen!
              Maybe having an option to turn-off auto-binding would be a start but
              I think that the auto-binding code may well be supporting the transfer
              of objects between client and server, so it might not be as simple
              as that.

              Bear in mind too that auto-binding and object transfer are not in
              the SOAP definition, they are features that Paul has added. If you
              want to inter-operate with other SOAP implementations then you
              need to steer away from them.

              Paul: can you clarify whether auto-binding could be turned-off and
              what the consequences would be?

              Regards,
              Duncan Cameron
            • Keanan Smith
              I understand what Autobinding does, what I don t quite understand is why it s causing the problems it does, Effectively it s trying to make soap work as if
              Message 6 of 6 , Aug 30, 2002
              • 0 Attachment
                I understand what Autobinding does, what I don't quite understand is why
                it's causing the problems it does,

                Effectively it's trying to make soap work as if it's pass-by-reference
                instead of pass-by-value, so you can modify
                the @_ array in the server and have the client's data be modified to reflect
                those values.

                In essence, The 'Object' (At least from a perl point of view) that is being
                passed back and forth, is simply an additional element in the @_ array,

                So the only question is, when taking the steps:

                SOAP-Client serializes paramaters, creates "mapping" that can be mapped back
                to the original parameters when returned from the server;
                SOAP-Client Passes Serialized parameters to server;
                SOAP-server deserializes paramaters, and calls requested function with said
                parameters;
                SOAP-server re-serializes parameters (As they are with any changes) and
                return value of function;
                SOAP-server passes serialized parameters and return value(s) back to client;
                SOAP-Client deserializes paramaters and return values, uses mapping to
                update the objects referred to in step 1, places return values in
                appropriate places to be retrieved by original caller.

                How does SOAP lose track of which incoming parameter is which, from the
                problem at hand, it sounds like SOAP doesn't use a very accurate map of
                client references to returned server values, which I wouldn't think would be
                very hard (I mean, if you stored them all in an array, and had that array
                passed back, all the resulting values would be in the same places wouldn't
                it??) The only thing I can think of is that there's an attemt to store them
                in some sort of hash, mapping serialized references to actual references,
                meaning there would be no way to tell for sure which object went with which
                reference, if you had more than one of the same type.

                Which overall doesn't sound like *that* hard of a problem to fix, if that's
                the essence of the problem at hand...

                Sorry, but that still just sounds like a bug that needs fixed *grin*
                (Admittedly one that's probably not *incredibly* common to come across)


                I'm still waiting for objects I pass from the client to the server to have
                the method auto-bound to a return SOAP connection as well, so the server can
                call methods in the client on objects passed from client-side to server-side
                (I know, I know, don't hold my breath *cackle* :)



                -----Original Message-----
                From: Duncan Cameron [mailto:dcameron@...]
                Sent: Friday, August 30, 2002 3:23 AM
                To: Leon Brocard
                Cc: soaplite@yahoogroups.com
                Subject: Re: [soaplite] SOAP::Lite autobinding problem


                On 2002-08-29 Leon Brocard wrote:
                >Duncan Cameron sent the following bits through the ether:
                >
                >> It's a problem with the autobinding, see the section of the docs
                >> to see what SOAP::Lite is trying to do. Autobinding doesn't seem to
                >> handle more than one parameter of the same type. You can work
                >> around it by explicitly giving your parameter a different name, e.g.
                >
                >The section on autobinding in the docs doesn't point out that it is
                >buggy.

                Er, no. Most docs don't, but I agree that it doesn't explain any
                limitations.

                >> $red->get(SOAP::Data->name(p1 => $green)); # passed extra object
                >
                >I don't see why I should have to work around a bug in SOAP::Lite. I
                >would provide a patch to fix it if I could. Is the code around the
                >comment "little bit tricky part that binds in/out parameters" the code
                >I should be looking at?

                Well, I think firstly we should specify what behaviour we expect. I'm
                not sure that I understand quite what I do expect to happen!
                Maybe having an option to turn-off auto-binding would be a start but
                I think that the auto-binding code may well be supporting the transfer
                of objects between client and server, so it might not be as simple
                as that.

                Bear in mind too that auto-binding and object transfer are not in
                the SOAP definition, they are features that Paul has added. If you
                want to inter-operate with other SOAP implementations then you
                need to steer away from them.

                Paul: can you clarify whether auto-binding could be turned-off and
                what the consequences would be?

                Regards,
                Duncan Cameron



                To unsubscribe from this group, send an email to:
                soaplite-unsubscribe@yahoogroups.com



                Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
              Your message has been successfully submitted and would be delivered to recipients shortly.