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

Re: [soaplite] Re: One More Question

Expand Messages
  • Paul Kulchenko
    Hi, Ivan! ... That s the way Perl works. $uri is NOT defined when you call use SOAP::Lite .... . And here is why. BEGIN block is executed as soon as it s
    Message 1 of 13 , Sep 19, 2001
    • 0 Attachment
      Hi, Ivan!

      > Still claims to fail with no transport specified. Ideas?
      That's the way Perl works. $uri is NOT defined when you call 'use
      SOAP::Lite ....'. And here is why. BEGIN block is executed as soon as
      it's compiled. But it's NOT compiled yet, because 'use ...' is INSIDE
      the block itself and since it also works as BEGIN it gets executed
      BEFORE $uri assignment. Simple example:

      BEGIN {
      print 'A';

      BEGIN { print 'B' }
      }

      print 'A' will be executed AFTER all of the outer begin is COMPILED,
      but during this compilation will be executed inner BEGIN block, so
      it'll print 'BA' instead of expected 'AB'. That's exactly what
      hapenning here. 'use ...' is executed before $uri is set.

      You need to do something like this:

      use strict;
      use SOAP::Lite 'autodispatch', 'debug';

      my $uri = 'http://alchesay.mcs.anl.gov:1180/';
      SOAP::Lite->self->uri($uri)->proxy($uri);

      my $videoC = AccessGrid::Node::VideoControl->new();
      print $videoC->killVideoApp();

      SOAP::Lite->self returns SOAP::Lite object that is used with
      autodispatch mode. You can get/set properties as with usual
      SOAP::Lite object. Hope it helps.

      Best wishes, Paul.

      --- judson@... wrote:
      > Ok, this is so cool. I've almost made everything work.
      >
      > But doing what this thread says hasn't worked for me.
      >
      > The code:
      >
      > use strict;
      > use SOAP::Lite 'debug';
      >
      > my ($uri);
      >
      > BEGIN {
      > $uri = 'http://alchesay.mcs.anl.gov:1180/';
      >
      > use SOAP::Lite +autodispatch =>
      > uri => $uri,
      > proxy => $uri,
      > debug => sub { print @_; }
      > ;
      > }
      >
      > my $videoC = AccessGrid::Node::VideoControl->new();
      > print $videoC->killVideoApp();
      >
      > exit 0
      >
      > Still claims to fail with no transport specified. Ideas?
      >
      > --Ivan
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      >
      > --- In soaplite@y..., Paul Kulchenko <paulclinger@y...> wrote:
      > > Hi, Craig!
      > >
      > > > my $uri = "http://localhost/";
      > > > my $proxy = "http://localhost:1983/";
      > > >
      > > > use SOAP::Lite +autodispatch =>
      > > > uri => $uri,
      > > > proxy => $proxy,
      > > > debug => sub { print @_; }
      > > > ;
      > > Answer is simple. 'use' code is executed during the COMPILE stage
      >
      > and
      > > value of $proxy (and $uri) variable is undefined. It WILL be
      > defined
      > > during the EXECUTION phase, but use block alredy executed by that
      > > time. You need to wrap it in BEGIN block:
      > >
      > > BEGIN {
      > > my $uri = "http://localhost/";
      > > my $proxy = "http://localhost:1983/";
      > >
      > > use SOAP::Lite +autodispatch =>
      > > uri => $uri,
      > > proxy => $proxy,
      > > debug => sub { print @_; }
      > > ;
      > > }
      > >
      > > or wrap 'use' in eval to delay execution:
      > >
      > > my $uri = "http://localhost/";
      > > my $proxy = "http://localhost:1983/";
      > >
      > > eval q!
      > > use SOAP::Lite +autodispatch =>
      > > uri => $uri,
      > > proxy => $proxy,
      > > debug => sub { print @_; }
      > > ;
      > > 1;
      > > ! or die;
      > >
      > > or write proxy => 'http://...';
      > >
      > > Should help. Let me know if you have any other questions.
      > >
      > > Best wishes, Paul.
      > >
      > > --- Craig Kelley <kellcrai@i...> wrote:
      > > >
      > > > Hello Again,
      > > >
      > > > I have my code working fine, but I was wondering why this
      > specific
      > > > example
      > > > is wrong:
      > > >
      > > > --= Server =--
      > > > use strict;
      > > > use SOAP::Transport::HTTP;
      > > >
      > > > $SIG{PIPE} = 'IGNORE';
      > > >
      > > > my $daemon = SOAP::Transport::HTTP::Daemon
      > > > -> new (LocalPort => 1983)
      > > > ->
      > > >
      > > dispatch_to
      > ('/usr/local/home/ink/programming/pharmon/server/server_mods')
      > > > ;
      > > >
      > > > print "Contact to SOAP server at ", $daemon->url, "\n";
      > > > $daemon->handle;
      > > >
      > > >
      > > >
      > > > --= Client =--
      > > > use strict;
      > > > use Carp;
      > > >
      > > > my $uri = "http://localhost/";
      > > > my $proxy = "http://localhost:1983/";
      > > >
      > > > use SOAP::Lite +autodispatch =>
      > > > uri => $uri,
      > > > proxy => $proxy,
      > > > debug => sub { print @_; }
      > > > ;
      > > >
      > > >
      > > >
      > > > The server works fine. The BEGIN{} for the SOAP::Lite client
      > > > always dies
      > > > with this error message:
      > > >
      > > > proxy: transport protocol not specified
      > > > BEGIN failed--compilation aborted at ./client.pl line 22.
      > > >
      > > > I looked through the Lite.pm code and found that proxy() was
      > being
      > > > called
      > > > with a single null parameter (which fired the error message).
      > > > Going
      > > > backwards from there seemed a bit daunting :)
      > > >
      > > > PS - When is the Perl SOAP::Lite book coming out? :)
      > > >
      > > > -Craig
      > > >
      > > >
      > > >
      > > > To unsubscribe from this group, send an email to:
      > > > soaplite-unsubscribe@y...
      > > >
      > > >
      > > >
      > > > Your use of Yahoo! Groups is subject to
      > > > http://docs.yahoo.com/info/terms/
      > > >
      > > >
      > >
      > >
      > > __________________________________________________
      > > Do You Yahoo!?
      > > Yahoo! Auctions - buy the things you want at great prices
      > > http://auctions.yahoo.com/
      >
      >
      > ------------------------ Yahoo! Groups Sponsor
      >
      > 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/
      >
      >


      __________________________________________________
      Terrorist Attacks on U.S. - How can you help?
      Donate cash, emergency relief information
      http://dailynews.yahoo.com/fc/US/Emergency_Information/
    • Chris Davies
      Hi Rather than posting with a subject of one more question , etc., can you please consider using a descriptive subject related to your email. That way, when
      Message 2 of 13 , Sep 20, 2001
      • 0 Attachment
        Hi
         
        Rather than posting with a subject of "one more question", etc., can you please consider using a descriptive subject related to your email. That way, when someone searches the archives it's easier to see messages of interest.
         
        Cheers,
        Chris
         
        -----Original Message-----
        From: judson@... [mailto:judson@...]
        Sent: Thursday, September 20, 2001 2:21 AM
        To: soaplite@yahoogroups.com
        Subject: [soaplite] Re: One More Question

        Ok, this is so cool.  I've almost made everything work.

        But doing what this thread says hasn't worked for me.

        The code:

        use strict;
        use SOAP::Lite 'debug';

        my ($uri);

        BEGIN {
          $uri = 'http://alchesay.mcs.anl.gov:1180/';

          use SOAP::Lite +autodispatch =>
            uri => $uri,
            proxy => $uri,
            debug => sub { print @_; }
           ;
        }

        my $videoC = AccessGrid::Node::VideoControl->new();
        print $videoC->killVideoApp();

        exit 0

        Still claims to fail with no transport specified.  Ideas?

        --Ivan













        --- In soaplite@y..., Paul Kulchenko <paulclinger@y...> wrote:
        > Hi, Craig!
        >
        > > my $uri = "http://localhost/";
        > > my $proxy = "http://localhost:1983/";
        > >
        > > use SOAP::Lite +autodispatch =>
        > >   uri => $uri,
        > >   proxy => $proxy,
        > >   debug => sub { print @_; }
        > >   ;
        > Answer is simple. 'use' code is executed during the COMPILE stage
        and
        > value of $proxy (and $uri) variable is undefined. It WILL be defined
        > during the EXECUTION phase, but use block alredy executed by that
        > time. You need to wrap it in BEGIN block:
        >
        > BEGIN {
        >   my $uri = "http://localhost/";
        >   my $proxy = "http://localhost:1983/";

        >   use SOAP::Lite +autodispatch =>
        >     uri => $uri,
        >     proxy => $proxy,
        >     debug => sub { print @_; }
        >   ;
        > }
        >
        > or wrap 'use' in eval to delay execution:
        >
        >   my $uri = "http://localhost/";
        >   my $proxy = "http://localhost:1983/";
        >
        > eval q!
        >   use SOAP::Lite +autodispatch =>
        >     uri => $uri,
        >     proxy => $proxy,
        >     debug => sub { print @_; }
        >   ;
        >  1;
        > ! or die;
        >
        > or write proxy => 'http://...';
        >
        > Should help. Let me know if you have any other questions.
        >
        > Best wishes, Paul.
        >
        > --- Craig Kelley <kellcrai@i...> wrote:
        > >
        > > Hello Again,
        > >
        > > I have my code working fine, but I was wondering why this specific
        > > example
        > > is wrong:
        > >
        > >  --= Server =--
        > > use strict;
        > > use SOAP::Transport::HTTP;
        > >
        > > $SIG{PIPE} = 'IGNORE';
        > >
        > > my $daemon = SOAP::Transport::HTTP::Daemon
        > >     -> new (LocalPort => 1983)
        > >     ->
        > >
        > dispatch_to
        ('/usr/local/home/ink/programming/pharmon/server/server_mods')
        > >   ;
        > >
        > > print "Contact to SOAP server at ", $daemon->url, "\n";
        > >   $daemon->handle;
        > >
        > >
        > >
        > >  --= Client =--
        > > use strict;
        > > use Carp;
        > >
        > > my $uri = "http://localhost/";
        > > my $proxy = "http://localhost:1983/";
        > >
        > > use SOAP::Lite +autodispatch =>
        > >   uri => $uri,
        > >   proxy => $proxy,
        > >   debug => sub { print @_; }
        > >   ;
        > >
        > >
        > >
        > > The server works fine.  The BEGIN{} for the SOAP::Lite client
        > > always dies
        > > with this error message:
        > >
        > > proxy: transport protocol not specified
        > > BEGIN failed--compilation aborted at ./client.pl line 22.
        > >
        > > I looked through the Lite.pm code and found that proxy() was being
        > > called
        > > with a single null parameter (which fired the error message).
        > > Going
        > > backwards from there seemed a bit daunting :)
        > >
        > > PS - When is the Perl SOAP::Lite book coming out?  :)
        > >
        > >   -Craig
        > >
        > >
        > >
        > > To unsubscribe from this group, send an email to:
        > > soaplite-unsubscribe@y...
        > >
        > > 
        > >
        > > Your use of Yahoo! Groups is subject to
        > > http://docs.yahoo.com/info/terms/
        > >
        > >
        >
        >
        > __________________________________________________
        > Do You Yahoo!?
        > Yahoo! Auctions - buy the things you want at great prices
        > http://auctions.yahoo.com/



        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.
      Your message has been successfully submitted and would be delivered to recipients shortly.