Compare commits

...

3 Commits
1.17 ... 1.20

Author SHA1 Message Date
Martin Kutter
95465c33d9 import SOAP-WSDL 1.20 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.20
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.20.tar.gz
2009-12-12 19:47:38 -08:00
Martin Kutter
1d8092299a import SOAP-WSDL 1.19 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.19
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.19.tar.gz
2009-12-12 19:47:37 -08:00
Martin Kutter
90ea294d66 import SOAP-WSDL 1.18 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.18
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.18.tar.gz
2009-12-12 19:47:37 -08:00
8 changed files with 250 additions and 45 deletions

58
CHANGES
View File

@@ -1,14 +1,56 @@
$Log: CHANGES,v $
Revision 1.6 2004/06/11 19:51:49 lsc
- changed expansion mode
Revision 1.7 2004/07/27 13:00:03 lsc
- added missing test file
Revision 1.5 2004/06/11 19:49:54 lsc
Revision 1.18 2004/07/16 07:43:05 lsc
fixed test scripts for windows
Revision 1.17 2004/07/05 08:19:49 lsc
- added wsdl_checkoccurs
Revision 1.16 2004/07/04 09:01:14 lsc
- change <definitions> element lookup from find('/definitions') and find('wsdl:definitions') to find('/*[1]') to process arbitrary default (wsdl) namespaces correctly
- fixed test output in test 06
Revision 1.15 2004/07/02 12:28:31 lsc
- documentation update
- cosmetics
Revision 1.14 2004/07/02 10:53:36 lsc
- API change:
- call now behaves (almost) like SOAP::Lite::call
- call() takes a list (hash) as second argument
- call does no longer support the "dispatch" option
- dispatching calls can be suppressed by passing
"no_dispatch => 1" to new()
- dispatching calls can be suppressed by calling
$soap->no_dispatch(1);
and re-enabled by calling
$soap->no_dispatch(0);
- Updated test skripts to reflect API change.
Revision 1.13 2004/06/30 12:08:40 lsc
- added IServiceInstance (ecmed) to acceptance tests
- refined documentation
Revision 1.12 2004/06/26 14:13:29 lsc
- refined file caching
- added descriptive output to test scripts
Revision 1.11 2004/06/26 07:55:40 lsc
- fixed "freeze" caching bug
- improved test scripts to test file system caching (and show the difference)
Revision 1.10 2004/06/26 06:30:33 lsc
- added filesystem caching using Cache::FileCache
Revision 1.9 2004/06/24 12:27:23 lsc
Cleanup
Revision 1.8 2004/06/11 19:49:15 lsc
- moved .t files to more self-describing names
- changed WSDL.pm to accept AXIS wsdl files
- implemented XPath query result caching on all absolute queries
Revision 1.4 2004/06/11 12:12:20 lsc
CPAN preparation
Revision 1.3 2004/06/11 11:59:51 lsc
Test commit
Revision 1.7 2004/06/07 13:01:16 lsc
added changelog to pod

View File

@@ -2,6 +2,7 @@ t/1_performance.t
t/2_helloworld.NET.t
t/acceptance/helloworld.asmx.xml
t/acceptance/helloworld.xml
t/acceptance/test.wsdl.xml
WSDL.pm
MANIFEST
README

5
README
View File

@@ -13,6 +13,11 @@ SOAP::WSDL requires the following perl modules:
- XML::XPath
If you want to use file system caching (improves performance), you also
need the following packages:
- Cache::Cache
INSTALLING
Use the usual mantra:

45
WSDL.pm
View File

