From: Jason S. <jas...@gm...> - 2008-09-19 01:02:54
|
Hey All, I like your suggestions Martin. I think the namespace SOAP::Lite::Server::Document is definitely the way to go. I support the idea of using a SOAP::Data object in addition to an XML scalar as the value for either the client or the server. I will make a patch and some test cases and send them to the list. Cheers, jas. On Thu, Sep 18, 2008 at 11:25 PM, Martin Kutter <mar...@fe...> wrote: > Hi Jason, > > forcing the server developer to create XML may or may not be a good > idea, depending on it's complexity. > > How about making the proposed SOAP::Server::Document a bit more DWIM by > accepting either a scalar (which is supposed to be plain XML) or a > SOAP::Data object? > > This would ease migration for existing web services which want to move > to SOAP::Server::Document > > Maybe SOAP::Lite::Server::Document would be the more appropriate name - > the use of the SOAP namespace has provoked numerous errors on CPAN, so > SOAP::Lite is a better namespace for new modules. > > Thanks for your ideas, > > Martin > > Am Donnerstag, den 18.09.2008, 14:10 +0530 schrieb Jason Stewart: >> Hey All, >> >> So I've been doing a lot of digging through the codebase understanding >> how doc/lit could be used at the moment, and I find that the ease of >> use that S::L provides for rpc/enc is not matched in it's doc/lit >> support. I don't think it would take very much effort to enable simple >> support for doc/lit on both the client and the server - but very >> likely there would be issues with compatibility with Java and .NET >> implementations that would have to be worked out. >> >> For me the major difference is that a client wanting to use a doc/lit >> service wants to simply attach a pre-produced XML payload to the soap >> message - and the server wants to retrieve that message - WITHOUT ANY >> INTERFERENCE FROM SOAP::LIT. >> >> so we have: >> >> -- begin of client.pl 8< -- >> >> use SOAP::Lite; >> my $soap = SOAP::Lite->new( proxy => 'http://localhost:80/helloworld.pl'); >> >> my $xml =<<XML; >> <sayHello xmlns="urn:HelloWorld"> >> <name>Kutter</name> >> <givenName>Martin</givenName> >> </sayHello> >> >> <sayHelloResponse> >> <sayHelloResult>Hello Martin Kutter!</sayHelloResult> >> </sayHelloResponse> >> XML >> >> $soap->on_action( sub { "urn:HelloWorld#sayHello" }); >> $soap->autotype(0); >> $soap->default_ns('urn:HelloWorld'); >> >> my $som = $soap->document($xml)->call("sayHello"); >> >> die $som->fault->{ faultstring } if ($som->fault); >> print $som->result, "\n"; >> >> -- end of client.pl -- >> >> -- begin server.pl 8< -- >> >> package HelloWorld; >> use SOAP::Lite; >> >> use base qw(SOAP::Server::Document); >> >> sub sayHello { >> my $self = shift; >> my $doc = shift; >> my $som = shift; >> >> my $ret_val = some_processing_method($doc); >> return $ret_val; >> } >> >> -- end of server.pl -- >> >> The client builds an XML document inserts it into the request using >> the document() method on the SOAP object. >> >> The client subclasses from SOAP::Server::Document so it gets the XML >> payload as the second argument on the stack, processes it somehow, and >> returns an XML payload back to the client. >> >> feedback? >> >> Cheers, jas. >> > > |