Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/RPC/Service/SOAP/Lite.pm  view on Meta::CPAN

package Ambrosia::RPC::Service::SOAP::Lite;
use strict;

use SOAP::Lite;
use SOAP::Lite +trace => 'all';

use Ambrosia::Meta;
class
{
    private => [qw/__soap __proxy __outputxml __readable __default_ns __ns __soapversion __timeout __on_error/]
};

our $VERSION = 0.010;

sub _init
{
    my $self = shift;
    $self->SUPER::_init( @_ );
    $self->__outputxml = undef if $self->__outputxml ne 'true';
    $self->__soapversion = '1.2' unless $self->__soapversion;
    $self->__soap = undef;
    $self->__on_error = sub {
        my $soap = shift;
        my $som = shift;

        my $error_msg = join "\n", (
                ref $som
                ? ('SOAP FAULT: ', 'code: ' . $som->faultcode, 'desc: ' . $som->faultstring)
                : ('SOAP TRANSPORT ERROR', $soap->transport->status)
            );

        die $error_msg;
    };
}

sub open_connection
{
    my $self = shift;
    unless ( $self->__soap )
    {
        $self->__soap = SOAP::Lite
            ->outputxml($self->__outputxml)
            ->default_ns($self->__default_ns)
            ->readable($self->__readable)
            ->soapversion($self->__soapversion)
            ->on_fault($self->__on_error)
            ->proxy($self->__proxy);
        $self->__soap->ns($self->__ns) if $self->__ns;
    }
    return $self;
}

sub close_connection
{
    $_[0]->__soap = undef;
}
################################################################################

sub on_success
{
}

sub on_error
{
    my $self = shift;
    my $proc = shift;
    if ( $proc && ref $proc eq 'CODE' )
    {
        $self->__on_error = $proc;
    }
    return $self;
}

sub call
{
    my $self = shift;
    my $action = shift;
    my %params = @_;



( run in 0.965 second using v1.01-cache-2.11-cpan-364913b4093 )