@@ -4,16 +4,16 @@ package SOAP::WSDL;
use SOAP::Lite;
use vars qw($VERSION @ISA);
use XML::XPath;
use Cache::FileCache;
# use Cache::FileCache;
use Data::Dumper;
# use Carp;
use diagnostics;
# use diagnostics;
@ISA= qw(SOAP::Lite);
# let CVS handle this for you...
$VERSION = sprintf("%d.%02d", q$Revision: 1.17 $ =~ /(\d+)\.(\d+)/);
$VERSION = sprintf("%d.%02d", q$Revision: 1.20 $ =~ /(\d+)\.(\d+)/);
sub wsdlinit {
my $self=shift;
@@ -24,7 +24,7 @@ sub wsdlinit {
$self->{_WSDL}->{ checkoccurs } = 1 unless defined( $self->{_WSDL}->{ checkoccurs } );
if (($self->{_WSDL}->{ caching }) && (! $self->{_WSDL }->{ fileCache })) {
$self->wsdl_cache_init()
$self->wsdl_cache_init();
};
my $location=$self->transport->proxy->endpoint
@@ -225,11 +225,19 @@ sub wsdl_cache_init {
my $self=shift;
my $p=shift || undef;
my $cache = undef;
if ( defined( $p ) ) {
$p->{ cache_root } = $self->{_WSDL}->{ cache_directory } unless ($p->{ cache_root });
$cache=Cache::FileCache->new( $p ) if ($p->{ cache_root });
eval { require Cache::FileCache; };
if ($@) {
warn "File caching is enabled, but you do not have the Cache::FileCache module. Disabling Filesystem caching."
if ($self->{_WSDL}->{ cache_directory });
} else {
$cache=Cache::FileCache->new( { cache_root => $self->{_WSDL}->{ cache_directory } } ) if ($self->{_WSDL}->{ cache_directory });
if ( defined( $p ) ) {
$p->{ cache_root } = $self->{_WSDL}->{ cache_directory } unless ($p->{ cache_root });
$cache=Cache::FileCache->new( $p ) if ($p->{ cache_root });
} else {
if ($self->{_WSDL}->{ cache_directory }) {
$cache=Cache::FileCache->new( { cache_root => $self->{_WSDL}->{ cache_directory } } );
}
}
}
$self->{_WSDL}->{ fileCache } = $cache;
}
@@ -934,6 +942,16 @@ be stable from 1.14 on, and that is the part you'll use most frequently.
=over
=item * Check for the correct number of elements confused with complex types
If a complex type is marked optional in a WSDL file, but sub-parts are marked as
required, SOAP::WSDL will die if the complex type is not found in the data
(because it checks only for the occurence of simple type elements).
A quick-and-dirty workaround is to turn off the check with
$soap->wsdl_checkoccurs(0);
=item * Arrays of complex types are not checked for the correct number of elements
Arrays of complex types are just encoded and not checked for correctness etc.
@@ -980,6 +998,15 @@ to the user.
=head1 CHANGES
$Log: WSDL.pm,v $
Revision 1.20 2004/07/29 06:56:45 lsc
removed "use" dependency on Cache::FileCache. require'ing it instead.
Revision 1.19 2004/07/27 13:00:03 lsc
- added missing test file
Revision 1.18 2004/07/16 07:43:05 lsc
fixed test scripts for windows
Revision 1.17 2004/07/05 08:19:49 lsc
- added wsdl_checkoccurs

View File

@@ -1,10 +1,13 @@
#!/usr/bin/perl -w
use strict;
use Test::More tests=> 7;
use Test;
plan tests=> 6;
use Time::HiRes qw( gettimeofday tv_interval );
use lib '../..';
use Data::Dumper;
use_ok "SOAP::WSDL";
use Cwd;
use SOAP::WSDL;
ok 1; # if we made it this far, we're ok
### test vars END
print "Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
@@ -15,33 +18,43 @@ my $data = {
givenName => 'Vorname'
};
my $dir = cwd;
# chomp /t/ to allow running the script from t/ directory
$dir=~s|/t/?||;
my $t0 = [gettimeofday];
ok( my $soap=SOAP::WSDL->new(
wsdl => 'file:///home/lsc/eclipse3/workspace/SOAP/t/acceptance/helloworld.asmx.xml',
wsdl => "file://$dir/t/acceptance/helloworld.asmx.xml",
no_dispatch => 1
), "Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."ms)" ); #->proxy('http://erlm5aqa.ww001.siemens.net/lasttest/helloworld/helloworld.asmx' );
) );
print "Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."ms)\n" ;
$soap->proxy('http://erlm5aqa.ww001.siemens.net/lasttest/helloworld/helloworld.asmx');
$soap->proxy('http://helloworld/helloworld.asmx');
$t0 = [gettimeofday];
ok($soap->wsdlinit(caching => 1), "wsdl file init (".tv_interval ( $t0, [gettimeofday]) ."s)" );;
eval{ $soap->wsdlinit(caching => 1) };
unless ($@) {
ok(1);
} else {
ok 0;
print STDERR $@;
}
print "wsdl file init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;;
$soap->readable(1);
$t0 = [gettimeofday];
ok( $soap->call("sayHello" , %{ $data }), "1 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)" );;
ok( $soap->call("sayHello" , %{ $data }));
print "1 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
ok($soap->call(sayHello => %{ $data }), "1 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)" );;
ok($soap->call(sayHello => %{ $data }) );
print "1 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
for (my $i=1; $i<100; $i++) {
$soap->call(sayHello => %{ $data });
}
ok(1, "100 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)" );;
$soap->call(sayHello => %{ $data });
$t0 = [gettimeofday];
for (my $i=1; $i<100; $i++) {
$soap->call(sayHello => %{ $data });
}
ok(1, "100 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)" );;
ok(1);
print "100 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)\n";

