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

Re: [soaplite] Newbie question on 'soapifying' existing modules

Expand Messages
  • Ski Kacoroski
    Jay, Thanks for your reply. ... Ok, This makes sense. ... Yes. So now I have changed the server to be: #!/usr/bin/perl -w use SOAP::Transport::HTTP; use
    Message 1 of 3 , Aug 3, 2006
    • 0 Attachment
      Jay,

      Thanks for your reply.
      >>
      >> 1. Why do I need the Net::XXXX calls in the soap server?
      >
      > When using "dispatch_to( <path> )" the @INC path is cleared for
      > security/sandboxing reasons. This means the "use Net::..." calls
      > inside your module will fail. The solution is to "use" them in the
      > SOAP server itself. When the system loads your module through the
      > "dispatch_to( <path> )" the "use" statements will be ignored because
      > the modules will already be in memory.
      >
      > See the "Service dispatch" section here: http://guide.soaplite.com/
      > for more information (especially the "Mixed" sub-section).
      >
      > Also, you don't need the "use lib '/usr/local/lib';" line in the
      > server.

      Ok, This makes sense.

      >
      >> 2. Why am I getting method access denied.
      >
      > Not exactly sure, but for some reason the system is convinced this
      > isn't a valid reference to something inside your dispatch path.
      > I assume the LDAPSOAP package is defined inside
      > /usr/local/lib/LDAPSOAP.pm ?
      >

      Yes. So now I have changed the server to be:

      #!/usr/bin/perl -w

      use SOAP::Transport::HTTP;
      use Net::LDAP;
      use Net::LDAPS;
      use Net::LDAP::Util qw(ldap_error_name);

      SOAP::Transport::HTTP::CGI
      -> dispatch_to('/usr/local/lib')
      -> handle;


      /usr/local/lib/LDAPSOAP is:

      package LDAPSOAP;

      use strict;
      use vars qw($VERSION);
      require Exporter;
      our @ISA = qw(Exporter);
      our @EXPORT = qw(school2Server);
      use Net::LDAP;
      use Net::LDAPS;
      use Net::LDAP::Util qw(ldap_error_name);

      our $VERSION = 0.5;

      # evaluate the perl code from the config filei
      our %nsdconf;
      do "/tmp/nsdconf.pl" or die
      "ERROR: could not read nsd config file $!\n";

      # Function to return the server given a school code
      sub school2Server {
      my ($school_code) = @_;
      return ($nsdconf{site_server}{$school_code});
      }

      The problem I am having is that it is not reading in the nsdconf.pl file
      which is where $nsdconf{site_server} is defined. Other than that it
      works. Is there a best practice on how to handle a configuration file
      for a module with Soap.


      >> 3. I was not able to get the server to work with modules that were
      >> linked into /usr/local/lib. I had to copy them this. Is this
      >> expected behavior.
      >
      > I'm not sure what you mean by "linked". If you mean the modules were
      > sym-linked in at a file system level into that directory, I'm
      > surprised that's an issue.

      I meant softlinks in the file system. If I replace the softlinks with
      the file it works. I think it may be because the softlink points into a
      directory that the apache web server does not have access to (even
      though the file is 644).

      Thanks for your help.

      cheers,

      ski
      --
      "When we try to pick out anything by itself, we find it
      connected to the entire universe" John Muir

      Chris "Ski" Kacoroski, kacoroski@..., 206-501-9803
    Your message has been successfully submitted and would be delivered to recipients shortly.