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

Re: SOAP::Lite and dates

Expand Messages
  • Duncan Cameron
    ... From memory, on the server side something like my $daemon = SOAP::Transport::HTTP::Daemon # etc $daemon- serializer- xmlschema( 2001 ); or
    Message 1 of 12 , Apr 3, 2004
    • 0 Attachment
      --- Stephane Bortzmeyer <bortzmeyer@...> wrote:
      >
      > > and your server needs to specify the 2001 namespace not 1999,
      > > i.e. xmlns:xsd="http://www.w3.org/2001/XMLSchema".
      >
      > I do not find how to do so with SOAP::Lite (yes, my server is written
      > in SOAP::Lite, too).

      From memory, on the server side something like

      my $daemon = SOAP::Transport::HTTP::Daemon # etc

      $daemon->serializer->xmlschema('2001');
      or
      $daemon->serializer->version('1.1');

      will cause the 2001 namespace to be used.

      Regards

      Duncan






      ___________________________________________________________
      WIN FREE WORLDWIDE FLIGHTS - nominate a cafe in the Yahoo! Mail Internet Cafe Awards www.yahoo.co.uk/internetcafes
    • Duncan Cameron
      ... Sorry to reply to my own posting but the soapversion() call doesn t work on a server in the same way as a client. Try SOAP::Lite- soapversion( 1.2 );
      Message 2 of 12 , Apr 3, 2004
      • 0 Attachment
        --- Duncan Cameron <duncan_cameron2002@...> wrote:
        > --- Stephane Bortzmeyer <bortzmeyer@...> wrote:
        > >
        > > > and your server needs to specify the 2001 namespace not 1999,
        > > > i.e. xmlns:xsd="http://www.w3.org/2001/XMLSchema".
        > >
        > > I do not find how to do so with SOAP::Lite (yes, my server is
        > written
        > > in SOAP::Lite, too).
        >
        > From memory, on the server side something like
        >
        > my $daemon = SOAP::Transport::HTTP::Daemon # etc
        >
        > $daemon->serializer->xmlschema('2001');
        > or
        > $daemon->serializer->version('1.1');
        >
        > will cause the 2001 namespace to be used.
        >
        Sorry to reply to my own posting but the soapversion() call doesn't
        work on a server in the same way as a client. Try

        SOAP::Lite->soapversion('1.2');

        /before/ creating your server daemon.

        Regards
        Duncan






        ___________________________________________________________
        WIN FREE WORLDWIDE FLIGHTS - nominate a cafe in the Yahoo! Mail Internet Cafe Awards www.yahoo.co.uk/internetcafes
      • Stephane Bortzmeyer
        On Sat, Apr 03, 2004 at 02:30:54PM +0100, Duncan Cameron wrote ... It seems completely ignored, I get the same namespace. My
        Message 3 of 12 , Apr 5, 2004
        • 0 Attachment
          On Sat, Apr 03, 2004 at 02:30:54PM +0100,
          Duncan Cameron <duncan_cameron2002@...> wrote
          a message of 37 lines which said:

          > Sorry to reply to my own posting but the soapversion() call doesn't
          > work on a server in the same way as a client. Try
          >
          > SOAP::Lite->soapversion('1.2');

          It seems completely ignored, I get the same namespace.

          My code:

          SOAP::Lite->soapversion('1.2');
          my $daemon = SOAP::Transport::HTTP::CGI
          -> dispatch_to('/local/lib/soap', '*',
          '', '');
          $daemon->handle;

          My server (Apache 1 + mod_perl):

          <Location /soap>
          SetHandler perl-script
          PerlHandler Apache::Registry
          PerlSendHeader On
          Options +ExecCGI
          DirectoryIndex dispatcher
          </Location>

          My result:

          <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope
          xmlns:namesp2="http://xml.apache.org/xml-soap"
          SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
          xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
          xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
          xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
          xmlns:xsd="http://www.w3.org/1999/XMLSchema"><SOAP-ENV:Body><namesp1:hello_dateResponse
          xmlns:namesp1="http://nic.fr/TestOnly"><s-gensym3
          xsi:type="namesp2:SOAPStruct"><Message
          xsi:type="xsd:string">World</Message><Date
          xsi:type="xsd:dateTime">2004-04-01T16:01:13</Date></s-gensym3></namesp1:hello_dateResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
        • Byrne Reese
          SOAP::Lite can do the same... or as you point out: should do that same. Again, I see no impedement to getting a result from a server, and then fetching a
          Message 4 of 12 , Apr 6, 2004
          • 0 Attachment
            SOAP::Lite can do the same... or as you point out: should do that same.
            Again, I see no impedement to getting a result from a server, and then
            fetching a string value from somewhere in the the result, and passing it
            through to Date::Manip to parse the date more effectively... or hell
            writing my own regular expression like:

            my ($year,$month,$day,$hour,$min,$sec,$ms,$timezone) = ($date =~
            /^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(\.\d\d\d)?(Z|([+-]\d\d:\d\d))?$/);

            Stephane Bortzmeyer wrote:
            > On Tue, Apr 06, 2004 at 12:49:05PM -0700,
            > Byrne Reese <byrne@...> wrote
            > a message of 116 lines which said:
            >
            > > A recent module to CPAN seems to help address the problem:
            > > http://search.cpan.org/~mcmahon/SOAP-DateTime-0.01/
            >
            > I know it and mentioned it in my first message. It only handles
            > serialization, my problem being the deserialization.
            >
            > > Bottom line, SOAP::Lite doesn't (since Perl is so loosely typed) do
            > > any type deserialization for you.
            >
            > I do not see the connection with my problem. Python and PHP are no
            > more typed than Perl and both can deserialize xsd:dateTime (they just
            > produce a string for a type they do not know, that I parse after). Why
            > can't SOAP::Lite do the same?
            >
            >
            > ------------------------------------------------------------------------
            > *Yahoo! Groups Links*
            >
            > * To visit your group on the web, go to:
            > http://groups.yahoo.com/group/soaplite/
            >
            > * To unsubscribe from this group, send an email to:
            > soaplite-unsubscribe@yahoogroups.com
            > <mailto:soaplite-unsubscribe@yahoogroups.com?subject=Unsubscribe>
            >
            > * Your use of Yahoo! Groups is subject to the Yahoo! Terms of
            > Service <http://docs.yahoo.com/info/terms/>.
            >
            >
          • Byrne Reese
            Fair enough... here is a little bit on datetimes with SOAP::Lite... A recent module to CPAN seems to help address the problem:
            Message 5 of 12 , Apr 6, 2004
            • 0 Attachment
              Fair enough... here is a little bit on datetimes with SOAP::Lite...

              A recent module to CPAN seems to help address the problem:
              http://search.cpan.org/~mcmahon/SOAP-DateTime-0.01/

              From the README: "This is a little utility module that converts dates
              into the format required by the SOAP 'xsd:dateTime' type. It's just a
              dumb little wrapper around Date::Manip, because that's the lazy way to
              make sure that we are forgiving in what we accept."

              So there is also Date::Manip (obviously).
              http://search.cpan.org/~sbeck/DateManip-5.42a/Manip.pod

              Bottom line, SOAP::Lite doesn't (since Perl is so loosely typed) do any
              type deserialization for you. Not to anything but a SCALAR. Perhaps that
              is something we should more clearly document and provide workarounds for.

              The flip side of course is that the next version of SOAP::Lite, which
              will ship with wsdl2perl, will handle dates more gracefully and
              recognize all of their permutations. From the source of the next release
              of SOAP::Lite:

              _typelookup => {
              ...
              'gMonth' =>
              [35, sub { $_[0] =~ /^--\d\d--(-\d\d:\d\d)?$/; }, 'as_gMonth'],
              'gDay' =>
              [40, sub { $_[0] =~ /^---\d\d(-\d\d:\d\d)?$/; }, 'as_gDay'],
              'gYear' =>
              [45, sub { $_[0] =~ /^-?\d\d\d\d(-\d\d:\d\d)?$/; }, 'as_gYear'],
              'gMonthDay' =>
              [50, sub { $_[0] =~ /^-\d\d-\d\d(-\d\d:\d\d)?$/; },
              'as_gMonthDay'],
              'gYearMonth' =>
              [55, sub { $_[0] =~ /^-?\d\d\d\d-\d\d(Z|([+-]\d\d:\d\d))?$/;
              }, 'as_gYearMonth'],
              'date' =>
              [60, sub { $_[0] =~
              /^-?\d\d\d\d-\d\d-\d\d(Z|([+-]\d\d:\d\d))?$/; }, 'as_date'],
              'time' =>
              [70, sub { $_[0] =~
              /^\d\d:\d\d:\d\d(\.\d\d\d)?(Z|([+-]\d\d:\d\d))?$/; }, 'as_time'],
              'dateTime' =>
              [75, sub { $_[0] =~
              /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d\d\d)?(Z|([+-]\d\d:\d\d))?$/; },
              'as_dateTime'],
              'duration' =>
              [80, sub { $_[0] =~
              /^-?P(\d+Y)?(\d+M)?(\dD)?(T(\d+H)?(\d+M)?(\d+S)?)?$/; }, 'as_duration'],
              'duration' =>
              [85, sub { $_[0] =~
              /^-?P(\d+Y)?(\d+M)?(\dD)?(T(\d+H)?(\d+M)?(\d+S)?)?$/; }, 'as_duration'],
              ...
              },

              Stephane Bortzmeyer wrote:

              > On Fri, Apr 02, 2004 at 12:58:52PM +0200,
              > Stephane Bortzmeyer <bortzmeyer@...> wrote
              > a message of 41 lines which said:
              >
              > > In CPAN, I've found a SOAP::DateTime. Is it the only solution?
              >
              > Using the above module to format the date and
              > SOAP::Data->type('xsd:datetime' => XXX) to tag it properly, I can send
              > what seems to be proper SOAP elements.
              >
              > Now, how can I deserialize them in Perl? The client, also written in
              > SOAP::Lite, says:
              >
              > SOAP::Deserializer::deserialize: ()
              > SOAP::Parser::decode: ()
              > Unrecognized type '{http://www.w3.org/1999/XMLSchema}datetime'
              > <http://www.w3.org/1999/XMLSchema%7Ddatetime%27>
              >
              > while the SOAP answer is:
              >
              > <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope
              > xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
              > SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
              > xmlns:namesp6="http://xml.apache.org/xml-soap"
              > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
              > xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
              > xmlns:xsd="http://www.w3.org/1999/XMLSchema"><SOAP-ENV:Body><namesp5:status_ticketResponse
              > xmlns:namesp5="http://nic.fr/Ticket"><s-gensym23
              > xsi:type="namesp6:SOAPStruct"><auth
              > xsi:type="xsd:string">A2950FFEAAFBAD17</auth><state
              > xsi:type="xsd:string">DNS Non Pret</state><operation
              > xsi:type="xsd:string">Creation</operation><form
              > xsi:type="xsd:int">301988</form><domain
              > xsi:type="xsd:string">logan2004.fr</domain><creation_date
              > xsi:type="xsd:datetime">2003-06-10T12:59:00</creation_date><seed
              > xsi:type="xsd:int">442724</seed><remark xsi:type="xsd:string">Nouvel
              > Etat: DNS Non Pret
              > </remark><modification_date
              > xsi:type="xsd:datetime">2003-07-10T10:50:00</modification_date><number
              > xsi:type="xsd:string">NIC000000500893</number></s-gensym23></namesp5:status_ticketResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
              >
              >
              > The question "How to deserialize datetimes?" seem to come up often on
              > that list but not the answer :-}
              >
              > ------------------------------------------------------------------------
              > *Yahoo! Groups Links*
              >
              > * To visit your group on the web, go to:
              > http://groups.yahoo.com/group/soaplite/
              >
              > * To unsubscribe from this group, send an email to:
              > soaplite-unsubscribe@yahoogroups.com
              > <mailto:soaplite-unsubscribe@yahoogroups.com?subject=Unsubscribe>
              >
              > * Your use of Yahoo! Groups is subject to the Yahoo! Terms of
              > Service <http://docs.yahoo.com/info/terms/>.
              >
              >
            • Stephane Bortzmeyer
              On Tue, Apr 06, 2004 at 12:49:05PM -0700, Byrne Reese wrote ... I know it and mentioned it in my first message. It only handles
              Message 6 of 12 , Apr 7, 2004
              • 0 Attachment
                On Tue, Apr 06, 2004 at 12:49:05PM -0700,
                Byrne Reese <byrne@...> wrote
                a message of 116 lines which said:

                > A recent module to CPAN seems to help address the problem:
                > http://search.cpan.org/~mcmahon/SOAP-DateTime-0.01/

                I know it and mentioned it in my first message. It only handles
                serialization, my problem being the deserialization.

                > Bottom line, SOAP::Lite doesn't (since Perl is so loosely typed) do
                > any type deserialization for you.

                I do not see the connection with my problem. Python and PHP are no
                more typed than Perl and both can deserialize xsd:dateTime (they just
                produce a string for a type they do not know, that I parse after). Why
                can't SOAP::Lite do the same?
              Your message has been successfully submitted and would be delivered to recipients shortly.