[Catalyst-commits] r7745 - in Catalyst-Model-SOAP/1.0/tags: . 0.0.7/lib/Catalyst/Model 0.0.7/t/lib

ruoso at dev.catalyst.perl.org ruoso at dev.catalyst.perl.org
Mon May 12 20:40:13 BST 2008


Author: ruoso
Date: 2008-05-12 20:40:13 +0100 (Mon, 12 May 2008)
New Revision: 7745

Added:
   Catalyst-Model-SOAP/1.0/tags/0.0.7/
   Catalyst-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm
   Catalyst-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm
Removed:
   Catalyst-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm
   Catalyst-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm
Log:
tagging release

Copied: Catalyst-Model-SOAP/1.0/tags/0.0.7 (from rev 7697, Catalyst-Model-SOAP/1.0/trunk)

Deleted: Catalyst-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm
===================================================================
--- Catalyst-Model-SOAP/1.0/trunk/lib/Catalyst/Model/SOAP.pm	2008-05-06 19:57:10 UTC (rev 7697)
+++ Catalyst-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm	2008-05-12 19:40:13 UTC (rev 7745)
@@ -1,331 +0,0 @@
-{   package Catalyst::Model::SOAP;
-    use strict;
-    use warnings;
-    use XML::Compile::WSDL11;
-    use XML::Compile::Util qw/pack_type/;
-    use List::Util qw/first/;
-    use base qw(Catalyst::Model);
-    our $VERSION = '0.0.6';
-
-
-    __PACKAGE__->mk_accessors('transport');
-
-    use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
-    use constant NS_WSDLSOAP => "http://schemas.xmlsoap.org/wsdl/soap/";
-    use XML::Compile::SOAP11;
-
-    sub register_wsdl {
-        my ($self, $wsdl, $target) = @_;
-
-        my $wsdl_obj;
-        my $schema;
-
-        if (ref $wsdl eq 'HASH') {
-            $schema = $wsdl->{schema};
-            $wsdl = $wsdl->{wsdl}
-        }
-
-        if (ref $wsdl eq 'ARRAY') {
-            my $main = shift @{$wsdl};
-            $wsdl_obj = XML::Compile::WSDL11->new($main);
-            $wsdl_obj->addWSDL($_) for @{$wsdl};
-        } else {
-            $wsdl_obj = XML::Compile::WSDL11->new($wsdl);
-        }
-
-        if (ref $schema eq 'ARRAY') {
-            $wsdl_obj->importDefinitions($_) for @{$schema};
-        } elsif ($schema) {
-            $wsdl_obj->importDefinitions($schema)
-        }
-
-        $wsdl_obj->importDefinitions(NS_SOAP_ENV);
-
-        my $transport = $self->config->{transport};
-        my $service = $self->config->{service};
-
-        if (ref $target eq 'HASH') {
-            # I'll have to implement a piece of XML::Compile::SOAP::WSDL11 here,
-            # as it doesn't provide a way to list the operations for a single port
-            foreach my $portname (keys %{$target}) {
-                my $realtarget = $self.'::'.$target->{$portname};
-                no strict 'refs';
-                @{$realtarget.'::ISA'} = qw(Catalyst::Model::SOAP::Instance);
-
-                my $serv = $wsdl_obj->find(service => $service)
-                  or die 'Could not find service '.$service;
-                my @ports = @{$serv->{port} || []};
-                my $port = first {$_->{name} eq $portname } @ports
-                  or die 'Could not find port '.$portname;
-                my $bindname = $port->{binding}
-                  or die 'Could not find binding for port '.$portname;
-                my $binding = $wsdl_obj->find(binding => $bindname)
-                  or die 'Could not find binding '.$bindname;
-                my $porttypename = $binding->{type}
-                  or die 'Could not find portType for binding '.$bindname;
-                my $portType = $wsdl_obj->find(portType => $porttypename)
-                  or die 'Could not find portType '.$porttypename;
-                my $operations = $portType->{operation}
-                  or die 'No operations found for portType '.$porttypename;
-
-
-                for my $operationhash (@$operations) {
-                    my $operation = $wsdl_obj->operation(service => $service,
-                                                         port => $portname,
-                                                         operation => $operationhash->{name});
-
-                    my $style = $binding->{'{'.NS_WSDLSOAP.'}binding'}[0]->getAttribute('style');
-                    my $proto = $binding->{'{'.NS_WSDLSOAP.'}binding'}[0]->getAttribute('transport');
-
-                    my ($use) = map { $_->{input}{'{'.NS_WSDLSOAP.'}body'}[0]->getAttribute('use') }
-                      grep { $_->{name} eq $operation->name } @{ $binding->{operation} || [] };
-
-                    $style = $style =~ /document/i ? 'document' : 'rpc';
-                    $use = $use =~ /literal/i ? 'literal' : 'encoded';
-
-                    $operation->{style} = $style;
-
-                    $self->_register_operation($wsdl_obj, $operation, $realtarget, $transport, $style, $use, $proto);
-                }
-
-            }
-        } else {
-            my $realtarget = $self.'::'.$target;
-            no strict 'refs';
-            @{$realtarget.'::ISA'} = qw(Catalyst::Model::SOAP::Instance);
-            foreach my $operation ($wsdl_obj->operations(produce => 'OBJECTS')) {
-                $self->_register_operation($wsdl_obj, $operation,$realtarget,$transport,'','');
-            }
-        }
-    }
-    sub _register_operation {
-        my ($self, $wsdl_obj, $operation, $realtarget, $transport, $style, $use, $proto) = @_;
-        no strict 'refs';
-        my $send;
-        if ($transport) {
-            $send = $transport->compileClient(kind => $operation->kind);
-        }
-
-        my ($rpcin, $rpcout);
-        if ($style =~ /rpc/i && $use =~ /literal/i) {
-            my $portop = $operation->portOperation();
-
-            my $input_parts = $wsdl_obj->find(message => $portop->{input}{message})
-              ->{part};
-
-            for (@{$input_parts}) {
-                my $type = $_->{type} ? $_->{type} : $_->{element};
-                $_->{compiled_writer} = $wsdl_obj->schemas->compile
-                  (WRITER => $type, elements_qualified => 'ALL');
-            };
-
-            my $output_parts = $wsdl_obj->find(message => $portop->{output}{message})
-              ->{part};
-            for (@{$output_parts}) {
-                my $type = $_->{type} ? $_->{type} : $_->{element};
-                $_->{compiled_reader} = $wsdl_obj->schemas->compile
-                  (READER => $type);
-            }
-
-            $rpcin = sub {
-                my ($doc, $data) = @_;
-                my $operation_element = $doc->createElement($operation->name);
-                my @parts =
-                  map {
-                      $_->{compiled_writer}->($doc, $data->{$_->{name}})
-                  } @{$input_parts};
-                $operation_element->appendChild($_)
-                  for grep { ref $_ } @parts;
-                return $operation_element;
-            };
-
-            $rpcout = sub {
-                my $soap = shift;
-                my @nodes = grep { UNIVERSAL::isa($_, 'XML::LibXML::Element') } @_;
-                return
-                  {
-                   map {
-                       my $data = $_->{compiled_reader}->(shift @nodes);
-                       ( $_->{name} => $data )
-                   } @{$output_parts}
-                  };
-            };
-
-        }
-
-        my $code = $operation->compileClient($send ? ( transport => $send ) : (),
-                                             rpcin => $rpcout,
-                                             rpcout => $rpcin,
-                                             protocol => $proto);
-        *{$realtarget.'::'.$operation->name()} = sub {
-            my $self = shift;
-            return $code->(@_);
-        };
-        *{$realtarget.'::_'.$operation->name().'_data'} = sub {
-            return ($wsdl_obj, $operation, $code);
-        };
-    }
-};
-{   package Catalyst::Model::SOAP::Instance;
-    use strict;
-    use warnings;
-    use base qw(Catalyst::Model);
-}
-
-
-{   use XML::Compile::Schema::BuiltInTypes;
-    package XML::Compile::Schema::BuiltInTypes;
-
-    $XML::Compile::Schema::BuiltInTypes::builtin_types{QName}{parse} =
-     sub { my ($qname, $node) = @_;
-           my $prefix = $qname =~ s/^([^:]*)\:// ? $1 : '';
-
-           $node = $node->node if $node->isa('XML::Compile::Iterator');
-
-           unless ($prefix) {
-               return pack_type($node->namespaceURI, $qname);
-           }
-
-           my $ns = $node->lookupNamespaceURI($prefix)
-               or error __x"cannot find prefix `{prefix}' for QNAME `{qname}'"
-                     , prefix => $prefix, qname => $qname;
-           pack_type $ns, $qname;
-         };
-
-
-};
-
-
-1;
-
-__END__
-
-=head1 NAME
-
-Catalyst::Model::SOAP - Map a WSDL to a catalyst model class.
-
-=head1 SYNOPSIS
-
-  {# In the model class...
-      package MyApp::Model::SOAP;
-      use base qw(Catalyst::Model::SOAP);
-
-      __PACKAGE__->config->{transport} = XML::Compile::Transport::SOAPHTTP(...);
-
-      __PACKAGE__->register_wsdl('http://foo.bar/baz.wsdl', 'Baz');
-      __PACKAGE__->register_wsdl('http://baz.bar/foo.wsdl', 'Foo');
-      __PACKAGE__->register_wsdl('http://baz.bar/foo.wsdl',
-                                 { 'PortName1' => 'Class1',
-                                   'PortName2' => 'Class2'});
-
-      # use several wsdl files
-      __PACKAGE__->register_wsdl([ $file1, $file2, $file3 ], 'Baz');
-
-      # and or register schemas
-      __PACKAGE__->register_wsdl({ wsdl => $scalar_or_array,
-            schema => $scalar_or_array }, 'Bla');
-  };
-  {# later in some other class..
-     $c->model('SOAP::Baz')->getWeather(%arguments);
-     # is then dispatched to the operation getWeather described by the
-     # first wsdl...
-     $c->model('SOAP::Foo')->foo(%arguments);
-     # is then dispatched to the operation foo described by the
-     # second wsdl...
-  };
-
-=head1 ABSTRACT
-
-Create a catalyst model class from a WSDL definition using
-XML::Compile::SOAP.
-
-=head1 DESCRIPTION
-
-This module implements a mapping from a wsdl definition, interpreted
-by XML::Compile::SOAP::WSDL, as a Model class, where each operation in
-the wsdl file is represented by a method with the same name.
-
-=head1 METHODS
-
-=over
-
-=item register_wsdl($wsdl, $targetclass)
-
-This method will register the operations described by $wsdl in the
-$targetclass package. $wsdl may be anythin XML::Compile::SOAP::WSDL11
-accepts. The $targetclass is a relative package name which will be
-concatenated in the name of the model.
-
-If $wsdl is an arrayref, the first element is the one passed to new,
-and the others will be the argument to subsequent addWsdl calls.
-
-If $wsdl is a hashref, the "wsdl" key will be handled like above and
-the "schema" key will be used to importDefinitions. If the content of
-the schema key is an arrayref, it will result in several calls to
-importDefinition.
-
-Note that XML::Compile->knownNamespace(...) can be used to help
-declaring the wsdl.
-
-You can send a hashref for the $targetclass. Catalyst::Model::SOAP
-will use the key as the port name and the value as the class to
-install the operations available in that specific port.
-
-If this wsdl describes more than one service, you might want to use
-the "service" config key to declare the service name.
-
-You can also set the transport object (which will be later be used in
-a compileClient call). This way you can define transports for
-different protocols.
-
-=back
-
-=head1 ACCESSORS
-
-For each operation, a secondary method called _$operation_data is
-created. This method returns a list composed by the WSDL object, the
-operation object and the compiled code ref.
-
-=head1 INVOCATION
-
-The invocation schema for each operation is documented in
-XML::Compile::SOAP. Each method is a closure that will call the
-coderef with the parameters ($self excluded).
-
-=head1 XML::Compile::SOAP x SOAP::WSDL
-
-For this module, there were two options on the SOAP client
-implementation. XML::Compile::SOAP and SOAP::WSDL. While both
-implement all the features expected by this module, the reason to
-choose XML::Compile::SOAP over SOAP::WSDL resides in the hability to
-support the specs more closely in the future. And also to provide a
-better support to handle literal XML messages. As the SOAP::WSDL
-documentation already states, XML::Compile::SOAP provides an approach
-much more extensible and close to the specs than SOAP::WSDL.
-
-Another version of this module may be implemented in the future
-supporting the other module, but, as for the relationship between
-Catalyst::Controller::SOAP and Catalyst::Model::SOAP,
-XML::Compile::SOAP seems to make more sense.
-
-=head1 SEE ALSO
-
-L<Catalyst::Controller::SOAP>, L<XML::LibXML>, L<XML::Compile::SOAP>
-
-=head1 AUTHORS
-
-Daniel Ruoso C<daniel.ruoso at verticalone.pt>
-
-=head1 BUG REPORTS
-
-Please submit all bugs regarding C<Catalyst::Model::SOAP> to
-C<bug-catalyst-model-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-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm (from rev 7744, Catalyst-Model-SOAP/1.0/trunk/lib/Catalyst/Model/SOAP.pm)
===================================================================
--- Catalyst-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm	                        (rev 0)
+++ Catalyst-Model-SOAP/1.0/tags/0.0.7/lib/Catalyst/Model/SOAP.pm	2008-05-12 19:40:13 UTC (rev 7745)
@@ -0,0 +1,338 @@
+{   package Catalyst::Model::SOAP;
+    use strict;
+    use warnings;
+    use XML::Compile::WSDL11;
+    use XML::Compile::Util qw/pack_type/;
+    use List::Util qw/first/;
+    use base qw(Catalyst::Model);
+    our $VERSION = '0.0.7';
+
+
+    __PACKAGE__->mk_accessors('transport');
+
+    use constant NS_SOAP_ENV => "http://schemas.xmlsoap.org/soap/envelope/";
+    use constant NS_WSDLSOAP => "http://schemas.xmlsoap.org/wsdl/soap/";
+    use XML::Compile::SOAP11;
+
+    sub register_wsdl {
+        my ($self, $wsdl, $target) = @_;
+
+        my $wsdl_obj;
+        my $schema;
+
+        if (ref $wsdl eq 'HASH') {
+            $schema = $wsdl->{schema};
+            $wsdl = $wsdl->{wsdl}
+        }
+
+        if (ref $wsdl eq 'ARRAY') {
+            my $main = shift @{$wsdl};
+            $wsdl_obj = XML::Compile::WSDL11->new($main);
+            $wsdl_obj->addWSDL($_) for @{$wsdl};
+        } else {
+            $wsdl_obj = XML::Compile::WSDL11->new($wsdl);
+        }
+
+        if (ref $schema eq 'ARRAY') {
+            $wsdl_obj->importDefinitions($_) for @{$schema};
+        } elsif ($schema) {
+            $wsdl_obj->importDefinitions($schema)
+        }
+
+        $wsdl_obj->importDefinitions(NS_SOAP_ENV);
+
+        my $transport = $self->config->{transport};
+        my $service = $self->config->{service};
+
+        if (ref $target eq 'HASH') {
+            # I'll have to implement a piece of XML::Compile::SOAP::WSDL11 here,
+            # as it doesn't provide a way to list the operations for a single port
+            foreach my $portname (keys %{$target}) {
+                my $realtarget = $self.'::'.$target->{$portname};
+                no strict 'refs';
+                @{$realtarget.'::ISA'} = qw(Catalyst::Model::SOAP::Instance);
+
+                my $serv = $wsdl_obj->find(service => $service)
+                  or die 'Could not find service '.$service;
+                my @ports = @{$serv->{port} || []};
+                my $port = first {$_->{name} eq $portname } @ports
+                  or die 'Could not find port '.$portname;
+                my $bindname = $port->{binding}
+                  or die 'Could not find binding for port '.$portname;
+                my $binding = $wsdl_obj->find(binding => $bindname)
+                  or die 'Could not find binding '.$bindname;
+                my $porttypename = $binding->{type}
+                  or die 'Could not find portType for binding '.$bindname;
+                my $portType = $wsdl_obj->find(portType => $porttypename)
+                  or die 'Could not find portType '.$porttypename;
+                my $operations = $portType->{operation}
+                  or die 'No operations found for portType '.$porttypename;
+
+
+                for my $operationhash (@$operations) {
+                    my $operation = $wsdl_obj->operation(service => $service,
+                                                         port => $portname,
+                                                         operation => $operationhash->{name});
+
+                    my $style = $binding->{'{'.NS_WSDLSOAP.'}binding'}[0]->getAttribute('style');
+                    my $proto = $binding->{'{'.NS_WSDLSOAP.'}binding'}[0]->getAttribute('transport');
+
+                    my ($use) = map { $_->{input}{'{'.NS_WSDLSOAP.'}body'}[0]->getAttribute('use') }
+                      grep { $_->{name} eq $operation->name } @{ $binding->{operation} || [] };
+
+                    $style = $style =~ /document/i ? 'document' : 'rpc';
+                    $use = $use =~ /literal/i ? 'literal' : 'encoded';
+
+                    $operation->{style} = $style;
+
+                    $self->_register_operation($wsdl_obj, $operation, $realtarget, $transport, $style, $use, $proto);
+                }
+
+            }
+        } else {
+            my $realtarget = $self.'::'.$target;
+            no strict 'refs';
+            @{$realtarget.'::ISA'} = qw(Catalyst::Model::SOAP::Instance);
+            foreach my $operation ($wsdl_obj->operations(produce => 'OBJECTS')) {
+                $self->_register_operation($wsdl_obj, $operation,$realtarget,$transport,'','');
+            }
+        }
+    }
+    sub _register_operation {
+        my ($self, $wsdl_obj, $operation, $realtarget, $transport, $style, $use, $proto) = @_;
+        no strict 'refs';
+        my $send;
+        if ($transport) {
+            $send = $transport->compileClient(kind => $operation->kind);
+        }
+
+        my ($rpcin, $rpcout);
+        if ($style =~ /rpc/i && $use =~ /literal/i) {
+            my $portop = $operation->portOperation();
+
+            if ($portop->{input}{message}) {
+                my $input_parts = $wsdl_obj->find(message => $portop->{input}{message})
+                  ->{part};
+
+                for (@{$input_parts}) {
+                    my $type = $_->{type} ? $_->{type} : $_->{element};
+                    $_->{compiled_writer} = $wsdl_obj->schemas->compile
+                      (WRITER => $type, elements_qualified => 'ALL');
+                };
+
+                $rpcin = sub {
+                    my ($doc, $data) = @_;
+                    my $operation_element = $doc->createElement($operation->name);
+                    my @parts =
+                      map {
+                          $_->{compiled_writer}->($doc, $data->{$_->{name}})
+                      } @{$input_parts};
+                    $operation_element->appendChild($_)
+                      for grep { ref $_ } @parts;
+                    return $operation_element;
+                };
+            }
+
+            if ($portop->{output}{message}) {
+                my $output_parts = $wsdl_obj->find(message => $portop->{output}{message})
+                  ->{part};
+                for (@{$output_parts}) {
+                    my $type = $_->{type} ? $_->{type} : $_->{element};
+                    $_->{compiled_reader} = $wsdl_obj->schemas->compile
+                      (READER => $type);
+                }
+
+
+                $rpcout = sub {
+                    my $soap = shift;
+                    my @nodes = grep { UNIVERSAL::isa($_, 'XML::LibXML::Element') } @_;
+                    return
+                      {
+                       map {
+                           my $data = $_->{compiled_reader}->(shift @nodes);
+                           ( $_->{name} => $data )
+                       } @{$output_parts}
+                      };
+                };
+            }
+
+        }
+
+        my $code = $operation->compileClient($send ? ( transport => $send ) : (),
+                                             rpcin => $rpcout,
+                                             rpcout => $rpcin,
+                                             protocol => $proto);
+        *{$realtarget.'::'.$operation->name()} = sub {
+            my $self = shift;
+            return $code->(@_);
+        };
+        *{$realtarget.'::_'.$operation->name().'_data'} = sub {
+            return ($wsdl_obj, $operation, $code);
+        };
+    }
+};
+{   package Catalyst::Model::SOAP::Instance;
+    use strict;
+    use warnings;
+    use base qw(Catalyst::Model);
+}
+
+
+{   use XML::Compile::Schema::BuiltInTypes;
+    package
+      # avoid being indexed...
+      XML::Compile::Schema::BuiltInTypes;
+
+    $XML::Compile::Schema::BuiltInTypes::builtin_types{QName}{parse} =
+     sub { my ($qname, $node) = @_;
+           my $prefix = $qname =~ s/^([^:]*)\:// ? $1 : '';
+
+           $node = $node->node if $node->isa('XML::Compile::Iterator');
+
+           unless ($prefix) {
+               return pack_type($node->namespaceURI, $qname);
+           }
+
+           my $ns = $node->lookupNamespaceURI($prefix)
+               or error __x"cannot find prefix `{prefix}' for QNAME `{qname}'"
+                     , prefix => $prefix, qname => $qname;
+           pack_type $ns, $qname;
+         };
+
+
+};
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Catalyst::Model::SOAP - Map a WSDL to a catalyst model class.
+
+=head1 SYNOPSIS
+
+  {# In the model class...
+      package MyApp::Model::SOAP;
+      use base qw(Catalyst::Model::SOAP);
+
+      __PACKAGE__->config->{transport} = XML::Compile::Transport::SOAPHTTP(...);
+
+      __PACKAGE__->register_wsdl('http://foo.bar/baz.wsdl', 'Baz');
+      __PACKAGE__->register_wsdl('http://baz.bar/foo.wsdl', 'Foo');
+      __PACKAGE__->register_wsdl('http://baz.bar/foo.wsdl',
+                                 { 'PortName1' => 'Class1',
+                                   'PortName2' => 'Class2'});
+
+      # use several wsdl files
+      __PACKAGE__->register_wsdl([ $file1, $file2, $file3 ], 'Baz');
+
+      # and or register schemas
+      __PACKAGE__->register_wsdl({ wsdl => $scalar_or_array,
+            schema => $scalar_or_array }, 'Bla');
+  };
+  {# later in some other class..
+     $c->model('SOAP::Baz')->getWeather(%arguments);
+     # is then dispatched to the operation getWeather described by the
+     # first wsdl...
+     $c->model('SOAP::Foo')->foo(%arguments);
+     # is then dispatched to the operation foo described by the
+     # second wsdl...
+  };
+
+=head1 ABSTRACT
+
+Create a catalyst model class from a WSDL definition using
+XML::Compile::SOAP.
+
+=head1 DESCRIPTION
+
+This module implements a mapping from a wsdl definition, interpreted
+by XML::Compile::SOAP::WSDL, as a Model class, where each operation in
+the wsdl file is represented by a method with the same name.
+
+=head1 METHODS
+
+=over
+
+=item register_wsdl($wsdl, $targetclass)
+
+This method will register the operations described by $wsdl in the
+$targetclass package. $wsdl may be anythin XML::Compile::SOAP::WSDL11
+accepts. The $targetclass is a relative package name which will be
+concatenated in the name of the model.
+
+If $wsdl is an arrayref, the first element is the one passed to new,
+and the others will be the argument to subsequent addWsdl calls.
+
+If $wsdl is a hashref, the "wsdl" key will be handled like above and
+the "schema" key will be used to importDefinitions. If the content of
+the schema key is an arrayref, it will result in several calls to
+importDefinition.
+
+Note that XML::Compile->knownNamespace(...) can be used to help
+declaring the wsdl.
+
+You can send a hashref for the $targetclass. Catalyst::Model::SOAP
+will use the key as the port name and the value as the class to
+install the operations available in that specific port.
+
+If this wsdl describes more than one service, you might want to use
+the "service" config key to declare the service name.
+
+You can also set the transport object (which will be later be used in
+a compileClient call). This way you can define transports for
+different protocols.
+
+=back
+
+=head1 ACCESSORS
+
+For each operation, a secondary method called _$operation_data is
+created. This method returns a list composed by the WSDL object, the
+operation object and the compiled code ref.
+
+=head1 INVOCATION
+
+The invocation schema for each operation is documented in
+XML::Compile::SOAP. Each method is a closure that will call the
+coderef with the parameters ($self excluded).
+
+=head1 XML::Compile::SOAP x SOAP::WSDL
+
+For this module, there were two options on the SOAP client
+implementation. XML::Compile::SOAP and SOAP::WSDL. While both
+implement all the features expected by this module, the reason to
+choose XML::Compile::SOAP over SOAP::WSDL resides in the hability to
+support the specs more closely in the future. And also to provide a
+better support to handle literal XML messages. As the SOAP::WSDL
+documentation already states, XML::Compile::SOAP provides an approach
+much more extensible and close to the specs than SOAP::WSDL.
+
+Another version of this module may be implemented in the future
+supporting the other module, but, as for the relationship between
+Catalyst::Controller::SOAP and Catalyst::Model::SOAP,
+XML::Compile::SOAP seems to make more sense.
+
+=head1 SEE ALSO
+
+L<Catalyst::Controller::SOAP>, L<XML::LibXML>, L<XML::Compile::SOAP>
+
+=head1 AUTHORS
+
+Daniel Ruoso C<daniel.ruoso at verticalone.pt>
+
+=head1 BUG REPORTS
+
+Please submit all bugs regarding C<Catalyst::Model::SOAP> to
+C<bug-catalyst-model-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-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm
===================================================================
--- Catalyst-Model-SOAP/1.0/trunk/t/lib/MyXMLModule.pm	2008-05-06 19:57:10 UTC (rev 7697)
+++ Catalyst-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm	2008-05-12 19:40:13 UTC (rev 7745)
@@ -1,47 +0,0 @@
-# In order to simulate the behaviour, I'll re-write the methods of
-# XML::Compile::SOAP::WSDL11, returning a known structure so that we
-# can predict the answer and also avoid centering the test on
-# XML::Compile::SOAP and depending on network.
-{
-    package XML::Compile::WSDL11;
-    use Symbol;
-    sub new {
-        return bless { symbol => gensym() }, MyXML::WSDL11;
-    }
-};
-{
-    package MyXML::WSDL11;
-    sub operations {
-        return
-          (
-           (bless { name => 'op1', service => 'sv1', port => 'pt1' }, MyXML::Operation),
-           (bless { name => 'op2', service => 'sv1', port => 'pt1' }, MyXML::Operation),
-           (bless { name => 'op3', service => 'sv1', port => 'pt2' }, MyXML::Operation),
-           (bless { name => 'op4', service => 'sv2', port => 'pt3' }, MyXML::Operation),
-           (bless { name => 'op5', service => 'sv2', port => 'pt4' }, MyXML::Operation),
-          )
-    }
-};
-{
-    package MyXML::Operation;
-    sub compileClient {
-        my $self = shift;
-        return sub { return $self->{name} };
-    }
-    sub port {
-        my $self = shift;
-        return $self->{port};
-    }
-    sub service {
-        my $self = shift;
-        return $self->{service};
-    }
-    sub name {
-        my $self = shift;
-        return $self->{name};
-    }
-    sub soapStyle {
-        'document'
-    }
-};
-1;

