-----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-----