View File

@@ -12,10 +12,13 @@
use strict;
use diagnostics;
use Test::More tests => 5;
use Test;
plan tests => 5;
use Time::HiRes qw( gettimeofday tv_interval );
use lib '../..';
use_ok "SOAP::WSDL";
use Cwd;
use SOAP::WSDL;
ok 1; # if we made it this far, we're ok
### test vars END
print "Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
print "Acceptance test against sample output with simple WSDL\n";
@@ -39,16 +42,17 @@ my $data = {
};
my $t0 = [gettimeofday];
my $dir=`pwd`;
chomp $dir;
my $dir= cwd;
$dir=~s/\/t//;
ok( my $soap=SOAP::WSDL->new(
wsdl => 'file:///'.$dir.'/t/acceptance/test.wsdl.xml',
no_dispatch => 1
), "Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."s)" ); #->proxy('http://erlm5aqa.ww001.siemens.net/lasttest/helloworld/helloworld.asmx' );
$soap->proxy('http://erlm5aqa.ww001.siemens.net/lasttest/helloworld/helloworld.asmx');
) );
print "Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$soap->proxy('http://helloworld/helloworld.asmx');
$t0 = [gettimeofday];
ok($soap->wsdlinit(), "WSDL init (".tv_interval ( $t0, [gettimeofday]) ."s)") ;
ok($soap->wsdlinit());
print "WSDL init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
do {
@@ -64,8 +68,12 @@ do {
$xml_test=~s/^.+\<([^\/]+?)\:Body\>//;
$xml_test=~s/\<\/$1\:Body\>.*//;
if ( ($xml) && ($xml eq $xml_test) ) { pass ("Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)") } else {
fail( "Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)") ;
if ( ($xml) && ($xml eq $xml_test) ) {
ok 1;
print "Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)\n"
} else {
ok 0;
print "Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
print "$xml\n$xml_test\n"; };
};
@@ -83,8 +91,12 @@ do {
$xml_test=~s/^.+\<([^\/]+?)\:Body\>//;
$xml_test=~s/\<\/$1\:Body\>.*//;
if ( ($xml) && ($xml eq $xml_test) ) { pass ("Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)") } else {
fail( "Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)") ;
if ( ($xml) && ($xml eq $xml_test) ) {
ok 1;
print "Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)\n";
} else {
ok 0;
print "Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
print "$xml\n$xml_test\n"; };
};

View File

@@ -68,7 +68,7 @@ xmlns="http://schemas.xmlsoap.org/wsdl/">
<service name="Service1">
<port name="Service1Soap" binding="s0:Service1Soap">
<soap:address
location="http://erlm5aqa.ww001.siemens.net/lasttest/helloworld/helloworld.asmx" />
location="http://helloworld/helloworld.asmx" />
</port>
</service>
</definitions>

105
t/acceptance/test.wsdl.xml Normal file
View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<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:s0="urn:HelloWorld"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="urn:HelloWorld"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<s:schema elementFormDefault="qualified"
targetNamespace="urn:HelloWorld">
<s:element name="sayHello">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name"
type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="givenName"
type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="test"
type="s0:test2" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="sayHelloResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1"
name="sayHelloResult" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="test2">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name"
type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="givenName"
type="s:string" />
</s:sequence>
</s:complexType>
<s:complexType name="testExtended">
<s:extension base="s0:test2">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="extend"
type="s:string" />
</s:sequence>
</s:extension>
</s:complexType>
</s:schema>
</types>
<message name="sayHelloSoapIn">
<part name="parameters" element="s0:sayHello" />
<part name="test1" type="s0:testExtended" />
<part name="test2" type="s0:test2"
targetNamespace="urn:test2" />
</message>
<message name="sayHelloSoapOut">
<part name="parameters" element="s0:sayHelloResponse" />
</message>
<portType name="Service1Soap">
<operation name="sayHello">
<input message="s0:sayHelloSoapIn" />
<output message="s0:sayHelloSoapOut" />
</operation>
</portType>
<binding name="Service1Soap" type="s0:Service1Soap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" />
<operation name="sayHello">
<soap:operation soapAction="urn:HelloWorld#sayHello"
style="document" />
<input>
<soap:body use="literal" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<service name="Service1">
<port name="Service1Soap" binding="s0:Service1Soap">
<soap:address
location="http://helloworld/helloworld.asmx" />
</port>
</service>
</definitions>