The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

XML::Compile::SOAP::Daemon - base class for SOAP message servers

INHERITANCE

 XML::Compile::SOAP::Daemon is extended by
   XML::Compile::SOAP::HTTPDaemon

SYNOPSIS

 #### have a look in the examples directory!

 # Be warned that the daemon will be Net::Server based, which consumes
 # command-line arguments!
 my $deamon  = XML::Compile::SOAP::HTTPDaemon->new;

 # daemon definitions from WSDL
 my $wsdl    = XML::Compile::WSDL11->new(...);
 $wsdl->importDefinitions(...); # more schemas
 $deamon->operationsFromWSDL($wsdl, handlers => ...);

 # daemon definitions added manually
 my $soap11  = XML::Compile::SOAP11::Server->new(schemas => $wsdl->schemas);
 my $handler = $soap11->compileHandler(...);
 $deamon->addHandler('getInfo', $soap11, $handler);

 # see what is defined:
 $daemon->printIndex;

 # finally, run the server.  This never returns.
 $daemon->run(...daemon options...);

DESCRIPTION

This base class implements the common needs between various types of SOAP daemons. As daemon type, you can use any kind of Net::Server implementation.

The following extensions are implemented on the moment: (other are not yet planned to get implemented)

.

XML::Compile::SOAP::HTTPDaemon, for transport over HTTP.

The deamon can handle various kinds of SOAP protocols at the same time, when possible hidden from the user of this module.

If you have a WSDL describing your procedures, then the only thing you have to worry about is adding callbacks for each of the defined ports. Without WSDL, you will need to do more manually, but it is still relatively simple to achieve.

Do not forget to take a look at the extensive example, enclosed in the XML::Compile::SOAP::Daemon distribution package. It is really worth the time.

METHODS

Constructors

XML::Compile::SOAP::Daemon->new(OPTIONS)

    Create the server handler, which extends some class which implements a Net::Server.

    Any daemon configuration parameter should be passed with run(). This is a little tricky. Read below in the "Configuration options" section.

     Option        --Default
     based_on        <internal Net::Server::PreFork>
     output_charset  'UTF-8'
     support_soap    'ANY'

    . based_on => Net::Server OBJECT|CLASS

      You may pass your own Net::Server compatible daemon, if you feel a need to initialize it or prefer an other one. Preferrably, pass configuration settings to run(). You may also specify any Net::Server compatible CLASS name.

    . output_charset => STRING

      The character-set to be used for the output XML document.

    . support_soap => 'SOAP11'|'SOAP12'|'ANY'|SOAP

      Which versions of SOAP to support. Quite an amount of preparations must be made to start a server, which can be reduced by enforcing a single SOAP type, specified as version string or XML::Compile::SOAP object.

Attributes

$obj->isSupportedVersion(('SOAP11'|'SOAP12'))

$obj->outputCharset

    The character-set to be used for output documents.

Running the server

$obj->process(CLIENT, XMLIN)

    The parsed XMLIN SOAP-structured message (an XML::LibXML::Element or XML::LibXML::Document), was received from the CLIENT (some extension specific object). Returned is an XML document as answer.

$obj->run(OPTIONS)

    See Net::Server subroutine run, but the OPTIONS are passed as list, not as HASH.

Preparations

$obj->addHandler(NAME, SOAP, CODE)

    The SOAP value is SOAP11, SOAP12, or a SOAP server object. The CODE reference is called with the incoming document (an XML::LibXML::Document) of the received input message.

    In case the handler does not understand the message, it should return undef. Otherwise, it must return a correct answer message as XML::LibXML::Document.

$obj->operationsFromWSDL(WSDL, OPTIONS)

    Compile the operations found in the WSDL object (an XML::Compile::WSDL11). You can add the operations from many different WSDLs into one server, simply by calling this method repeatedly.

     Option          --Default
     callbacks         {}
     default_callback  <produces fault reply>

    . callbacks => HASH

      The keys are the port names, as defined in the WSDL. The values are CODE references which are called in case a message is received which seems to be addressing the port (this is a guess). See "Operation handlers"

    . default_callback => CODE

      When a message arrives which has no explicit handler attached to it, this handler will be called. By default, an "not implemented" fault will be returned. See "Operation handlers"