Copied: Catalyst-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm (from rev 7744, Catalyst-Model-SOAP/1.0/trunk/t/lib/MyXMLModule.pm)
===================================================================
--- Catalyst-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm	                        (rev 0)
+++ Catalyst-Model-SOAP/1.0/tags/0.0.7/t/lib/MyXMLModule.pm	2008-05-12 19:40:13 UTC (rev 7745)
@@ -0,0 +1,49 @@
+# In order to simulate the behaviour, I'll re-write the methods of
+# XML::Compile::SOAP::WSDL11, returning a known structure so that we
+# can predict the answer and also avoid centering the test on
+# XML::Compile::SOAP and depending on network.
+{
+    package XML::Compile::WSDL11;
+    use Symbol;
+    sub new {
+        return bless { symbol => gensym() }, MyXML::WSDL11;
+    }
+};
+{
+    package MyXML::WSDL11;
+    sub operations {
+        return
+          (
+           (bless { name => 'op1', service => 'sv1', port => 'pt1' }, MyXML::Operation),
+           (bless { name => 'op2', service => 'sv1', port => 'pt1' }, MyXML::Operation),
+           (bless { name => 'op3', service => 'sv1', port => 'pt2' }, MyXML::Operation),
+           (bless { name => 'op4', service => 'sv2', port => 'pt3' }, MyXML::Operation),
+           (bless { name => 'op5', service => 'sv2', port => 'pt4' }, MyXML::Operation),
+          )
+    }
+    sub importDefinitions {
+    }
+};
+{
+    package MyXML::Operation;
+    sub compileClient {
+        my $self = shift;
+        return sub { return $self->{name} };
+    }
+    sub port {
+        my $self = shift;
+        return $self->{port};
+    }
+    sub service {
+        my $self = shift;
+        return $self->{service};
+    }
+    sub name {
+        my $self = shift;
+        return $self->{name};
+    }
+    sub soapStyle {
+        'document'
+    }
+};
+1;




More information about the Catalyst-commits mailing list