The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Catalyst::Controller::SOAP - Catalyst SOAP Controller

SYNOPSIS

    package MyApp::Controller::Example;
    use base 'Catalyst::Controller::SOAP';

    # available in "/example" as operation "ping". The arguments are
    # treated as a literal document and passed to the method as a
    # XML::LibXML object
    # Using XML::Compile here will help you reading the message.
    sub ping : SOAP('RPCLiteral') {
        my ( $self, $c, $xml) = @_;
        my $name = $xml->findValue('some xpath expression');
    }

    # avaiable as "/example/world" in document context. The entire body
    # is delivered to the method as a XML::LibXML object.
    # Using XML::Compile here will help you reading the message.
    sub world :Local SOAP('DocumentLiteral')  {
        my ($self, $c, $xml) = @_;
    }

    # avaiable as "/example/get" in HTTP get context.
    # the get attributes will be available as any other
    # get operation in Catalyst.
    sub get :Local SOAP('HTTPGet')  {
        my ($self, $c) = @_;
    }

    # this is the endpoint from where the RPC operations will be
    # dispatched. This code won't be executed at all.
    # See Catalyst::Controller::SOAP::RPC.
    sub index :Local SOAP('RPCEndpoint') {}

ABSTACT

Implements SOAP serving support in Catalyst.

DESCRIPTION

SOAP Controller for Catalyst which we tried to make compatible with the way Catalyst works with URLS.It is important to notice that this controller declares by default an index operation which will dispatch the RPC operations under this class.

ATTRIBUTES

This class implements the SOAP attribute wich is used to do the mapping of that operation to the apropriate action class. The name of the class used is formed as Catalyst::Action::SOAP::$value, unless the parameter of the attribute starts with a '+', which implies complete namespace.

The implementation of SOAP Action classes helps delivering specific SOAP scenarios, like HTTP GET, RPC Encoded, RPC Literal or Document Literal, or even Document RDF or just about any required combination.

See Catalyst::Action::SOAP::DocumentLiteral for an example.

ACCESSORS

Once you tagged one of the methods, you'll have an $c->stash->{soap} accessor which will return an Catalyst::Controller::SOAP::Helper object. It's important to notice that this is achieved by the fact that all the SOAP Action classes are subclasses of Catalyst::Action::SOAP, which implements most of that.

You can query this object as follows:

$c->stash->{soap}->envelope()

The original SOAP envelope as string.

$c->stash->{soap}->parsed_envelope()

The parsed envelope as an XML::LibXML object.

$c->stash->{soap}->arguments()

The arguments of a RPC call.

$c->stash->{soap}->fault({code => $code,reason => $reason, detail => $detail])

Allows you to set fault code and message. Optionally, you may define the code itself as an arrayref where the first item will be this code and the second will be the subcode, which recursively may be another arrayref.

$c->stash->{soap}->encoded_return(\@data)

This method will prepare the return value to be a soap encoded data.

  # TODO: At this moment, only Literals are working...
$c->stash->{soap}->literal_return($xml_node)

This method will prepare the return value to be a literal XML document, in this case, you can pass just the node that will be the root in the return message or a nodelist.

Using XML::Compile will help to elaborate schema based returns.

$c->stash->{soap}->string_return($non_xml_text)

In this case, the given text is encoded as CDATA inside the SOAP message.

TODO

At this moment, almost everything is still to be done. The only thing done right now is getting the body from the message and dispatching the correct method. It is strongly recommended to use XML::Compile as a tool to deal with the XML nodes.

The SOAP Encoding support is also missing, when that is ready you'll be able to do something like the code below:

    # available in "/example" as operation "echo"
    # parsing the arguments as soap-encoded.
    sub echo : SOAP('RPCEncoded') {
        my ( $self, $c, @args ) = @_;
    }

SEE ALSO

Catalyst::Action::SOAP, XML::LibXML, XML::Compile Catalyst::Action::SOAP::DocumentLiteral, Catalyst::Action::SOAP::RPCLiteral, Catalyst::Action::SOAP::HTTPGet

AUTHORS

Daniel Ruoso daniel.ruoso@verticalone.pt

BUG REPORTS

Please submit all bugs regarding Catalyst::Controller::SOAP to bug-catalyst-controller-soap@rt.cpan.org

LICENSE

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.