Helpers

$obj->acceptResponse(REQUEST, XML)

    Returns an implementation dependent wrapper around a produced response.

$obj->faultMessageNotRecognized(SOAPVERSION, BODYELEMENT, DEFINED)

    The SOAP VERSION, the type of the first BODY ELEMENT, and the ARRAY of DEFINED message names.

$obj->faultNotImplemented(NAME, XML, INFO)

    Called as any handler, with the procedure NAME (probably the portType from the WSDL), the incoming XML message, and structural message INFO.

$obj->faultNotSoapMessage(NODETYPE)

$obj->faultTryOtherProtocol(SOAPVERSION, BODYELEMENT, OTHER)

    The SOAP VERSION, the type of the first BODY ELEMENT, and an ARRAY of OTHER protocols are passed.

$obj->faultUnsupportedSoapVersion(ENV_NS)

$obj->handlers(('SOAP11'|'SOAP12'|SOAP))

    Returns all the handler names for a certain soap version.

    example:

     foreach my $version (sort $server->soapVersions)
     {   foreach my $action (sort $server->handlers($version))
         {  print "$version $action\n";
         }
     }

$obj->inputToXML(CLIENT, ACTION, XML-STRING-REF)

    Translate a textual XML message into an XML::LibXML tree.

$obj->printIndex([FILEHANDLE])

    Print a table which shows the messages that the server can handle, by default to STDOUT.

$obj->soapFault(SOAPVERSION, DATA, [RC, ABSTRACT])

    Create the fault document. The error code (RC) is not always available, as is an ABSTRACT description of the problem.

$obj->soapVersions

DETAILS

Configuration options

This module will wrap any kind of Net::Server, for instance a Net::Server::PreFork. It depends on the type of Net::Server you specify (see new(based_on)) which conifguration options are available on the command-line, in a configuration file, or with run(). Each daemon extension implementation will add some configuration options as well.

Any XML::Compile::SOAP::Daemon object will have the following additional configuration options:

  Key          Value                            Default
  # there will be some, I am sure of it.

Some general configuration options of Net::Server have a different default. See also the next section about logging.

  Key          Value                            New default
  setsid       boolean                          true
  background   boolean                          true

logging

An attempt is made to merge XML::Compile's Log::Report and Net::Server log configuration. By hijacking the log() method, all Net::Server internal errors are dispatched over the Log::Report framework. Log levels are translated into report reasons: 0=ERROR, 1=WARNING, 2=NOTICE, 3=INFO, 4=TRACE.

When you specify Sys::Syslog or a filename, default dispatchers of type SYSLOG resp FILE are created for you. When the log_file type is set to Log::Report, you have much more control over the process, but all log related configuration options will get ignored. In that case, you must have initialized the dispatcher framework the way Log::Report is doing it: before the daemon is initiated. See Log::Report subroutine dispatcher.

  Key          Value                            Default
  log_file     filename|Sys::Syslog|Log::Report Log::Report
  log_level    0..4 | REASON                    2 (NOTICE)

Operation handlers

SEE ALSO

This module is part of XML-Compile-SOAP-Daemon distribution version 0.11, built on June 06, 2008. Website: http://perl.overmeer.net/xml-compile/

All modules in this suite: "XML::Compile", "XML::Compile::SOAP", "XML::Compile::SOAP::Daemon", "XML::Compile::Tester", "XML::Compile::Cache", "XML::Compile::Dumper".

Please post questions or ideas to http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile For life contact with other developers, visit the #xml-compile channel on irc.perl.org.

LICENSE

Copyrights 2007-2008 by Mark Overmeer. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html

1 POD Error

The following errors were encountered while parsing the POD:

Around line 359:

alternative text 'http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/xml-compile' contains non-escaped | or /