[Catalyst-commits] r7545 - in Catalyst-Controller-SOAP/1.0/tags: .
0.3 0.3/lib/Catalyst/Action 0.3/lib/Catalyst/Action/SOAP
0.3/lib/Catalyst/Controller 0.3/t
0.3/t/PostApp/lib/PostApp/Controller
ruoso at dev.catalyst.perl.org
ruoso at dev.catalyst.perl.org
Tue Apr 1 18:22:29 BST 2008
Author: ruoso
Date: 2008-04-01 18:22:29 +0100 (Tue, 01 Apr 2008)
New Revision: 7545
Added:
Catalyst-Controller-SOAP/1.0/tags/0.3/
Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST
Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t
Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp/lib/PostApp/Controller/WithWSDL.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/t/hello.wsdl
Removed:
Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST
Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm
Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t
Log:
[C-C-S] Tagging version 0.3
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3 (from rev 7540, Catalyst-Controller-SOAP/1.0/trunk)
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/MANIFEST 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,26 +0,0 @@
-Changes
-Makefile.PL
-MANIFEST
-META.yml
-README
-t/Catalyst-Controller-SOAP.t
-t/PostApp.t
-t/lib/TestApp/Controller/WS.pm
-t/lib/TestApp/Controller/Root.pm
-t/lib/TestApp.pm
-t/PostApp/script/postapp_cgi.pl
-t/PostApp/script/postapp_test.pl
-t/PostApp/script/post.pl
-t/PostApp/script/postapp_server.pl
-t/PostApp/lib/PostApp/Controller/WS.pm
-t/PostApp/lib/PostApp/Controller/Root.pm
-t/PostApp/lib/PostApp/Controller/WS2.pm
-t/PostApp/lib/PostApp.pm
-t/PostApp/postapp.yml
-lib/Catalyst/Action/SOAP.pm
-lib/Catalyst/Action/SOAP/DocumentLiteral.pm
-lib/Catalyst/Action/SOAP/HTTPGet.pm
-lib/Catalyst/Action/SOAP/RPCEndpoint.pm
-lib/Catalyst/Action/SOAP/RPCLiteral.pm
-lib/Catalyst/Controller/SOAP.pm
-lib/Catalyst/Controller/SOAP/RPC.pm
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST (from rev 7543, Catalyst-Controller-SOAP/1.0/trunk/MANIFEST)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/MANIFEST 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,28 @@
+Changes
+Makefile.PL
+MANIFEST
+META.yml
+README
+t/Catalyst-Controller-SOAP.t
+t/hello.wsdl
+t/PostApp.t
+t/lib/TestApp/Controller/WS.pm
+t/lib/TestApp/Controller/Root.pm
+t/lib/TestApp.pm
+t/PostApp/script/postapp_cgi.pl
+t/PostApp/script/postapp_test.pl
+t/PostApp/script/post.pl
+t/PostApp/script/postapp_server.pl
+t/PostApp/lib/PostApp/Controller/WithWSDL.pm
+t/PostApp/lib/PostApp/Controller/WS.pm
+t/PostApp/lib/PostApp/Controller/Root.pm
+t/PostApp/lib/PostApp/Controller/WS2.pm
+t/PostApp/lib/PostApp.pm
+t/PostApp/postapp.yml
+lib/Catalyst/Action/SOAP.pm
+lib/Catalyst/Action/SOAP/DocumentLiteral.pm
+lib/Catalyst/Action/SOAP/HTTPGet.pm
+lib/Catalyst/Action/SOAP/RPCEndpoint.pm
+lib/Catalyst/Action/SOAP/RPCLiteral.pm
+lib/Catalyst/Controller/SOAP.pm
+lib/Catalyst/Controller/SOAP/RPC.pm
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/Makefile.PL 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,12 +0,0 @@
-use 5.008008;
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile that is written.
-WriteMakefile(
- NAME => 'Catalyst::Controller::SOAP',
- VERSION_FROM => 'lib/Catalyst/Controller/SOAP.pm', # finds $VERSION
- PREREQ_PM => { Catalyst::Runtime => 5.7011, XML::LibXML => 0}, # e.g., Module::Name => 1.1
- ($] >= 5.005 ? ## Add these new keywords supported since 5.005
- (ABSTRACT_FROM => 'lib/Catalyst/Controller/SOAP.pm', # retrieve abstract from module
- AUTHOR => 'Daniel Ruoso <daniel.ruoso at verticalone.pt>') : ()),
-);
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL (from rev 7543, Catalyst-Controller-SOAP/1.0/trunk/Makefile.PL)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/Makefile.PL 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,13 @@
+use 5.008008;
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+ NAME => 'Catalyst::Controller::SOAP',
+ VERSION_FROM => 'lib/Catalyst/Controller/SOAP.pm', # finds $VERSION
+ PREREQ_PM => { Catalyst::Runtime => 5.7011, XML::LibXML => 0,
+ XML::Compile::SOAP => 0},
+ ($] >= 5.005 ? ## Add these new keywords supported since 5.005
+ (ABSTRACT_FROM => 'lib/Catalyst/Controller/SOAP.pm', # retrieve abstract from module
+ AUTHOR => 'Daniel Ruoso <daniel.ruoso at verticalone.pt>') : ()),
+);
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP/DocumentLiteral.pm 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,58 +0,0 @@
-{ package Catalyst::Action::SOAP::DocumentLiteral;
-
- use base qw/Catalyst::Action::SOAP/;
- use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
-
- sub execute {
- my $self = shift;
- my ( $controller, $c ) = @_;
- $self->prepare_soap_helper($c);
- $self->prepare_soap_xml_post($c);
- unless ($c->stash->{soap}->fault) {
- my $envelope = $c->stash->{soap}->parsed_envelope;
- my $namespace = $c->stash->{soap}->namespace || NS_SOAP_ENV;
- my ($body) = $envelope->getElementsByTagNameNS($namespace, 'Body');
- $self->NEXT::execute($controller, $c, $body);
- }
- }
-};
-
-1;
-
-__END__
-
-=head1 NAME
-
-Catalyst::Action::SOAP::DocumentLiteral - Document Literal service
-
-=head1 SYNOPSIS
-
- # not used directly.
-
-=head1 DESCRIPTION
-
-This action implements a simple parse of the envelope and passing the
-body to the service as a xml object.
-
-=head1 TODO
-
-Almost all the SOAP protocol is unsupported, only the method
-dispatching and, optionally, the soap-decoding of the arguments are
-made.
-
-=head1 AUTHORS
-
-Daniel Ruoso <daniel.ruoso at verticalone.pt>
-
-=head1 BUG REPORTS
-
-Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
-C<bug-catalyst-controller-soap at rt.cpan.org>
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm (from rev 7542, Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP/DocumentLiteral.pm)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/DocumentLiteral.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,64 @@
+{ package Catalyst::Action::SOAP::DocumentLiteral;
+
+ use base qw/Catalyst::Action::SOAP/;
+ use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
+
+ sub execute {
+ my $self = shift;
+ my ( $controller, $c ) = @_;
+ $self->prepare_soap_helper($controller,$c);
+ $self->prepare_soap_xml_post($controller,$c);
+ unless ($c->stash->{soap}->fault) {
+ my $envelope = $c->stash->{soap}->parsed_envelope;
+ my $namespace = $c->stash->{soap}->namespace || NS_SOAP_ENV;
+ my ($body) = $envelope->getElementsByTagNameNS($namespace, 'Body');
+ my $operation = $self->name;
+ $c->stash->{soap}->operation_name($operation);
+ if ($controller->wsdlobj) {
+ $body = $c->stash->{soap}->arguments
+ ($controller->decoders->{$operation}->($body));
+ }
+ $self->NEXT::execute($controller, $c, $body);
+ }
+ }
+};
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Action::SOAP::DocumentLiteral - Document Literal service
+
+=head1 SYNOPSIS
+
+ # not used directly.
+
+=head1 DESCRIPTION
+
+This action implements a simple parse of the envelope and passing the
+body to the service as a xml object.
+
+=head1 TODO
+
+Almost all the SOAP protocol is unsupported, only the method
+dispatching and, optionally, the soap-decoding of the arguments are
+made.
+
+=head1 AUTHORS
+
+Daniel Ruoso <daniel.ruoso at verticalone.pt>
+
+=head1 BUG REPORTS
+
+Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
+C<bug-catalyst-controller-soap at rt.cpan.org>
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP/HTTPGet.pm 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,51 +0,0 @@
-{ package Catalyst::Action::SOAP::HTTPGet;
-
- use base qw/Catalyst::Action::SOAP/;
-
- sub execute {
- my $self = shift;
- my ( $controller, $c ) = @_;
- $self->prepare_soap_helper($c);
- $self->NEXT::execute(@_);
- }
-};
-
-1;
-
-__END__
-
-=head1 NAME
-
-Catalyst::Action::SOAP::HTTPGet - HTTP Get service
-
-=head1 SYNOPSIS
-
- # not used directly.
-
-=head1 DESCRIPTION
-
-This actually is here just to help delivering services that are
-invoked by simple http get requests, as defined in the SOAP spec. It
-won't do much, except for preparing the $c->stash->{soap} variable, so
-the returns can be implemented.
-
-=head1 TODO
-
-There is not much to be done here.
-
-=head1 AUTHORS
-
-Daniel Ruoso <daniel.ruoso at verticalone.pt>
-
-=head1 BUG REPORTS
-
-Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
-C<bug-catalyst-controller-soap at rt.cpan.org>
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm (from rev 7542, Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP/HTTPGet.pm)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/HTTPGet.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,51 @@
+{ package Catalyst::Action::SOAP::HTTPGet;
+
+ use base qw/Catalyst::Action::SOAP/;
+
+ sub execute {
+ my $self = shift;
+ my ( $controller, $c ) = @_;
+ $self->prepare_soap_helper($controller,$c);
+ $self->NEXT::execute(@_);
+ }
+};
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Action::SOAP::HTTPGet - HTTP Get service
+
+=head1 SYNOPSIS
+
+ # not used directly.
+
+=head1 DESCRIPTION
+
+This actually is here just to help delivering services that are
+invoked by simple http get requests, as defined in the SOAP spec. It
+won't do much, except for preparing the $c->stash->{soap} variable, so
+the returns can be implemented.
+
+=head1 TODO
+
+There is not much to be done here.
+
+=head1 AUTHORS
+
+Daniel Ruoso <daniel.ruoso at verticalone.pt>
+
+=head1 BUG REPORTS
+
+Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
+C<bug-catalyst-controller-soap at rt.cpan.org>
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP/RPCEndpoint.pm 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,85 +0,0 @@
-{ package Catalyst::Action::SOAP::RPCEndpoint;
-
- use base qw/Catalyst::Action::SOAP/;
- use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
-
- sub execute {
- my $self = shift;
- my ( $controller, $c ) = @_;
-
- $self->prepare_soap_helper($c);
- $self->prepare_soap_xml_post($c);
- unless ($c->stash->{soap}->fault) {
- my $envelope = $c->stash->{soap}->parsed_envelope;
- my $namespace = $c->stash->{soap}->namespace || NS_SOAP_ENV;
- my ($body) = $envelope->getElementsByTagNameNS($namespace,'Body',0);
- my @children = $body->getChildNodes();
- if (scalar @children != 1) {
- $c->stash->{soap}->fault
- ({ code => { 'env:Sender' => 'env:Body' },
- reason => 'Bad Body', detail =>
- 'RPC messages should contain only one element inside body'})
- } else {
- my ($smthing, $operation) = split /:/, $children[0]->nodeName();
- $operation ||= $smthing; # if there's no ns prefix,
- # operation is the first
- # part.
- my $arguments = $children[0]->getChildNodes();
- $c->stash->{soap}->arguments($arguments);
- if (!grep { /RPC(Encoded|Literal)/ } @{$controller->action_for($operation)->attributes->{ActionClass}}) {
- $c->stash->{soap}->fault
- ({ code => { 'env:Sender' => 'env:Body' },
- reason => 'Bad Operation', detail =>
- 'Invalid Operation'})
- } else {
- # this is our RPC action
- $c->forward($operation);
- }
- }
- }
- }
-};
-
-1;
-
-__END__
-
-=head1 NAME
-
-Catalyst::Action::SOAP::RPCEndpoint - RPC Dispatcher
-
-=head1 SYNOPSIS
-
- # not used directly.
-
-=head1 DESCRIPTION
-
-This class is used by L<Catalyst::Controller::SOAP> to dispatch to the
-RPC operations inside a controller. These operations are quite
-different from the others, as they are seen by Catalyst as this single
-action. During the registering phase, the soap rpc operations are
-included in the hash that is sent to this object, so they can be
-invoked later.
-
-=head1 TODO
-
-Almost all the SOAP protocol is unsupported, only the method
-dispatching and, optionally, the soap-decoding of the arguments are
-made.
-
-=head1 AUTHORS
-
-Daniel Ruoso <daniel.ruoso at verticalone.pt>
-
-=head1 BUG REPORTS
-
-Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
-C<bug-catalyst-controller-soap at rt.cpan.org>
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm (from rev 7542, Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP/RPCEndpoint.pm)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP/RPCEndpoint.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,91 @@
+{ package Catalyst::Action::SOAP::RPCEndpoint;
+
+ use base qw/Catalyst::Action::SOAP/;
+ use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
+
+ sub execute {
+ my $self = shift;
+ my ( $controller, $c ) = @_;
+
+ $self->prepare_soap_helper($controller,$c);
+ $self->prepare_soap_xml_post($controller,$c);
+ unless ($c->stash->{soap}->fault) {
+ my $envelope = $c->stash->{soap}->parsed_envelope;
+ my $namespace = $c->stash->{soap}->namespace || NS_SOAP_ENV;
+ my ($body) = $envelope->getElementsByTagNameNS($namespace,'Body',0);
+ my @children = $body->getChildNodes();
+ if (scalar @children != 1) {
+ $c->stash->{soap}->fault
+ ({ code => { 'env:Sender' => 'env:Body' },
+ reason => 'Bad Body', detail =>
+ 'RPC messages should contain only one element inside body'})
+ } else {
+ my ($smthing, $operation) = split /:/, $children[0]->nodeName();
+ $operation ||= $smthing; # if there's no ns prefix,
+ # operation is the first
+ # part.
+ $c->stash->{soap}->operation_name($operation);
+ if ($controller->wsdlobj) {
+ $c->stash->{soap}->arguments
+ ($controller->decoders->{$operation}->($children[0]));
+ } else {
+ my $arguments = $children[0]->getChildNodes();
+ $c->stash->{soap}->arguments($arguments);
+ }
+ if (!grep { /RPC(Encoded|Literal)/ } @{$controller->action_for($operation)->attributes->{ActionClass}}) {
+ $c->stash->{soap}->fault
+ ({ code => { 'env:Sender' => 'env:Body' },
+ reason => 'Bad Operation', detail =>
+ 'Invalid Operation'})
+ } else {
+ # this is our RPC action
+ $c->forward($operation);
+ }
+ }
+ }
+ }
+};
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Action::SOAP::RPCEndpoint - RPC Dispatcher
+
+=head1 SYNOPSIS
+
+ # not used directly.
+
+=head1 DESCRIPTION
+
+This class is used by L<Catalyst::Controller::SOAP> to dispatch to the
+RPC operations inside a controller. These operations are quite
+different from the others, as they are seen by Catalyst as this single
+action. During the registering phase, the soap rpc operations are
+included in the hash that is sent to this object, so they can be
+invoked later.
+
+=head1 TODO
+
+Almost all the SOAP protocol is unsupported, only the method
+dispatching and, optionally, the soap-decoding of the arguments are
+made.
+
+=head1 AUTHORS
+
+Daniel Ruoso <daniel.ruoso at verticalone.pt>
+
+=head1 BUG REPORTS
+
+Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
+C<bug-catalyst-controller-soap at rt.cpan.org>
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP.pm 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,77 +0,0 @@
-{ package Catalyst::Action::SOAP;
-
- use base qw/Catalyst::Action/;
- use XML::LibXML;
-
- __PACKAGE__->mk_accessors(qw/xml_parser/);
-
- sub new {
- my $class = shift;
- my $self = $class->SUPER::new(@_);
- $self->xml_parser(XML::LibXML->new());
- return $self;
- }
-
- sub prepare_soap_helper {
- my ($self, $c) = @_;
- $c->stash->{soap} = Catalyst::Controller::SOAP::Helper->new();
- }
-
- sub prepare_soap_xml_post {
- my ($self, $c) = @_;
- # This should be applocation/soap+xml, but some clients doesn't seem to respect that.
- if ($c->req->content_type =~ /xml/ &&
- $c->req->method eq 'POST') {
- my $body = $c->req->body;
- my $xml_str = join '', <$body>;
- eval {
- $c->stash->{soap}->envelope($xml_str);
- $c->stash->{soap}->parsed_envelope($self->xml_parser->parse_string($xml_str));
- };
- if ($@) {
- $c->stash->{soap}->fault({ code => 'env:Sender', reason => 'Bad XML Message', detail => $@});
- }
- } else {
- $c->stash->{soap}->fault({ code => 'env:Sender', reason => 'Bad content-type/method'});
- }
- }
-};
-
-1;
-
-__END__
-
-=head1 NAME
-
-Catalyst::Action::SOAP - Action superclass
-
-=head1 SYNOPSIS
-
- # not used directly.
-
-=head1 DESCRIPTION
-
-This is the superclass used by the Document and the RPC actions.
-
-=head1 TODO
-
-Almost all the SOAP protocol is unsupported, only the method
-dispatching and, optionally, the soap-decoding of the arguments are
-made.
-
-=head1 AUTHORS
-
-Daniel Ruoso <daniel.ruoso at verticalone.pt>
-
-=head1 BUG REPORTS
-
-Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
-C<bug-catalyst-controller-soap at rt.cpan.org>
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
-
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm (from rev 7542, Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Action/SOAP.pm)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Action/SOAP.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,77 @@
+{ package Catalyst::Action::SOAP;
+
+ use base qw/Catalyst::Action/;
+ use XML::LibXML;
+
+ __PACKAGE__->mk_accessors(qw/xml_parser/);
+
+ sub new {
+ my $class = shift;
+ my $self = $class->SUPER::new(@_);
+ $self->xml_parser(XML::LibXML->new());
+ return $self;
+ }
+
+ sub prepare_soap_helper {
+ my ($self, $controller, $c) = @_;
+ $c->stash->{soap} = Catalyst::Controller::SOAP::Helper->new();
+ }
+
+ sub prepare_soap_xml_post {
+ my ($self, $controller, $c) = @_;
+ # This should be application/soap+xml, but some clients doesn't seem to respect that.
+ if ($c->req->content_type =~ /xml/ &&
+ $c->req->method eq 'POST') {
+ my $body = $c->req->body;
+ my $xml_str = join '', <$body>;
+ eval {
+ $c->stash->{soap}->envelope($xml_str);
+ $c->stash->{soap}->parsed_envelope($self->xml_parser->parse_string($xml_str));
+ };
+ if ($@) {
+ $c->stash->{soap}->fault({ code => 'env:Sender', reason => 'Bad XML Message', detail => $@});
+ }
+ } else {
+ $c->stash->{soap}->fault({ code => 'env:Sender', reason => 'Bad content-type/method'});
+ }
+ }
+};
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Action::SOAP - Action superclass
+
+=head1 SYNOPSIS
+
+ # not used directly.
+
+=head1 DESCRIPTION
+
+This is the superclass used by the Document and the RPC actions.
+
+=head1 TODO
+
+Almost all the SOAP protocol is unsupported, only the method
+dispatching and, optionally, the soap-decoding of the arguments are
+made.
+
+=head1 AUTHORS
+
+Daniel Ruoso <daniel.ruoso at verticalone.pt>
+
+=head1 BUG REPORTS
+
+Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
+C<bug-catalyst-controller-soap at rt.cpan.org>
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Controller/SOAP.pm 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,281 +0,0 @@
-{ package Catalyst::Controller::SOAP;
-
- use strict;
- use base qw/Catalyst::Controller/;
- use XML::LibXML;
-
- use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
-
- our $VERSION = '0.2.0';
-
- sub _parse_SOAP_attr {
- my ($self, $c, $name, $value) = @_;
- my $actionclass = ($value =~ /^\+/ ? $value :
- 'Catalyst::Action::SOAP::'.$value);
- (
- ActionClass => $actionclass,
- )
- }
-
- # this is implemented as to respond a SOAP message according to
- # what has been sent to $c->stash->{soap}
- sub end : Private {
- my ($self, $c) = (shift, shift);
- my $soap = $c->stash->{soap};
-
- return $self->NEXT::end($c, @_) unless $soap;
-
- my $namespace = $soap->namespace || NS_SOAP_ENV;
- my $response = XML::LibXML->createDocument();
-
- my $envelope = $response->createElementNS
- ($namespace,"Envelope");
-
- $response->setDocumentElement($envelope);
-
- # TODO: we don't support header generation in response yet.
-
- my $body = $response->createElementNS
- ($namespace,"Body");
-
- $envelope->appendChild($body);
-
- if ($soap->fault) {
- my $fault = $response->createElementNS
- ($namespace, "Fault");
- $body->appendChild($fault);
-
- my $code = $response->createElementNS
- ($namespace, "Code");
- $fault->appendChild($code);
-
- $self->_generate_Fault_Code($response,$code,$soap->fault->{code}, $namespace);
-
- if ($soap->fault->{reason}) {
- my $reason = $response->createElementNS
- ($namespace, "Reason");
- $fault->appendChild($reason);
- # TODO: we don't support the xml:lang attribute yet.
- my $text = $response->createElementNS
- ($namespace, "Text");
- $reason->appendChild($text);
- $text->appendText($soap->fault->{reason});
- }
- if ($soap->fault->{detail}) {
- my $detail = $response->createElementNS
- ($namespace, "Detail");
- $fault->appendChild($detail);
- # TODO: we don't support the xml:lang attribute yet.
- my $text = $response->createElementNS
- ($namespace, "Text");
- $detail->appendChild($text);
- $text->appendText($soap->fault->{detail});
- }
- } else {
- # TODO: Generate the body.
- # At this moment, for the sake of getting something ready,
- # let's implement the string return.
- if ($soap->string_return) {
- $body->appendText($soap->string_return);
- } elsif (my $lit = $soap->literal_return) {
- if (ref $lit eq 'XML::LibXML::NodeList') {
- for ($lit->get_nodelist) {
- $body->appendChild($_);
- }
- } else {
- $body->appendChild($lit);
- }
- }
- }
-
- $c->res->content_type('text/xml');
- $c->res->body($envelope->toString());
- }
-
- sub _generate_Fault_Code {
- my ($self, $document, $codenode, $codeValue, $namespace) = @_;
-
- my $value = $document->createElementNS
- ($namespace, "Value");
- if (ref $codeValue eq 'ARRAY') {
- $value->appendText($codeValue->[0]);
- my $subcode = $document->createElementNS
- ($namespace, 'SubCode');
- $codenode->appendChild($value);
- $codenode->appendChild($subcode);
- $self->_generate_Fault_Code($document, $subcode, $codeValue->[1], $namespace);
- } else {
- $value->appendText($codeValue);
- $codenode->appendChild($value);
- }
- }
-
-
-};
-
-{ package Catalyst::Controller::SOAP::Helper;
-
- use base qw(Class::Accessor::Fast);
-
- __PACKAGE__->mk_accessors(qw{envelope parsed_envelope arguments fault namespace
- encoded_return literal_return string_return});
-
-
-};
-
-1;
-
-__END__
-
-=head1 NAME
-
-Catalyst::Controller::SOAP - Catalyst SOAP Controller
-
-=head1 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') {}
-
-=head1 ABSTACT
-
-Implements SOAP serving support in Catalyst.
-
-=head1 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.
-
-=head1 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 L<Catalyst::Action::SOAP::DocumentLiteral> for an example.
-
-=head1 ACCESSORS
-
-Once you tagged one of the methods, you'll have an $c->stash->{soap}
-accessor which will return an C<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:
-
-=over 4
-
-=item $c->stash->{soap}->envelope()
-
-The original SOAP envelope as string.
-
-=item $c->stash->{soap}->parsed_envelope()
-
-The parsed envelope as an XML::LibXML object.
-
-=item $c->stash->{soap}->arguments()
-
-The arguments of a RPC call.
-
-=item $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.
-
-=item $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...
-
-=item $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.
-
-=item $c->stash->{soap}->string_return($non_xml_text)
-
-In this case, the given text is encoded as CDATA inside the SOAP
-message.
-
-=back
-
-=head1 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 ) = @_;
- }
-
-=head1 SEE ALSO
-
-L<Catalyst::Action::SOAP>, L<XML::LibXML>, L<XML::Compile>
-L<Catalyst::Action::SOAP::DocumentLiteral>,
-L<Catalyst::Action::SOAP::RPCLiteral>,
-L<Catalyst::Action::SOAP::HTTPGet>
-
-=head1 AUTHORS
-
-Daniel Ruoso C<daniel.ruoso at verticalone.pt>
-
-=head1 BUG REPORTS
-
-Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
-C<bug-catalyst-controller-soap at rt.cpan.org>
-
-=head1 LICENSE
-
-This library is free software, you can redistribute it and/or modify
-it under the same terms as Perl itself.
-
-=cut
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm (from rev 7542, Catalyst-Controller-SOAP/1.0/trunk/lib/Catalyst/Controller/SOAP.pm)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/lib/Catalyst/Controller/SOAP.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,354 @@
+{ package Catalyst::Controller::SOAP;
+
+ use strict;
+ use base qw/Catalyst::Controller/;
+ use XML::LibXML;
+ use XML::Compile::WSDL11;
+ use UNIVERSAL qw(isa);
+
+ use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
+
+ our $VERSION = '0.3';
+
+ __PACKAGE__->mk_accessors qw(wsdlobj decoders encoders);
+
+ sub _parse_SOAP_attr {
+ my ($self, $c, $name, $value) = @_;
+
+ my $wsdlfile = $self->config->{wsdl};
+ if ($wsdlfile) {
+ $self->wsdlobj(XML::Compile::WSDL11->new($wsdlfile))
+ unless $self->wsdlobj;
+
+ my $operation = $self->wsdlobj->operation($name)
+ or die 'Every operation should be on the WSDL when using one.';
+ my $portop = $operation->portOperation();
+
+ my $input_parts = $self->wsdlobj->find(message => $portop->{input}{message})
+ ->{part};
+ $_->{compiled} = $self->wsdlobj->schemas->compile(READER => $_->{element})
+ for @{$input_parts};
+
+ $self->decoders({}) unless $self->decoders();
+ $self->decoders->{$name} = sub {
+ my $body = shift;
+ my @nodes = grep { UNIVERSAL::isa($_, 'XML::LibXML::Element') } $body->childNodes();
+ return
+ {
+ map {
+ my $data = $_->{compiled}->(shift @nodes);
+ $_->{name} => $data;
+ } @{$input_parts}
+ }, @nodes;
+ };
+
+ my $output_parts = $self->wsdlobj->find(message => $portop->{output}{message})
+ ->{part};
+ $_->{compiled} = $self->wsdlobj->schemas->compile(WRITER => $_->{element})
+ for @{$output_parts};
+
+ $self->encoders({}) unless $self->encoders();
+ $self->encoders->{$name} = sub {
+ my ($doc, $data) = @_;
+ return
+ [
+ map {
+ $_->{compiled}->($doc, $data->{$_->{name}})
+ } @{$output_parts}
+ ];
+ };
+ }
+
+ my $actionclass = ($value =~ /^\+/ ? $value :
+ 'Catalyst::Action::SOAP::'.$value);
+ (
+ ActionClass => $actionclass,
+ )
+ }
+
+ # this is implemented as to respond a SOAP message according to
+ # what has been sent to $c->stash->{soap}
+ sub end : Private {
+ my ($self, $c) = (shift, shift);
+ my $soap = $c->stash->{soap};
+
+ return $self->NEXT::end($c, @_) unless $soap;
+
+ my $namespace = $soap->namespace || NS_SOAP_ENV;
+ my $response = XML::LibXML->createDocument();
+
+ my $envelope = $response->createElementNS
+ ($namespace,"Envelope");
+
+ $response->setDocumentElement($envelope);
+
+ # TODO: we don't support header generation in response yet.
+
+ my $body = $response->createElementNS
+ ($namespace,"Body");
+
+ $envelope->appendChild($body);
+
+ if ($soap->fault) {
+ my $fault = $response->createElementNS
+ ($namespace, "Fault");
+ $body->appendChild($fault);
+
+ my $code = $response->createElementNS
+ ($namespace, "Code");
+ $fault->appendChild($code);
+
+ $self->_generate_Fault_Code($response,$code,$soap->fault->{code}, $namespace);
+
+ if ($soap->fault->{reason}) {
+ my $reason = $response->createElementNS
+ ($namespace, "Reason");
+ $fault->appendChild($reason);
+ # TODO: we don't support the xml:lang attribute yet.
+ my $text = $response->createElementNS
+ ($namespace, "Text");
+ $reason->appendChild($text);
+ $text->appendText($soap->fault->{reason});
+ }
+ if ($soap->fault->{detail}) {
+ my $detail = $response->createElementNS
+ ($namespace, "Detail");
+ $fault->appendChild($detail);
+ # TODO: we don't support the xml:lang attribute yet.
+ my $text = $response->createElementNS
+ ($namespace, "Text");
+ $detail->appendChild($text);
+ $text->appendText($soap->fault->{detail});
+ }
+ } else {
+ # TODO: Generate the body.
+ # At this moment, for the sake of getting something ready,
+ # let's implement the string return.
+ if ($soap->string_return) {
+ $body->appendText($soap->string_return);
+ } elsif (my $lit = $soap->literal_return) {
+ if (ref $lit eq 'XML::LibXML::NodeList') {
+ for ($lit->get_nodelist) {
+ $body->appendChild($_);
+ }
+ } else {
+ $body->appendChild($lit);
+ }
+ } elsif (my $cmp = $soap->compile_return) {
+ die 'Tried to use compile_return without WSDL'
+ unless $self->wsdlobj;
+
+ my $arr = $self->encoders->{$soap->operation_name}->($response, $cmp);
+ $body->appendChild($_) for @{$arr};
+ }
+ }
+
+ $c->res->content_type('text/xml');
+ $c->res->body($envelope->toString());
+ }
+
+ sub _generate_Fault_Code {
+ my ($self, $document, $codenode, $codeValue, $namespace) = @_;
+
+ my $value = $document->createElementNS
+ ($namespace, "Value");
+ if (ref $codeValue eq 'ARRAY') {
+ $value->appendText($codeValue->[0]);
+ my $subcode = $document->createElementNS
+ ($namespace, 'SubCode');
+ $codenode->appendChild($value);
+ $codenode->appendChild($subcode);
+ $self->_generate_Fault_Code($document, $subcode, $codeValue->[1], $namespace);
+ } else {
+ $value->appendText($codeValue);
+ $codenode->appendChild($value);
+ }
+ }
+
+
+};
+
+{ package Catalyst::Controller::SOAP::Helper;
+
+ use base qw(Class::Accessor::Fast);
+
+ __PACKAGE__->mk_accessors(qw{envelope parsed_envelope arguments fault namespace
+ encoded_return literal_return string_return
+ compile_return operation_name});
+
+
+};
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Controller::SOAP - Catalyst SOAP Controller
+
+=head1 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') {}
+
+=head1 ABSTACT
+
+Implements SOAP serving support in Catalyst.
+
+=head1 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.
+
+=head1 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 L<Catalyst::Action::SOAP::DocumentLiteral> for an example.
+
+=head1 ACCESSORS
+
+Once you tagged one of the methods, you'll have an $c->stash->{soap}
+accessor which will return an C<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:
+
+=over 4
+
+=item $c->stash->{soap}->envelope()
+
+The original SOAP envelope as string.
+
+=item $c->stash->{soap}->parsed_envelope()
+
+The parsed envelope as an XML::LibXML object.
+
+=item $c->stash->{soap}->arguments()
+
+The arguments of a RPC call.
+
+=item $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.
+
+=item $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...
+
+=item $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.
+
+=item $c->stash->{soap}->string_return($non_xml_text)
+
+In this case, the given text is encoded as CDATA inside the SOAP
+message.
+
+=back
+
+=head1 USING WSDL
+
+If you define "wsdl" as a configuration key,
+Catalyst::Controller::SOAP will automatically map your operations into
+the WSDL operations, in which case you will receive the parsed Perl
+structure as returned by XML::Compile according to the type defined in
+the WSDL message.
+
+Also, when using wsdl, you can also define the response using
+
+=over
+
+=item $c->stash->{soap}->compile_return($perl_structure)
+
+In this case, the given structure will be transformed by XML::Compile,
+according to what's described in the WSDL file.
+
+=back
+
+=head1 TODO
+
+No header features are implemented yet.
+
+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 ) = @_;
+ }
+
+=head1 SEE ALSO
+
+L<Catalyst::Action::SOAP>, L<XML::LibXML>, L<XML::Compile>
+L<Catalyst::Action::SOAP::DocumentLiteral>,
+L<Catalyst::Action::SOAP::RPCLiteral>,
+L<Catalyst::Action::SOAP::HTTPGet>, L<XML::Compile::WSDL11>,
+L<XML::Compile::Schema>
+
+=head1 AUTHORS
+
+Daniel Ruoso C<daniel.ruoso at verticalone.pt>
+
+=head1 BUG REPORTS
+
+Please submit all bugs regarding C<Catalyst::Controller::SOAP> to
+C<bug-catalyst-controller-soap at rt.cpan.org>
+
+=head1 LICENSE
+
+This library is free software, you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp/lib/PostApp/Controller/WithWSDL.pm (from rev 7544, Catalyst-Controller-SOAP/1.0/trunk/t/PostApp/lib/PostApp/Controller/WithWSDL.pm)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp/lib/PostApp/Controller/WithWSDL.pm (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp/lib/PostApp/Controller/WithWSDL.pm 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,16 @@
+package PostApp::Controller::WithWSDL;
+
+use strict;
+use warnings;
+use base 'Catalyst::Controller::SOAP';
+
+__PACKAGE__->config->{wsdl} = 't/hello.wsdl';
+
+sub Greet : Local SOAP('DocumentLiteral') {
+ my ( $self, $c, $args ) = @_;
+ my $who = $args->{parameters}{who};
+ my $grt = $args->{parameters}{greeting};
+ $c->stash->{soap}->compile_return({ details => { greeting => $grt.' '.$who.'!' }});
+}
+
+1;
Deleted: Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t
===================================================================
--- Catalyst-Controller-SOAP/1.0/trunk/t/PostApp.t 2008-04-01 14:15:47 UTC (rev 7540)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t 2008-04-01 17:22:29 UTC (rev 7545)
@@ -1,60 +0,0 @@
-use Test::More tests => 3;
-use File::Spec::Functions;
-use HTTP::Response;
-use IPC::Open3;
-use Symbol;
-
-my $response;
-
-$response = soap_xml_post
- ('/ws/hello',
- '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body>World</Body></Envelope>'
- );
-
-ok($response->content =~ /Hello World/, 'Document Literal correct response: '.$response->content);
-
-$response = soap_xml_post
- ('/ws2',
- '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><hello>World</hello></Body></Envelope>'
- );
-ok($response->content =~ /Hello World/, 'RPC Literal Correct response: '.$response->content);
-
-$response = soap_xml_post
- ('/ws/foo',
- '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body>World</Body></Envelope>'
- );
-ok($response->content =~ /\<foo\>\<bar\>\<baz\>Hello World\!\<\/baz\>\<\/bar\>\<\/foo\>/, 'Literal response: '.$response->content);
-
-sub soap_xml_post {
- my $path = shift;
- my $content = shift;
-
- local %ENV;
- $ENV{REMOTE_ADDR} ='127.0.0.1';
- $ENV{CONTENT_LENGTH} = length $content;
- $ENV{CONTENT_TYPE} ='application/soap+xml';
- $ENV{SCRIPT_NAME} = $path;
- $ENV{QUERY_STRING} = '';
- $ENV{CATALYST_DEBUG} = 0;
- $ENV{REQUEST_METHOD} ='POST';
- $ENV{SERVER_PORT} ='80';
- $ENV{SERVER_NAME} ='pitombeira';
-
- my ($writer, $reader, $error) = map { gensym() } 1..3;
- my $pid = open3($writer, $reader, $error,
- $^X, (map { '-I'.$_ } @INC),
- catfile(qw(t PostApp script postapp_cgi.pl)));
-
- print {$writer} $content;
- close $content;
-
- my $response_str = join '', <$reader>;
- map { warn '# '.$_ } <$error>;
-
- close $reader;
- close $error;
- waitpid $pid, 0;
- return HTTP::Response->parse($response_str);
-}
-
-1;
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t (from rev 7542, Catalyst-Controller-SOAP/1.0/trunk/t/PostApp.t)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/t/PostApp.t 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,66 @@
+use Test::More tests => 4;
+use File::Spec::Functions;
+use HTTP::Response;
+use IPC::Open3;
+use Symbol;
+
+my $response;
+
+$response = soap_xml_post
+ ('/ws/hello',
+ '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body>World</Body></Envelope>'
+ );
+
+ok($response->content =~ /Hello World/, 'Document Literal correct response: '.$response->content);
+
+$response = soap_xml_post
+ ('/ws2',
+ '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><hello>World</hello></Body></Envelope>'
+ );
+ok($response->content =~ /Hello World/, 'RPC Literal Correct response: '.$response->content);
+
+$response = soap_xml_post
+ ('/ws/foo',
+ '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body>World</Body></Envelope>'
+ );
+ok($response->content =~ /\<foo\>\<bar\>\<baz\>Hello World\!\<\/baz\>\<\/bar\>\<\/foo\>/, 'Literal response: '.$response->content);
+
+$response = soap_xml_post
+ ('/withwsdl/Greet',
+ '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><GreetingSpecifier><who>World</who><greeting>Hello</greeting></GreetingSpecifier></Body></Envelope>'
+ );
+ok($response->content =~ /greeting\>Hello World\!\<\//, 'Literal response: '.$response->content);
+
+sub soap_xml_post {
+ my $path = shift;
+ my $content = shift;
+
+ local %ENV;
+ $ENV{REMOTE_ADDR} ='127.0.0.1';
+ $ENV{CONTENT_LENGTH} = length $content;
+ $ENV{CONTENT_TYPE} ='application/soap+xml';
+ $ENV{SCRIPT_NAME} = $path;
+ $ENV{QUERY_STRING} = '';
+ $ENV{CATALYST_DEBUG} = 0;
+ $ENV{REQUEST_METHOD} ='POST';
+ $ENV{SERVER_PORT} ='80';
+ $ENV{SERVER_NAME} ='pitombeira';
+
+ my ($writer, $reader, $error) = map { gensym() } 1..3;
+ my $pid = open3($writer, $reader, $error,
+ $^X, (map { '-I'.$_ } @INC),
+ catfile(qw(t PostApp script postapp_cgi.pl)));
+
+ print {$writer} $content;
+ close $content;
+
+ my $response_str = join '', <$reader>;
+ map { warn '# '.$_ } <$error>;
+
+ close $reader;
+ close $error;
+ waitpid $pid, 0;
+ return HTTP::Response->parse($response_str);
+}
+
+1;
Copied: Catalyst-Controller-SOAP/1.0/tags/0.3/t/hello.wsdl (from rev 7544, Catalyst-Controller-SOAP/1.0/trunk/t/hello.wsdl)
===================================================================
--- Catalyst-Controller-SOAP/1.0/tags/0.3/t/hello.wsdl (rev 0)
+++ Catalyst-Controller-SOAP/1.0/tags/0.3/t/hello.wsdl 2008-04-01 17:22:29 UTC (rev 7545)
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions
+ xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:hello="http://example.com/hello"
+ xmlns="http://example.com/hello"
+ targetNamespace="http://example.com/hello">
+
+ <wsdl:types>
+ <s:schema elementFormDefault="qualified" targetNamespace="http://example.com/hello">
+ <s:element name="GreetingSpecifier">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="who" type="s:string"/>
+ <s:element minOccurs="0" maxOccurs="1" name="greeting" type="s:string"/>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GreetingResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="greeting" type="s:string"/>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:schema>
+ </wsdl:types>
+ <wsdl:message name="AskGreeting">
+ <wsdl:part name="parameters" element="hello:GreetingSpecifier"/>
+ </wsdl:message>
+ <wsdl:message name="GiveGreeting">
+ <wsdl:part name="details" element="hello:GreetingResponse"/>
+ </wsdl:message>
+ <wsdl:portType name="GreetingPort">
+ <wsdl:operation name="Greet">
+ <wsdl:input message="hello:AskGreeting"/>
+ <wsdl:output message="hello:GiveGreeting"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="GreetingBind" type="hello:GreetingPort">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
+ <wsdl:operation name="Greet">
+ <soap:operation soapAction="http://example.com/" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="GreetService">
+ <wsdl:port name="GreetPort" binding="hello:GreetingBind">
+ <soap:address location="http://localhost:3000/hello"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file
More information about the Catalyst-commits
mailing list