-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I've continued to work on this, but have been unable to progress past
this point. mod_perl seems to work just fine on both systems, except
when it comes to SOAP, in which case I'm getting exactly the same errors
on both systems. I must be doing SOMETHING wrong, but danged if I can
spot it. While I'm familiar with Perl, I am less familiar with SOAP and
mod_perl. I've doublechecked the httpd.conf entries and I believe they
are correct. The Demo.pm file is too simple to have an error (famous
last words), so now I've concerntrating on the client code, which is the
part I understand the least.

In particular, I'm confused about the value passed to uri(). I'm using
"http://<my server>/Demo", where Demo is the name of the module I want
to call, and Demo.pm is in the PATH. That, and "http://localhost/Demo";
both work in my CGI-based SOAP experiments, but neither works with
mod_perl. Is this an area where mod_perl and CGI differ?

Thanks for any clues anyone can provide.

Steve

Steve Baker wrote:
| I am trying to get SOAP to work under mod_perl. Googling about and
| reading what I can find on it, it looks like there are many ways to do
| this, but they are all giving me the same (non-working) result.
|
| I have two systems I'm trying to do this on: A Mac with Apache
| 1.3.33/mod_perl 1.29, and a Soalris 8 box with Apache 1.3.28 and
| mod_perl 1.27.
|
| My most recent attempts have been with Apache::SOAP, so I'll use that as
| my example:
|
| I have this in my httpd.conf:
|
|     <Location /steve/rpc/>
|         SetHandler perl-script
|         PerlHandler Apache::SOAP
|         PerlSetVar dispatch_to 'Demo'
|     </Location>
|
| Demo.pm is in the @INC path. It contains:
|
|     package Demo;
|
|     sub hi {
|       return "hello, world";
|     }
|
|
| I call it like this:
|
|     use SOAP::Lite +trace => [qw(all)];
|
|     my $soap = SOAP::Lite->uri('http://<my server>/Demo');
|     my $proxy = $soap->proxy('http://<my server>/steve/rpc/');
|     my $obj = $proxy->hi();
|     print $obj->result;
|
| The (rather verbose) output is:
|
| SOAP::Transport::new: ()
| SOAP::Serializer::new: ()
| SOAP::Deserializer::new: ()
| SOAP::Parser::new: ()
| SOAP::Lite::new: ()
| SOAP::Transport::HTTP::Client::new: ()
| SOAP::Lite::call: ()
| SOAP::Serializer::envelope: ()
| SOAP::Serializer::envelope: hi
| SOAP::Data::new: ()
| SOAP::Data::new: ()
| SOAP::Data::new: ()
| SOAP::Data::new: ()
| SOAP::Transport::HTTP::Client::send_receive: HTTP::Request=HASH(0x18baed8)
| SOAP::Transport::HTTP::Client::send_receive: POST
| http://www.cm.aol.com/steve/rpc/ HTTP/1.1
| Accept: text/xml
| Accept: multipart/*
| Content-Length: 448
| Content-Type: text/xml; charset=utf-8
| SOAPAction: "http://www.cm.aol.com/Demo#hi";
|
| <?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope
| 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:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";><SOAP-ENV:Body><namesp1:hi

|
|
xmlns:namesp1="http://www.cm.aol.com/Demo"/></SOAP-ENV:Body></SOAP-ENV:Envelope>

|
| SOAP::Transport::HTTP::Client::send_receive:
HTTP::Response=HASH(0x18c18e4)
| SOAP::Transport::HTTP::Client::send_receive: HTTP/0.9 200 (OK) EOF
| Client-Date: Thu, 18 Aug 2005 16:22:41 GMT
| Client-Peer: 10.178.2.10:80
| Client-Response-Num: 1
|
| Can't call method "result" on an undefined value at ./test1.pl line 13.
| SOAP::Lite::DESTROY: ()
| SOAP::Serializer::DESTROY: ()
| SOAP::Data::DESTROY: ()
| SOAP::Data::DESTROY: ()
| SOAP::Data::DESTROY: ()
| SOAP::Data::DESTROY: ()
| SOAP::Deserializer::DESTROY: ()
| SOAP::Parser::DESTROY: ()
| SOAP::Transport::DESTROY: ()
| SOAP::Transport::HTTP::Client::DESTROY: ()
|
|
| The problem is the $obj is always undefined. This happens whether or not
| the method I call actually exists, which leads me to believe the Demo.pm
| file isn't even being loaded, but I'm not sure of that. It seems like it
| SHOULD be loaded...
|
| On the Mac, calling the method "$proxy->hi();" kills the Apache child
| process with an error like this in the error_log:
|
| [Thu Aug 18 09:21:40 2005] [notice] child pid 868 exit signal Bus error
| (10)
|
| I THINK the child process is being killed on the Solaris box too, but
| I'm not sure of that. There's nothing in the log about it, but that's a
| production box and I'm not free to mess with it too much in my testing.
|
| As I mentioned, I've tried other methods (SOAP::Transport::HTTP::Apache
| and Apache::Registry) and I get exactly the same result. I've follwed
| examples from "mod_perl Developer's Cookbook", and "Programming Web
| Services with Perl" as well as from perl.apache.org and
| guilde.soaplite.com. It's only the mod_perl examples I can't get to
| work. I'm using these scripts (Demo.pm and others) fine with CGI SOAP.
| I'm thinking something is misconfigured in mod_perl, but darned if I can
| figure out what.
|
| Can anyone point out what I'm missing? Or at least point out a different
| FM to R?
|
| Thanks
| --
| Steve Baker
| kiku wa ittoki no haji
| kikanu wa matsudai no haji

- --
Steve Baker
kiku wa ittoki no haji
kikanu wa matsudai no haji
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Darwin)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDCf9Xz179gX3oLkwRAi+EAKCcqbZUvkFVLXbH5+rXG0heSafkWACggFVx
3D2nlvWo66oJuurDSY39tXE=
=Wwth
-----END PGP SIGNATURE-----

Reply via email to