Compare commits

..
22 Commits
Author SHA1 Message Date
Martin KutterandMichael G. Schwern c6a48ba84b import SOAP-WSDL 1.26 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.26
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.26.tar.gz
2009-12-12 19:48:00 -08:00
Martin KutterandMichael G. Schwern 30be0da3dc import SOAP-WSDL 2.00_16 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_16
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_16.tar.gz
2009-12-12 19:47:59 -08:00
Martin KutterandMichael G. Schwern 2347a88353 import SOAP-WSDL 1.25 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.25
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.25.tar.gz
2009-12-12 19:47:57 -08:00
Martin KutterandMichael G. Schwern 9e85f63aa0 import SOAP-WSDL 1.24 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.24
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.24.tar.gz
2009-12-12 19:47:56 -08:00
Martin KutterandMichael G. Schwern 7ba2f93e44 import SOAP-WSDL 2.00_15 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_15
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_15.tar.gz
2009-12-12 19:47:55 -08:00
Martin KutterandMichael G. Schwern 099c83b6bc import SOAP-WSDL 2.00_14 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_14
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_14.tar.gz
2009-12-12 19:47:53 -08:00
Martin KutterandMichael G. Schwern f63138fc87 import SOAP-WSDL 2.00_13 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_13
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_13.tar.gz
2009-12-12 19:47:52 -08:00
Martin KutterandMichael G. Schwern fd0854e34a import SOAP-WSDL 2.00_12 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_12
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_12.tar.gz
2009-12-12 19:47:49 -08:00
Martin KutterandMichael G. Schwern c2da74b5ae import SOAP-WSDL 2.00_11 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_11
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_11.tar.gz
2009-12-12 19:47:49 -08:00
Martin KutterandMichael G. Schwern 7ba1959888 import SOAP-WSDL 2.00_10 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_10
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_10.tar.gz
2009-12-12 19:47:48 -08:00
Martin KutterandMichael G. Schwern a554e87f49 import SOAP-WSDL 2.00_09 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_09
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_09.tar.gz
2009-12-12 19:47:47 -08:00
Martin KutterandMichael G. Schwern 312f3d6bbd import SOAP-WSDL 2.00_08 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_08
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_08.tar.gz
2009-12-12 19:47:46 -08:00
Martin KutterandMichael G. Schwern 40e0e67e84 import SOAP-WSDL 2.00_07 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_07
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_07.tar.gz
2009-12-12 19:47:45 -08:00
Martin KutterandMichael G. Schwern 25548e6296 import SOAP-WSDL 2.00_06 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_06
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_06.tar.gz
2009-12-12 19:47:44 -08:00
Martin KutterandMichael G. Schwern a78d6d15b5 import SOAP-WSDL 2.00_05 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_05
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_05.tar.gz
2009-12-12 19:47:43 -08:00
Martin KutterandMichael G. Schwern 5c42b1d8f6 import SOAP-WSDL 2.00_04 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_04
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_04.tar.gz
2009-12-12 19:47:43 -08:00
Martin KutterandMichael G. Schwern 21b5330a8d import SOAP-WSDL 2.00_03 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_03
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_03.tar.gz
2009-12-12 19:47:42 -08:00
Martin KutterandMichael G. Schwern 7716d4349a import SOAP-WSDL 2.00_02 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_02
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_02.tar.gz
2009-12-12 19:47:41 -08:00
Martin KutterandMichael G. Schwern 6fe52c4370 import SOAP-WSDL 2.00_01 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_01
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_01.tar.gz
2009-12-12 19:47:41 -08:00
Martin KutterandMichael G. Schwern bfbf5e27e0 import SOAP-WSDL 1.23 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.23
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.23.tar.gz
2009-12-12 19:47:40 -08:00
Martin KutterandMichael G. Schwern 903b3e95e4 import SOAP-WSDL 1.22 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.22
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.22.tar.gz
2009-12-12 19:47:39 -08:00
Martin KutterandMichael G. Schwern a31389246e import SOAP-WSDL 1.21 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.21
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.21.tar.gz
2009-12-12 19:47:39 -08:00
19 changed files with 2538 additions and 1441 deletions
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/perl -w
use Module::Build;
Module::Build->new(
create_makefile_pl => 'passthrough',
dist_name => 'SOAP-WSDL',
dist_version => '1.26',
dist_abstract => 'WSDL support for SOAP::Lite',
module_name => 'SOAP::WSDL',
license => 'artistic',
requires => {
'SOAP::Lite' => 0,
'XML::XPath' => 0,
},
buildrequires => {
'Test::More' => 0,
'SOAP::Lite' => 0,
'XML::XPath' => 0,
'Time::HiRes' => 0,
'File::Spec' => 0,
'File::Basename' => 0,
'Cwd' => 0,
},
)->create_build_script;
+112 -1
View File
@@ -1,4 +1,115 @@
$Log: CHANGES,v $ * v1.26 2007/10/05 - bugfix
- fixed issue reported by T Alex Beamish: tests fail when unwrapped into /tmp
* v1.25 2007/09/24 - maintenance
- added Makefile.PL to ease installation
* v1.24 2007/09/22 - bugfix
- fixes issue reported by David Bussenschutt: wsdlinit always uses new SOAP::Schema instance.
* v1.23 2007/06/05 - bugfixes and optimizations
- fixes #27426: missing prereq XML::XPath
- fixed build_requires
- some doc fixes
- now performs some initializations on calling portname()
* v1.22 2007/05/30 - auto-discover service and port again
- re-introduces auto-detecting of servicename and portname
- fixes #27325: Test fails with Test::Pod::Coverage v 1.06.
- Now build requires Test::More
- documentation update
- cosmetics
2007/05/28 private methods made private and pod update
- added pod tests
- made encodeComplexType and method generators private
- updated pod
- fixed test scripts to work again from within/without t/
- moved development repository to
https://svn.sourceforge.net/svnroot/soap-wsdl/ (finally !)
2007/05/21 updated base version to customized version from Giovanni S Fois
- merged in doc changes, so that they don't refer to "customized version"
- changed build process to Build.PL
- changed repository layout to support new build process
2006/11/06 only in the customized version
Added the support for default values in the wsdl file
2006/11/04 only in the customized version
Changed the calling interface. Now it's driven by the by the service
and port names.
2006/11/03 only in the customized version
Corrected the Check for the correct number of elements in complex types
If a complex type is marked optional in a WSDL file, but sub-parts are marked as
required, SOAP::WSDL used to die if the complex type was found in the data.
Now, if a complex type has not data associated and is not strictly required, it
will not be encoded.
A quick-and-dirty workaround is to turn off the check with
$soap->wsdl_checkoccurs(0);
2006/11/02 only in the customized version
- small changes for .Net compatibility when encoding complex types
- added some test cases to the test suite try perl t/3_varous.t for more details
2006/10/28 only in the customized version
- added a small support for the complexType restrictions of Arrays
2006/10/02 only in the customized version
(Thanks to Dan Horne for having spotted so many bugs in a row)
- the xml prefix was used as the default wsdl namespace when looking for the complextype restrictions
- the module crashed when the operation had no part declaration
- the port name stated in the service definition was used as the portType
- the test suited failed when the module was unzipped in a t.* named directory
2006/09/15 only in the customized version
(Thanks to Terje Kristensen for his support and twisted wsdl files :)
- cleaned up the code for readability
- cleaned up the code for "use warnings" and "use strict"
- added support for wsdl files with multiple schema declarations
- added supporto for some restriction on complexTypes
2006/07/10 only in the customized version
- added the support for SOAP::header calls
2006/06/10 only in the customized version
- removed the overload based on the type of the call's parameters
- added an overloading support based on the unique name of the input message of the call. The input message must be provided by the calling script (sorry, the module has no mean to find this).
- added a light support to the sympletypes.
- added a light support to the imported namespaces in the types section.
- added the support for the multiple SOAP bindings. The correct binding must be provided by the calling script (sorry, the module has no mean to find this).
- the method will use his own soapAction if defined
- the method will use his own namespace if defined
- some other code cleaning
2006/04/23 only in the customized version
- corrected a bug related to the presence of the same method name on multiple
webservices
- added an overloading support based on the type of the call's parameters
- multiple extensions support added: a complextype can be an extension of a complextype which is an extension and so on
Revision 1.7 2004/07/27 13:00:03 lsc Revision 1.7 2004/07/27 13:00:03 lsc
- added missing test file - added missing test file
+24
View File
@@ -0,0 +1,24 @@
Development of SOAP::WSDL takes place on sourceforge.net.
There's a svn repository available at
https://svn.sourceforge.net/svnroot/soap-wsdl
Engagement in the further development of this module is highly encouraged -
many people have already contributed, and many more probably will.
I'm sometimes a bit slow in answering e-mails or merging in changes -
so if you feel your changes are urgent, please set up a sourceforge account
and ask me for commit permissions on the repository - I will happily accept
you as co-author.
The (my) current roadmap for SOAP::WSDL is:
1.2*: Bugfixes and support for more XSD variants
1.3: Bindings support
2.*: WSDL -> Perl Class factory with offline WSDL processing
May 2007,
Martin Kutter
+13 -5
View File
@@ -1,10 +1,18 @@
Build.PL
CHANGES
HACKING
lib/SOAP/WSDL.pm
Makefile.PL
MANIFEST This list of files
META.yml
README
t/1_performance.t t/1_performance.t
t/2_helloworld.NET.t t/2_helloworld.NET.t
t/3_various.t
t/4_auto_set_port.t
t/5_same_transport.t
t/97_pod.t
t/98_pod_coverage.t
t/acceptance/helloworld.asmx.xml t/acceptance/helloworld.asmx.xml
t/acceptance/helloworld.xml t/acceptance/helloworld.xml
t/acceptance/test.wsdl.xml t/acceptance/test.wsdl.xml
WSDL.pm
MANIFEST
README
CHANGES
Makefile.PL
+19
View File
@@ -0,0 +1,19 @@
---
name: SOAP-WSDL
version: 1.26
author: []
abstract: WSDL support for SOAP::Lite
license: artistic
resources:
license: http://opensource.org/licenses/artistic-license.php
requires:
SOAP::Lite: 0
XML::XPath: 0
provides:
SOAP::WSDL:
file: lib/SOAP/WSDL.pm
version: 1.25
generated_by: Module::Build version 0.2808
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.2.html
version: 1.2
+31 -10
View File
@@ -1,10 +1,31 @@
#!/usr/bin/perl -w # Note: this file was auto-generated by Module::Build::Compat version 0.03
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence unless (eval "use Module::Build::Compat 0.02; 1" ) {
# the contents of the Makefile that is written. print "This module requires Module::Build to install itself.\n";
WriteMakefile(
'NAME' => 'SOAP::WSDL', require ExtUtils::MakeMaker;
'VERSION_FROM' => 'WSDL.pm', # finds $VERSION my $yn = ExtUtils::MakeMaker::prompt
'PREREQ_PM' => { 'XML::XPath' => 0, (' Install Module::Build now from CPAN?', 'y');
'SOAP::Lite' => 0 }
); unless ($yn =~ /^y/i) {
die " *** Cannot install without Module::Build. Exiting ...\n";
}
require Cwd;
require File::Spec;
require CPAN;
# Save this 'cause CPAN will chdir all over the place.
my $cwd = Cwd::cwd();
CPAN::Shell->install('Module::Build::Compat');
CPAN::Shell->expand("Module", "Module::Build::Compat")->uptodate
or die "Couldn't install Module::Build, giving up.\n";
chdir $cwd or die "Cannot chdir() back to $cwd: $!";
}
eval "use Module::Build::Compat 0.02; 1" or die $@;
Module::Build::Compat->run_build_pl(args => \@ARGV);
require Module::Build;
Module::Build::Compat->write_makefile(build_class => 'Module::Build');
+31 -34
View File
@@ -1,34 +1,31 @@
SOAP::WSDL - a WSDL-driven message preprocessor for SOAP::Lite. SOAP::WSDL - a WSDL-driven message preprocessor for SOAP::Lite.
DESCRIPTION DESCRIPTION
See "perldoc SOAP::WSDL" (or "perldoc WSDL.pm") for details. See "perldoc SOAP::WSDL" (or "perldoc WSDL.pm") for details.
PREREQUISITES PREREQUISITES
SOAP::WSDL requires the following perl modules: SOAP::WSDL requires the following perl modules:
- SOAP::Lite - SOAP::Lite
- XML::XPath - XML::XPath
If you want to use file system caching (improves performance), you also If you want to use file system caching (improves performance), you also
need the following packages: need the following packages:
- Cache::Cache - Cache::Cache
INSTALLING INSTALLING
Use the usual mantra: perl Build.PL
perl Build
perl Makefile.PL perl Build test
make perl Build install
make test
make install LICENSE
This library is free software, you can distribute/modify it under the same
LICENSE terms as perl itself.
This library is free software, you can distribute it under the same
terms as perl itself.
-1072
View File
File diff suppressed because it is too large Load Diff
+1573
View File
File diff suppressed because it is too large Load Diff
+83 -36
View File
@@ -1,60 +1,107 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
use strict; use strict;
use Test; use Test;
plan tests=> 6; plan tests=> 11;
use Time::HiRes qw( gettimeofday tv_interval ); use Time::HiRes qw( gettimeofday tv_interval );
use lib '../..'; use lib '../lib';
use Data::Dumper; use Data::Dumper;
use Cwd; use Cwd;
use SOAP::WSDL; use SOAP::WSDL;
ok 1; # if we made it this far, we're ok ok 1; # if we made it this far, we're ok
### test vars END ### test vars END
print "Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n"; print "# Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
print "Performance test with simple WSDL file\n"; print "# Performance test with WSDL file\n";
my $data = { my $data = { name => 'Mein Name',
name => 'Mein Name', givenName => 'Vorname' };
givenName => 'Vorname'
};
my $dir = cwd; my $dir = cwd;
# chomp /t/ to allow running the script from t/ directory # chomp /t/ to allow running the script from t/ directory
$dir=~s|/t/?||; $dir=~s|/t/?$||;
my $t0 = [gettimeofday]; my $t0 = [gettimeofday];
ok( my $soap=SOAP::WSDL->new(
wsdl => "file://$dir/t/acceptance/helloworld.asmx.xml",
no_dispatch => 1
) );
print "Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."ms)\n" ;
$soap->proxy('http://helloworld/helloworld.asmx'); {
ok( my $soap=SOAP::WSDL->new(
wsdl => "file://$dir/t/acceptance/helloworld.asmx.xml",
no_dispatch => 1
) );
$t0 = [gettimeofday]; print "# Test with NO caching\n";
eval{ $soap->wsdlinit(caching => 1) }; print "# Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."ms)\n" ;
unless ($@) {
ok(1);
} else { $t0 = [gettimeofday];
ok 0; eval{ $soap->wsdlinit(caching => 0) };
print STDERR $@; unless ($@) {
ok(1);
} else {
ok 0;
print STDERR $@;
}
print "# wsdl file init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;;
$soap->readable(1);
$soap->wsdl_cache_store();
$soap->servicename("Service1");
$soap->portname("Service1Soap");
$t0 = [gettimeofday];
ok( $soap->call("sayHello" , %{ $data }));
print "# NO cache first call: (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
ok($soap->call(sayHello => %{ $data }) );
print "# NO cache second call (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
for (1..10) {
$soap->call(sayHello => %{ $data });
}
ok(1);
print "# NO cache: 10 x call (".tv_interval ( $t0, [gettimeofday]) ."s)\n";
} }
print "wsdl file init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;; {
$soap->readable(1); print "# Test with caching ENABLED\n";
$t0 = [gettimeofday]; $t0 = [gettimeofday];
ok( $soap->call("sayHello" , %{ $data })); ok(my $soap=SOAP::WSDL->new(
print "1 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ; wsdl => "file://$dir/t/acceptance/helloworld.asmx.xml",
no_dispatch => 1
) );
print "# Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."ms)\n" ;
-e "$dir/t/cache" or mkdir "$dir/t/cache";
$t0 = [gettimeofday]; $t0 = [gettimeofday];
ok($soap->call(sayHello => %{ $data }) ); eval{ $soap->wsdlinit(caching => 1,cache_directory =>"$dir/t/cache") };
print "1 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ; unless ($@) {
ok(1);
} else {
ok 0;
print STDERR $@;
}
print "# wsdl file init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;;
$soap->readable(1);
$soap->servicename("Service1");
$soap->portname("Service1Soap");
$t0 = [gettimeofday];
ok( $soap->call("sayHello" , %{ $data }));
print "# CACHE first call (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
ok($soap->call(sayHello => %{ $data }) );
print "# CACHE second call: (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$t0 = [gettimeofday];
for (1..10) {
$soap->call(sayHello => %{ $data });
}
ok(1);
print "# CACHE: 10 x call (".tv_interval ( $t0, [gettimeofday]) ."s)\n";
$t0 = [gettimeofday];
for (my $i=1; $i<100; $i++) {
$soap->call(sayHello => %{ $data });
} }
ok(1);
print "100 x call pre-work (".tv_interval ( $t0, [gettimeofday]) ."s)\n";
+104 -102
View File
@@ -1,102 +1,104 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
####################################################################################### #######################################################################################
# #
# 2_helloworld.t # 2_helloworld.t
# #
# Acceptance test for message encoding, based on .NET wsdl and example code. # Acceptance test for message encoding, based on .NET wsdl and example code.
# SOAP::WSDL's encoding doesn't I<exactly> match the .NET example, because # SOAP::WSDL's encoding doesn't I<exactly> match the .NET example, because
# .NET doesn't always specify types (SOAP::WSDL does), and the namespace # .NET doesn't always specify types (SOAP::WSDL does), and the namespace
# prefixes chosen are different (maybe the encoding style, too ? this would be a bug !) # prefixes chosen are different (maybe the encoding style, too ? this would be a bug !)
# #
######################################################################################## ########################################################################################
use strict; use strict;
use diagnostics; use diagnostics;
use Test; use Test;
plan tests => 5; plan tests => 5;
use Time::HiRes qw( gettimeofday tv_interval ); use Time::HiRes qw( gettimeofday tv_interval );
use lib '../..'; use lib '../lib';
use Cwd; use Cwd;
use SOAP::WSDL; use SOAP::WSDL;
ok 1; # if we made it this far, we're ok ok 1; # if we made it this far, we're ok
### test vars END ### test vars END
print "Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n"; print "# Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
print "Acceptance test against sample output with simple WSDL\n"; print "# Acceptance test against sample output with simple WSDL\n";
my $data = { my $data = {
name => 'test', name => 'test',
# givenName => 'GIVENNAME', givenName => 'GIVENNAME',
# test => { test => {
# name => 'TESTNAME', name => 'TESTNAME',
# givenName => 'GIVENNAME', givenName => 'GIVENNAME',
# }, },
# test1 => { };
# name => 'TESTNAME',
# givenName => 'GIVENNAME',
# extend => 'EXTEND', my $dir= cwd;
# }, $dir=~s/\/t\/?$//;
# test2 => {
# name => 'TESTNAME', my $t0 = [gettimeofday];
# givenName => 'GIVENNAME', ok( my $soap=SOAP::WSDL->new(wsdl => 'file:///'.$dir.'/t/acceptance/test.wsdl.xml',
# } no_dispatch => 1 ) );
};
print "# Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
my $t0 = [gettimeofday];
my $dir= cwd; $t0 = [gettimeofday];
$dir=~s/\/t//; eval{ $soap->wsdlinit() };
ok( my $soap=SOAP::WSDL->new( unless ($@) {
wsdl => 'file:///'.$dir.'/t/acceptance/test.wsdl.xml', ok(1);
no_dispatch => 1 } else {
) ); ok 0;
print "Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ; print STDERR $@;
$soap->proxy('http://helloworld/helloworld.asmx'); }
$t0 = [gettimeofday];
ok($soap->wsdlinit()); print "# WSDL init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
print "WSDL init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ; $soap->servicename("Service1");
$soap->portname("Service1Soap");
$t0 = [gettimeofday];
do { $t0 = [gettimeofday];
my $xml = $soap->serializer->method( $soap->call(sayHello => %{ $data }) ); do {
my $xml = $soap->serializer->method( $soap->call(sayHello => %{ $data }) );
open (FILE, "acceptance/helloworld.xml")
|| open (FILE, "t/acceptance/helloworld.xml") || die "can't open acceptance file"; open (FILE, "acceptance/helloworld.xml")
my $xml_test=<FILE>; || open (FILE, "t/acceptance/helloworld.xml") || die "can't open acceptance file";
close FILE; my $xml_test=<FILE>;
$xml=~s/^.+\<([^\/]+?)\:Body\>//; close FILE;
$xml=~s/\<\/$1\:Body\>.*//; $xml=~s/^.+\<([^\/]+?)\:Body\>//;
$xml=~s/\<\/$1\:Body\>.*//;
$xml_test=~s/^.+\<([^\/]+?)\:Body\>//;
$xml_test=~s/\<\/$1\:Body\>.*//; $xml_test=~s/^.+\<([^\/]+?)\:Body\>//;
$xml_test=~s/\<\/$1\:Body\>.*//;
if ( ($xml) && ($xml eq $xml_test) ) {
ok 1; if ( ($xml) && ($xml eq $xml_test) ) {
print "Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)\n" ok 1;
} else { print "# Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)\n"
ok 0; } else {
print "Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ; ok 0;
print "$xml\n$xml_test\n"; }; print "# Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
}; print "$xml\n$xml_test\n"; };
};
$t0 = [gettimeofday];
do { $t0 = [gettimeofday];
my $xml = $soap->serializer->method( $soap->call(sayHello => %{ $data }) ); do {
my $xml = $soap->serializer->method( $soap->call(sayHello => %{ $data }) );
open (FILE, "acceptance/helloworld.xml")
|| open FILE, ("t/acceptance/helloworld.xml") || die "can't open acceptance file"; open (FILE, "acceptance/helloworld.xml")
my $xml_test=<FILE>; || open FILE, ("t/acceptance/helloworld.xml") || die "can't open acceptance file";
close FILE; my $xml_test=<FILE>;
$xml=~s/^.+\<([^\/]+?)\:Body\>//; close FILE;
$xml=~s/\<\/$1\:Body\>.*//; $xml=~s/^.+\<([^\/]+?)\:Body\>//;
$xml=~s/\<\/$1\:Body\>.*//;
$xml_test=~s/^.+\<([^\/]+?)\:Body\>//;
$xml_test=~s/\<\/$1\:Body\>.*//; $xml_test=~s/^.+\<([^\/]+?)\:Body\>//;
$xml_test=~s/\<\/$1\:Body\>.*//;
if ( ($xml) && ($xml eq $xml_test) ) {
ok 1; if ( ($xml) && ($xml eq $xml_test) ) {
print "Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)\n"; ok 1;
} else { print "# Message encoding (" .tv_interval ( $t0, [gettimeofday]) ."s)\n";
ok 0; } else {
print "Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ; ok 0;
print "$xml\n$xml_test\n"; }; print "# Message encoding (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
}; print "$xml\n$xml_test\n";
};
};
+109
View File
@@ -0,0 +1,109 @@
#!/usr/bin/perl -w
use strict;
use warnings;
use diagnostics;
use Test::More tests=> 9;
use Time::HiRes qw( gettimeofday tv_interval );
use lib '../lib';
use Data::Dumper;
use Cwd;
use_ok qw/SOAP::WSDL/;
print "# Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
print "# Various Features Test with WSDL file \n";
my $data = {name => 'Mein Name',
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://$dir/t/acceptance/helloworld.asmx.xml",
no_dispatch => 1
));
print "# Create SOAP::WSDL object (".tv_interval ( $t0, [gettimeofday]) ."ms)\n" ;
$t0 = [gettimeofday];
eval{ $soap->wsdlinit(caching => 0) };
if ($@) {
fail("wsdlinit");
print STDERR $@;
} else {
pass("wsdlinit");
}
print "# wsdl file init (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;;
$soap->readable(1);
$soap->servicename("Service1");
$soap->portname("Service1Soap");
$t0 = [gettimeofday];
ok( $soap->call("sayHello" , %{ $data }), "call sayHello");
print "# Normal Call: (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$soap->servicename("Service2");
is( $soap->portname("Service2Soap"), 'Service2Soap' );
$data = {name => 'Mein Name',
givenName => 'Vorname'};
$t0 = [gettimeofday];
ok($soap->call(sayGoodBye => %{ $data }), "Multiple Services/Port Call" );
print "# Multiple Services/Port Call: (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$soap->servicename("Service2");
$soap->portname("Service2Soap");
$data = {name => 'Mein Name',
givenName => 'Vorname',
wsdl_input_name => 'firstOverload'
};
$t0 = [gettimeofday];
my $xml = $soap->serializer->method( $soap->call(sayGoodByeOverload => %{ $data }) );
like($xml , qr/<name/, 'serialized overloaded method');
$data = {
name => 'Mein Name',
givenName => 'Vorname',
wsdl_input_name => 'secondOverload'
};
$t0 = [gettimeofday];
$xml = $soap->serializer->method( $soap->call(sayGoodByeOverload => %{ $data }) );
unlike($xml , qr/<name/ , 'Overloaded calls');
print "# Overloaded Calls: (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
$soap->servicename("Service2");
$soap->portname("Service2Soap");
$data = { name => 'Mein Name',
'recipients' => [
{user_name => 'Adam', last_name => "Eden"},
{user_name => 'Eve',last_name => 'Apple'},
],
wsdl_input_name => 'thirdOverload'
};
$t0 = [gettimeofday];
$xml = $soap->serializer->method( $soap->call(sayGoodByeOverload => %{ $data }) );
my $xpath = new XML::XPath->new(xml=>$xml);
my @recipients = $xpath->findnodes('//recipients');
if($recipients[0]->findvalue("user_name") eq "Adam" and
$recipients[0]->findvalue("last_name") eq "Eden" and
$recipients[1]->findvalue("user_name") eq "Eve" and
$recipients[1]->findvalue("last_name") eq "Apple"){
ok(1);
}else{
ok(0);
}
print "# Restricted Arrays: (".tv_interval ( $t0, [gettimeofday]) ."s)\n" ;
print "#End\n";
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/perl -w
#######################################################################################
#
# 2_helloworld.t
#
# Acceptance test for message encoding, based on .NET wsdl and example code.
# SOAP::WSDL's encoding doesn't I<exactly> match the .NET example, because
# .NET doesn't always specify types (SOAP::WSDL does), and the namespace
# prefixes chosen are different (maybe the encoding style, too ? this would be a bug !)
#
########################################################################################
use strict;
use diagnostics;
use Test::More tests => 6;
use Time::HiRes qw( gettimeofday tv_interval );
use lib '../lib';
use Cwd;
use_ok qw/SOAP::WSDL/;
### test vars END
print "# Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
print "# Acceptance test against sample output with simple WSDL\n";
my $data = {
name => 'test',
givenName => 'GIVENNAME',
test => {
name => 'TESTNAME',
givenName => 'GIVENNAME',
},
};
my $dir= cwd;
$dir=~s/\/t\/?$//;
# print $dir;
my $url = $dir . '/t/acceptance/test.wsdl.xml';
die "no wsdl found" if (not -e $url);
ok( my $soap=SOAP::WSDL->new( wsdl => 'file:///'. $url ), "Create SOAP::WSDL object");
$soap->no_dispatch( 1 );
eval{ $soap->wsdlinit() };
unless ($@) {
pass "wsdlinit";
} else {
fail "wsdlinit - $@";
}
ok( $soap->call(sayHello => %{ $data }) , "SOAP call");
is( $soap->servicename() , 'Service1', "Auto-detected servicename");
is( $soap->portname() , 'Service1Soap', "Auto-detected portname");
+19
View File
@@ -0,0 +1,19 @@
# Addresses issue reported by David Bussenschutt
use Test::More tests => 1;
use lib '../lib';
use SOAP::Lite;
use SOAP::WSDL;
use File::Spec;
use File::Basename qw(dirname);
my $path = File::Spec->rel2abs( dirname __FILE__);
my $soap = SOAP::WSDL->new(
wsdl => "file://$path/acceptance/helloworld.asmx.xml"
);
my $transport = $soap->schema()->useragent()->protocols_forbidden(['file']);
# If it dies with 500 Access to 'file'..., wsdlinit uses the same UA...
eval { $soap->wsdlinit()};
ok index( $@, q{500 Access to 'file}) > 0;
+27
View File
@@ -0,0 +1,27 @@
use Test::More;
eval "use Test::Pod 1.00";
plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
use Cwd;
my $dir = cwd;
if ( $dir =~ /t$/ )
{
@directories = ('../lib/');
}
else
{
@directories = ();
}
my @files = all_pod_files(
@directories
);
plan tests => scalar(@files);
foreach my $module (@files)
{
pod_file_ok( $module )
}
+27
View File
@@ -0,0 +1,27 @@
use Test::More;
eval { use Test::Pod::Coverage 1.08 };
plan skip_all => "Test::Pod::Coverage 1.08 required for testing POD" if $@;
BEGIN
{
if (-d 't/') # we're not in the test dir - probably using
{ # Build test
@dirs = ('blib/lib')
}
else
{
@dirs = '../lib';
use lib '../lib'; # use our lib if we are in t/ (if we are, we're)
# not run from "make test" / "Build test"
}
}
@files = all_modules( @dirs );
plan tests => scalar @files;
foreach (@files)
{
s/^\.\.::blib::lib:://;
s/^\.\.::lib:://;
pod_coverage_ok( $_ );
}
+180 -75
View File
@@ -1,75 +1,180 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="urn:HelloWorld" xmlns:s0="urn:HelloWorld"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="urn:HelloWorld" targetNamespace="urn:HelloWorld"
xmlns="http://schemas.xmlsoap.org/wsdl/"> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
<types> xmlns="http://schemas.xmlsoap.org/wsdl/">
<s:schema elementFormDefault="qualified" <types>
targetNamespace="urn:HelloWorld"> <s:schema elementFormDefault="qualified"
<s:element name="sayHello"> targetNamespace="urn:HelloWorld">
<s:complexType> <s:element name="sayHello">
<s:sequence> <s:complexType>
<s:element minOccurs="0" maxOccurs="1" name="name" <s:sequence>
type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="name"
</s:sequence> type="s:string" />
</s:complexType> </s:sequence>
</s:element> </s:complexType>
</s:element>
<s:element name="sayHelloResponse">
<s:complexType> <s:element name="sayGoodBye">
<s:sequence> <s:complexType>
<s:element minOccurs="0" maxOccurs="1" <s:sequence>
name="sayHelloResult" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="name"
</s:sequence> type="s:string" />
</s:complexType> </s:sequence>
</s:element> </s:complexType>
</s:schema> </s:element>
</types>
<s:element name="sayHelloResponse">
<message name="sayHelloSoapIn"> <s:complexType>
<part name="parameters" element="s0:sayHello" /> <s:sequence>
</message> <s:element minOccurs="0" maxOccurs="1" name="sayHelloResult" type="s:string" />
</s:sequence>
<message name="sayHelloSoapOut"> </s:complexType>
<part name="parameters" element="s0:sayHelloResponse" /> </s:element>
</message>
<s:element name="sayGoodByeResponse">
<portType name="Service1Soap"> <s:complexType>
<operation name="sayHello"> <s:sequence>
<input message="s0:sayHelloSoapIn" /> <s:element minOccurs="0" maxOccurs="1" name="sayGoodByeResult" type="s:string" />
</s:sequence>
<output message="s0:sayHelloSoapOut" /> </s:complexType>
</operation> </s:element>
</portType> <s:complexType name="contact_detail_list">
<s:complexContent>
<binding name="Service1Soap" type="s0:Service1Soap"> <s:restriction base="soapenc:Array">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" <s:attribute ref="soapenc:arrayType" wsdl:arrayType="s0:person_detail[]"/>
style="document" /> </s:restriction>
</s:complexContent>
<operation name="sayHello"> </s:complexType>
<soap:operation soapAction="urn:HelloWorld#sayHello" <s:complexType name="person_detail">
style="document" /> <s:all>
<s:element name="email_address" type="s:string"/>
<input> <s:element name="user_name" type="s:string"/>
<soap:body use="literal" /> <s:element name="first_name" type="s:string"/>
</input> <s:element name="last_name" type="s:string"/>
<s:element name="department" type="s:string"/>
<output> <s:element name="id" type="s:string"/>
<soap:body use="literal" /> <s:element name="title" type="s:string"/>
</output> </s:all>
</operation> </s:complexType>
</binding> </s:schema>
</types>
<service name="Service1">
<port name="Service1Soap" binding="s0:Service1Soap"> <message name="sayHelloSoapIn">
<soap:address <part name="parameters" element="s0:sayHello" />
location="http://helloworld/helloworld.asmx" /> </message>
</port>
</service> <message name="sayGoodByeSoapIn">
</definitions> <part name="parameters" element="s0:sayHello" />
</message>
<message name="sayGoodByeSoapInSecond">
</message>
<message name="sayGoodByeSoapInThird">
<part name="name" type="s:string" />
<part name="recipients" type="s0:contact_detail_list" />
</message>
<message name="sayHelloSoapOut">
<part name="parameters" element="s0:sayGoodByeResponse" />
</message>
<message name="sayGoodByeSoapOut">
<part name="parameters" element="s0:sayGoodByeResponse" />
</message>
<portType name="Service1Soap">
<operation name="sayHello">
<input message="s0:sayHelloSoapIn" />
<output message="s0:sayHelloSoapOut" />
</operation>
</portType>
<portType name="Service2Soap">
<operation name="sayGoodBye">
<input message="s0:sayGoodByeSoapIn" />
<output message="s0:sayGoodByeSoapOut" />
</operation>
<operation name="sayGoodByeOverload">
<input message="s0:sayGoodByeSoapIn" name="firstOverload" />
<output message="s0:sayGoodByeSoapOut" />
</operation>
<operation name="sayGoodByeOverload">
<input message="s0:sayGoodByeSoapInSecond" name="secondOverload" />
<output message="s0:sayGoodByeSoapOut" />
</operation>
<operation name="sayGoodByeOverload">
<input message="s0:sayGoodByeSoapInThird" name="thirdOverload" />
<output message="s0:sayGoodByeSoapOut" />
</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" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>
<binding name="Service2Soap" type="s0:Service2Soap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" />
<operation name="sayGoodBye">
<soap:operation soapAction="urn:HelloWorld#sayGoodBye" style="document" />
<input>
<soap:body use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
<operation name="sayGoodByeOverload">
<soap:operation soapAction="urn:HelloWorld#sayGoodBye" style="document" />
<input>
<soap:body use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="Service1">
<port name="Service1Soap" binding="s0:Service1Soap">
<soap:address
location="http://helloworld/helloworld.asmx" />
</port>
</service>
<service name="Service2">
<port name="Service2Soap" binding="s0:Service2Soap">
<soap:address
location="http://helloworld/helloworld.asmx" />
</port>
</service>
</definitions>
+1 -1
View File
@@ -1 +1 @@
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><sayHello xmlns="urn:HelloWorld"><name xsi:type="xsd:string">test</name></sayHello></soap:Body></soap:Envelope> <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><sayHello xmlns="urn:HelloWorld"><name xsi:type="xsd:string">test</name><givenName xsi:type="xsd:string">GIVENNAME</givenName><test><name xsi:type="xsd:string">TESTNAME</name><givenName xsi:type="xsd:string">GIVENNAME</givenName></test></sayHello></soap:Body></soap:Envelope>
+105 -105
View File
@@ -1,105 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s0="urn:HelloWorld" xmlns:s0="urn:HelloWorld"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="urn:HelloWorld" targetNamespace="urn:HelloWorld"
xmlns="http://schemas.xmlsoap.org/wsdl/"> xmlns="http://schemas.xmlsoap.org/wsdl/">
<types> <types>
<s:schema elementFormDefault="qualified" <s:schema elementFormDefault="qualified"
targetNamespace="urn:HelloWorld"> targetNamespace="urn:HelloWorld">
<s:element name="sayHello"> <s:element name="sayHello">
<s:complexType> <s:complexType>
<s:sequence> <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name" <s:element minOccurs="0" maxOccurs="1" name="name"
type="s:string" /> type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="givenName" <s:element minOccurs="0" maxOccurs="1" name="givenName"
type="s:string" /> type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="test" <s:element minOccurs="0" maxOccurs="1" name="test"
type="s0:test2" /> type="s0:test2" />
</s:sequence> </s:sequence>
</s:complexType> </s:complexType>
</s:element> </s:element>
<s:element name="sayHelloResponse"> <s:element name="sayHelloResponse">
<s:complexType> <s:complexType>
<s:sequence> <s:sequence>
<s:element minOccurs="0" maxOccurs="1" <s:element minOccurs="0" maxOccurs="1"
name="sayHelloResult" type="s:string" /> name="sayHelloResult" type="s:string" />
</s:sequence> </s:sequence>
</s:complexType> </s:complexType>
</s:element> </s:element>
<s:complexType name="test2"> <s:complexType name="test2">
<s:sequence> <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="name" <s:element minOccurs="0" maxOccurs="1" name="name"
type="s:string" /> type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="givenName" <s:element minOccurs="0" maxOccurs="1" name="givenName"
type="s:string" /> type="s:string" />
</s:sequence> </s:sequence>
</s:complexType> </s:complexType>
<s:complexType name="testExtended"> <s:complexType name="testExtended">
<s:extension base="s0:test2"> <s:extension base="s0:test2">
<s:sequence> <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="extend" <s:element minOccurs="0" maxOccurs="1" name="extend"
type="s:string" /> type="s:string" />
</s:sequence> </s:sequence>
</s:extension> </s:extension>
</s:complexType> </s:complexType>
</s:schema> </s:schema>
</types> </types>
<message name="sayHelloSoapIn"> <message name="sayHelloSoapIn">
<part name="parameters" element="s0:sayHello" /> <part name="parameters" element="s0:sayHello" />
<part name="test1" type="s0:testExtended" /> <part name="test1" type="s0:testExtended" />
<part name="test2" type="s0:test2" <part name="test2" type="s0:test2"
targetNamespace="urn:test2" /> targetNamespace="urn:test2" />
</message> </message>
<message name="sayHelloSoapOut"> <message name="sayHelloSoapOut">
<part name="parameters" element="s0:sayHelloResponse" /> <part name="parameters" element="s0:sayHelloResponse" />
</message> </message>
<portType name="Service1Soap"> <portType name="Service1Soap">
<operation name="sayHello"> <operation name="sayHello">
<input message="s0:sayHelloSoapIn" /> <input message="s0:sayHelloSoapIn" />
<output message="s0:sayHelloSoapOut" /> <output message="s0:sayHelloSoapOut" />
</operation> </operation>
</portType> </portType>
<binding name="Service1Soap" type="s0:Service1Soap"> <binding name="Service1Soap" type="s0:Service1Soap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document" /> style="document" />
<operation name="sayHello"> <operation name="sayHello">
<soap:operation soapAction="urn:HelloWorld#sayHello" <soap:operation soapAction="urn:HelloWorld#sayHello"
style="document" /> style="document" />
<input> <input>
<soap:body use="literal" /> <soap:body use="literal" />
</input> </input>
<output> <output>
<soap:body use="literal" /> <soap:body use="literal" />
</output> </output>
</operation> </operation>
</binding> </binding>
<service name="Service1"> <service name="Service1">
<port name="Service1Soap" binding="s0:Service1Soap"> <port name="Service1Soap" binding="s0:Service1Soap">
<soap:address <soap:address
location="http://helloworld/helloworld.asmx" /> location="http://helloworld/helloworld.asmx" />
</port> </port>
</service> </service>
</definitions> </definitions>