SOAP::WSDL::Transport::Test - Test transport class for SOAP::WSDL


SOAP-WSDL documentation Contained in the SOAP-WSDL distribution.

Index


Code Index:

NAME

Top

SOAP::WSDL::Transport::Test - Test transport class for SOAP::WSDL

SYNOPSIS

Top

 use SOAP::WSDL::Client;
 use SOAP::WSDL::Transport::Test;

 my $soap = SOAP::WSDL::Client->new()
 $soap->get_transport->set_base_dir('.');
 $soap->call('method', \%body, \%header);

DESCRIPTION

Top

SOAP::WSDL::Transport::Test is a file-based test transport backend for SOAP::WSDL.

When SOAP::WSDL::Transport::Test is used as transport backend, the reponse is read from a XML file and the request message is discarded. This is particularly useful for testing SOAP::WSDL plugins.

Filename resolution

SOAP::WSDL::Transport makes up the response XML file name from the SOAPAction of the request. The following filename is used:

 base_dir / soap_action .xml

The protocol scheme (e.g. http:) and two heading slashes (//) are stripped from the soap_action.

base_dir defaults to '.'

Examples:

 SOAPAction: http://somewhere.over.the.rainbow/webservice/webservice.asmx
 Filename: ./somewhere.over.the.rainbow/webservice/webservice.asmx.xml

 SOAPAction: uri:MyWickedService/test
 Filename: ./MyWickedService/test.xml




METHODS

Top

set_base_dir

Sets the base directory SOAP::WSDL::Transport::Test should look for response files.

LICENSE AND COPYRIGHT

Top

AUTHOR

Top

Martin Kutter <martin.kutter fen-net.de>

REPOSITORY INFORMATION

Top

 $Rev: 218 $
 $LastChangedBy: kutterma $
 $Id: HTTP.pm 218 2007-09-10 16:19:23Z kutterma $
 $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Transport/HTTP.pm $


SOAP-WSDL documentation Contained in the SOAP-WSDL distribution.

package SOAP::WSDL::Transport::Test;
use strict;
use warnings;
use Class::Std::Fast::Storable;
use SOAP::WSDL::Factory::Transport;

use version; our $VERSION = qv('2.00.10');

SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );
SOAP::WSDL::Factory::Transport->register( https => __PACKAGE__ );

my %code_of :ATTR(:name<code>           :default<()>);
my %status_of :ATTR(:name<status>       :default<()>);
my %message_of :ATTR(:name<message>     :default<()>);
my %is_success_of :ATTR(:name<is_success> :default<()>);
my %base_dir_of :ATTR(:name<base_dir> :init_arg<base_dir> :default<.>);

# create methods normally inherited from SOAP::Client
SUBFACTORY: {
    no strict qw(refs);
    foreach my $method ( qw(code message status is_success) ) {
        *{ $method } = *{ "get_$method" };
    }
}

sub send_receive {
    my ($self, %parameters) = @_;
    my ($envelope, $soap_action, $endpoint, $encoding, $content_type) =
        @parameters{qw(envelope action endpoint encoding content_type)};

    my $filename = $soap_action;
    $filename =~s{ \A(:?'|") }{}xms;
    $filename =~s{ (:?'|")\z }{}xms;
    $filename =~s{ \A [^:]+ : (:? /{2})? }{}xms;

    $filename = join '/', $base_dir_of{ ${ $self } }, "$filename.xml";

    if (not -r $filename) {
        warn "cannot access $filename";
        $self->set_code( 500 );
        $self->set_message( "Failed" );
        $self->set_is_success(0);
        $self->set_status("500 Failed");
        return;
    }

    open my $fh, '<', $filename or die "cannot open $filename: $!";
    binmode $fh;
    my $response = <$fh>;
    close $fh or die "cannot close $filename: $!";

    $self->set_code( 200 );
    $self->set_message( "OK" );
    $self->set_is_success(1);
    $self->set_status("200 OK");
    return $response;
}

1;