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

Re: [soaplite] Re: SOAP::Lite and attachments...

Expand Messages
  • Byrne Reese
    Let me continue - you are correct, the functionality has been merged. SOAP::Lite 0.60 should be more than sufficient for your needs. Would you mind sending
    Message 1 of 12 , Oct 28, 2003
      Let me continue - you are correct, the functionality has been merged.
      SOAP::Lite 0.60 should be more than sufficient for your needs.

      Would you mind sending some of your code samples and server config's? It
      may help me track down your problem. Also - if you could put a trace on
      the message payload (all I need to see is the MIME and SOAP stuff... by
      all means, hide the attachment content if it is sensitive data.

      > I was under the impression that SOAP::Lite 0.60 (which is *still* not on
      > CPAN!!!!!) did not require SOAP::MIME since that functionality had been
      > integrated into the core.
      >
      > Tim
      >
      > --
      > Tim Jenness
      > JAC software
      > http://www.jach.hawaii.edu/~timj
      >
      >
      > On Tue, 28 Oct 2003, jpeyser wrote:
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      > http://docs.yahoo.com/info/terms/
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      > Yahoo! Groups Sponsor
      >
      >
      > ADVERTISEMENT
      >
      >
      >
      >
      >
      >
      >
      >
      >
      > To unsubscribe from this group, send an email to:
      > soaplite-unsubscribe@yahoogroups.com
      >
      >
      >
      >
      >
      > Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
      >
      >
      >
      >
      >


      ^byrne :/
    • jpeyser
      I stand corrected; everything has been incorporated into SOAP::Lite (almost). So I tried to run the old examples from the SOAP-MIME package without using
      Message 2 of 12 , Oct 29, 2003
        I stand corrected; everything has been incorporated into SOAP::Lite
        (almost). So I tried to run the old examples from the SOAP-MIME
        package without using SOAP::MIME. The client side works fine. But the
        server side has a couple of problems.

        Here are the examples.

        #!/usr/local/bin/perl

        use SOAP::Lite +trace => qw(debug);
        use MIME::Entity;

        my $ent = build MIME::Entity
        Type => "image/gif",
        Encoding => "base64",
        Path => "m.gif",
        Filename => "m.gif",
        Disposition => "attachment";

        my @parts = ($ent);
        $SOME_HOST = 'http://localhost:8765';
        $SOME_NAMESPACE = 'SOAP_MIME_Test';


        my $som = SOAP::Lite
        ->readable(1)
        ->uri($SOME_NAMESPACE)
        ->proxy($SOME_HOST)
        ->parts(@parts)
        # ->parts([ $ent ])
        ->echo(SOAP::Data->name("whatToEcho" => "GREAT"));


        The old example has a couple of problems (maybe it is obsolete).
        First, the subroutine SOAP::SOM::parts that was introduced in the
        SOAP-MIME package was not added to SOAP::Lite. Second, after adding
        the parts routine, the result is different (there is an extra empty
        array).

        0 ARRAY(0x6a60e4)
        0 ARRAY(0xe250b8)
        empty array
        1 REF(0xe1d91c)
        -> MIME::Entity=HASH(0xe1da3c)
        'ME_Bodyhandle' => MIME::Body::InCore=HASH(0xe1daa8)
        'MBC_Data' => ARRAY(0xe12d94)



        Anyway, here is the modified code that works.

        #!/usr/local/bin/perl

        use SOAP::Lite;
        use SOAP::Transport::HTTP;

        my $port = shift || 8765;

        my $daemon = SOAP::Transport::HTTP::Daemon
        -> new ('LocalPort' => $port, 'Reuse' => 1)
        -> dispatch_to('SOAP_MIME_Test')
        -> handle();

        BEGIN {

        sub SOAP::SOM::parts {
        my $self = shift;
        @_ ? ($self->{_parts} = shift, return $self) : return $self->
        {_parts};
        }


        package SOAP_MIME_Test;
        use strict;
        use vars qw(@ISA);
        @ISA = qw(SOAP::Server::Parameters);

        sub echo {
        my $self = shift;
        my $envelope = pop;

        my $part = $envelope->parts->[1];
        # foreach my $part (@{$envelope->parts}) {
        print STDERR "Attachments.cgi: attachment found! (".ref
        ($$part).")\n";
        # }
        print STDERR "envelope is of type: " . ref($envelope) . "\n";
        print $envelope->body;
        my $STRING = $envelope->dataof("//echo/whatToEcho")
        or die SOAP::Fault->faultcode("Client")
        ->faultstring("You must specify a string to echo")
        ->faultactor('urn:SOAP_MIME_Test#echo');

        my $ent = build MIME::Entity
        'Id' => "<1234>",
        'Type' => "text/xml",
        'Path' => "hello.xml",
        'Filename' => "hello.xml",
        'Disposition' => "attachment";

        return SOAP::Data->name("whatToEcho" => $STRING);
        }
        }



        --- In soaplite@yahoogroups.com, "Byrne Reese" <byrne@m...> wrote:
        > Let me continue - you are correct, the functionality has been
        merged.
        > SOAP::Lite 0.60 should be more than sufficient for your needs.
        >
        > Would you mind sending some of your code samples and server
        config's? It
        > may help me track down your problem. Also - if you could put a
        trace on
        > the message payload (all I need to see is the MIME and SOAP
        stuff... by
        > all means, hide the attachment content if it is sensitive data.
        >
        > > I was under the impression that SOAP::Lite 0.60 (which is *still*
        not on
        > > CPAN!!!!!) did not require SOAP::MIME since that functionality
        had been
        > > integrated into the core.
        > >
        > > Tim
        > >
        > > --
        > > Tim Jenness
        > > JAC software
        > > http://www.jach.hawaii.edu/~timj
        > >
        > >

        >
        >
        > ^byrne :/
      • jigsaw9876
        Thanks for this fix. I have attachments working now. -JS
        Message 3 of 12 , Oct 30, 2003
          Thanks for this fix. I have attachments working now.

          -JS
        • jigsaw9876
          In the same context I have another silly question: The server returns data and an attachment like: return SOAP::Data- name( whatToEcho = $STRING),$ent; How
          Message 4 of 12 , Oct 31, 2003
            In the same context I have another silly question:
            The server returns data and an attachment like:
            return SOAP::Data->name("whatToEcho" => $STRING),$ent;
            How does the client recieve this?
            $som->result returns the SOAP::Data but how do I extract the MIME::entity bit??

            - JS
          • Byrne Reese
            The SOAP::SOM object returned by SOAP::Lite has a subroutine called parts - which contains the array of MIME::Entity objects. ... ^byrne :/
            Message 5 of 12 , Oct 31, 2003
              The SOAP::SOM object returned by SOAP::Lite has a subroutine called
              'parts' - which contains the array of MIME::Entity objects.

              >
              >
              >
              >
              > In the same context I have another silly question:
              > The server returns data and an attachment like:
              > return SOAP::Data-
              > How does the client recieve this?
              > $som-
              >
              > - JS
              >
              >
              >
              >
              >
              >
              >
              >
              >
              >
              > Yahoo! Groups Sponsor
              >
              >
              > ADVERTISEMENT
              >
              >
              >
              >
              >
              >
              >
              >
              >
              > To unsubscribe from this group, send an email to:
              > soaplite-unsubscribe@yahoogroups.com
              >
              >
              >
              >
              >
              > Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
              >
              >
              >
              >
              >


              ^byrne :/
            • jpeyser
              OK!!!!!! Finally found the problem. I stand corrected a second time. The parts subroutine is defined in SOAP::SOM, but it has a bug. for my $method (qw(parts))
              Message 6 of 12 , Oct 31, 2003
                OK!!!!!!

                Finally found the problem. I stand corrected a second time.
                The parts subroutine is defined in SOAP::SOM, but it has a bug.

                for my $method (qw(parts)) {
                my $field = '_' . $method;
                *$method = sub {
                ### my $self = shift->new;
                my $self = shift;
                @_ ? ($self->{$field} = shift, return $self) : return $self->
                {$field};
                }
                }

                (The parts subroutine was defined in a new instance of SOAP::SOM.)


                A second problem in package SOAP::MIMEParser.

                sub decode {
                my $self = shift;
                my $entity = eval { $self->parse_data(shift) }
                or die "Something wrong with MIME message: @{[$@ || $self-
                >last_error]}\n";

                # initialize with empty array; autovivification doesn't work in
                this case --PK
                ### $self->parts([]) if $entity->parts;
                $self->{_parts} = [] if $entity->parts;

                (This was initializing the array with an empty array
                as it's first element.)

                --- In soaplite@yahoogroups.com, "Byrne Reese" <byrne@m...> wrote:
                > The SOAP::SOM object returned by SOAP::Lite has a subroutine called
                > 'parts' - which contains the array of MIME::Entity objects.
                >
                > >
                > >
                > >
                > >
                > > In the same context I have another silly question:
                > > The server returns data and an attachment like:
                > > return SOAP::Data-
                > > How does the client recieve this?
                > > $som-
                > >
                > > - JS
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > > Yahoo! Groups Sponsor
                > >
                > >
                > > ADVERTISEMENT
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > >
                > > To unsubscribe from this group, send an email to:
                > > soaplite-unsubscribe@yahoogroups.com
                > >
                > >
                > >
                > >
                > >
                > > Your use of Yahoo! Groups is subject to the Yahoo! Terms of
                Service.
                > >
                > >
                > >
                > >
                > >
                >
                >
                > ^byrne :/
              • techrg99
                Here is a complete and working example of attachemnt download: Here is the server side - MIME_Test.pm - I am using Apache/mod_perl server: package MIME_Test;
                Message 7 of 12 , Nov 4, 2003
                  Here is a complete and working example of attachemnt download:
                  Here is the server side - MIME_Test.pm - I am using Apache/mod_perl
                  server:

                  package MIME_Test;

                  use strict;
                  use SOAP::Lite;
                  use MIME::Entity;
                  use IO::File;
                  use Digest::MD5 qw(md5_base64);

                  use vars qw(@ISA);
                  @ISA = qw(SOAP::Server::Parameters);

                  sub echo3 {
                  my $self = shift;
                  my $envelope = pop;
                  my ($info, $md5_check) = @_;

                  my $file = "/usr/local/jci/gim/tmp/anim.gif";

                  my $ent = MIME::Entity->build(Type => "image/gif",
                  Encoding => "base64",
                  Path => $file,
                  Filename => "anim.gif",
                  Disposition => "attachment",
                  Mode => 1);

                  my $checksum = `GET_CHECKSUM.pl $file`;

                  return SOAP::Data->name("checksum" => $checksum), $ent;
                  }


                  where $checksum is a MD5 checksum - this is not really needed but I
                  threw it in my example - here is the code for GET_CHECKSUM.pl and the
                  reason I wrote it is because if I call this in the echo3 code
                  directly, I do not get the correct checksum - not sure where the
                  conflict is, but if anyone can advise on this - I would greatly
                  appreciate it...

                  # GET_CHECKSUM.pl:
                  use strict;
                  use Digest::MD5 qw(md5_base64);

                  my $checksum = "";
                  if(open(FILE, $ARGV[0])) {
                  binmode(FILE);
                  $checksum = md5_base64(*FILE);
                  close FILE;
                  }
                  print $checksum;




                  Here is the client side:


                  use strict;
                  use SOAP::Lite +trace => qw(debug);
                  use MIME::Entity;
                  use Digest::MD5 qw(md5 md5_hex md5_base64);

                  my $soap = SOAP::Lite
                  -> readable(1)
                  -> uri("http://$host:$port/MIME_Test")
                  -> proxy("http://$host:$port/$proxy");

                  my $som = $soap->echo3;
                  my $part = $som->parts->[0];

                  my $checksum = $som->result;

                  print "SOAP = $soap\n";
                  print "SOM = $som\n";
                  print "SOM REF = " . ref($som->parts) . "\n";
                  print "PART = $part\n";
                  print "CHECKSUM= $checksum\n";

                  my $bh;
                  my $io;
                  my $buf;

                  open FILE, "> anim3.gif";
                  binmode FILE;

                  if($bh = $$part->bodyhandle) {
                  $io = $bh->open;

                  while($io->read($buf, 1024)) {
                  print FILE $buf;
                  }

                  $io->close;
                  }

                  my $checksum2 = md5_base64(*FILE);
                  close FILE;

                  print "CHECKSUM= $checksum2\n";

















                  --- In soaplite@yahoogroups.com, "Byrne Reese" <byrne@m...> wrote:
                  > The SOAP::SOM object returned by SOAP::Lite has a subroutine called
                  > 'parts' - which contains the array of MIME::Entity objects.
                  >
                  > >
                  > >
                  > >
                  > >
                  > > In the same context I have another silly question:
                  > > The server returns data and an attachment like:
                  > > return SOAP::Data-
                  > > How does the client recieve this?
                  > > $som-
                  > >
                  > > - JS
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > > Yahoo! Groups Sponsor
                  > >
                  > >
                  > > ADVERTISEMENT
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > >
                  > > To unsubscribe from this group, send an email to:
                  > > soaplite-unsubscribe@yahoogroups.com
                  > >
                  > >
                  > >
                  > >
                  > >
                  > > Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
                  > >
                  > >
                  > >
                  > >
                  > >
                  >
                  >
                  > ^byrne :/
                • Byrne Reese
                  Thank you for finding this patch. I have made the changes to the source base, and am checking them in now. This will go out in the next release. ... ^byrne :/
                  Message 8 of 12 , Nov 12, 2003
                    Thank you for finding this patch. I have made the changes to the source
                    base, and am checking them in now. This will go out in the next release.
                    >
                    >
                    >
                    >
                    > OK!!!!!!
                    >
                    > Finally found the problem. I stand corrected a second time.
                    > The parts subroutine is defined in SOAP::SOM, but it has a bug.
                    >
                    > for my $method (qw(parts)) {
                    > my $field = '_' . $method;
                    > *$method = sub {
                    > ### my $self = shift-


                    ^byrne :/
                  Your message has been successfully submitted and would be delivered to recipients shortly.