http://qs321.pair.com?node_id=652301


in reply to Re^2: SOAP::Transport::HTTP::Daemon and XML
in thread SOAP::Transport::HTTP::Daemon and XML

I have the WSDL description, but only in file form.
Are you sure?

Web-services commonly serve their WSDL from the proxy URL with '?WSDL' appended.

The SOAP::Transport::HTTP::Server subclasses don't make it easy to serve your WSDL from the same service, so what I do is the following:

  1. use the HTTP::Request->parse constructor from HTTP::Request to build a request from the raw incoming request, then
  2. (depending on the $request->uri) I either:
    • build a response containing WSDL, or
    • pass $request directly to SOAP::Transport::HTTP::Server like this:

      my $soap = SOAP::Transport::HTTP::Server -> new(%args) -> dispatch_to(@classes); $soap->request($request); $soap->handle; my $response = $soap->response;

Is it necessary that WSDL file be web served? I don't see how to use it as local file, is it possible?
Sure, do something like this:

my $soap = SOAP::WSDL->new(); $soap->wsdl('file:/path/to/file.wsdl'); $soap->proxy('http://server/service.cgi'); $soap->wsdlinit(caching => 1);
Loading from the file saves some time on script startup, using caching saves a lot of work on each request.

Update: Fixed my URLs.

-David