import SOAP-WSDL 2.00_31 from CPAN
git-cpan-module: SOAP-WSDL git-cpan-version: 2.00_31 git-cpan-authorid: MKUTTER git-cpan-file: authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_31.tar.gz
This commit is contained in:
committed by
Michael G. Schwern
parent
874251225f
commit
f0b3bdc201
7
Build.PL
7
Build.PL
@@ -5,11 +5,11 @@ $build = Module::Build->new(
|
|||||||
create_makefile_pl => 'passthrough',
|
create_makefile_pl => 'passthrough',
|
||||||
dist_abstract => 'SOAP with WSDL support',
|
dist_abstract => 'SOAP with WSDL support',
|
||||||
dist_name => 'SOAP-WSDL',
|
dist_name => 'SOAP-WSDL',
|
||||||
dist_version => '2.00_29',
|
dist_version => '2.00_31',
|
||||||
module_name => 'SOAP::WSDL',
|
module_name => 'SOAP::WSDL',
|
||||||
license => 'artistic',
|
license => 'artistic',
|
||||||
requires => {
|
requires => {
|
||||||
# 5.6.x is way too buggy and has no unicode support
|
# 5.6.x is way too buggy and has no unicode support
|
||||||
# for us. SOAP-WSDL relies on unicode (WS-I demands it)
|
# for us. SOAP-WSDL relies on unicode (WS-I demands it)
|
||||||
# and triggers several 5.6 bugs...
|
# and triggers several 5.6 bugs...
|
||||||
'perl' => q(5.8.0),
|
'perl' => q(5.8.0),
|
||||||
@@ -24,6 +24,7 @@ $build = Module::Build->new(
|
|||||||
'LWP::UserAgent' => 0,
|
'LWP::UserAgent' => 0,
|
||||||
'Template' => 0,
|
'Template' => 0,
|
||||||
'Term::ReadKey' => 0,
|
'Term::ReadKey' => 0,
|
||||||
|
'URI' => 0,
|
||||||
'XML::Parser::Expat' => 0,
|
'XML::Parser::Expat' => 0,
|
||||||
},
|
},
|
||||||
buildrequires => {
|
buildrequires => {
|
||||||
@@ -39,7 +40,7 @@ $build = Module::Build->new(
|
|||||||
'File::Spec' => 0,
|
'File::Spec' => 0,
|
||||||
'Storable' => 0,
|
'Storable' => 0,
|
||||||
'Test::More' => 0,
|
'Test::More' => 0,
|
||||||
'Template' => 0,
|
'Template' => 0,
|
||||||
'XML::Parser::Expat' => 0,
|
'XML::Parser::Expat' => 0,
|
||||||
},
|
},
|
||||||
recursive_test_files => 1,
|
recursive_test_files => 1,
|
||||||
|
|||||||
264
Changes
264
Changes
@@ -1,4 +1,4 @@
|
|||||||
Release notes for SOAP::WSDL 2.00_29
|
Release notes for SOAP::WSDL 2.00_31
|
||||||
-------
|
-------
|
||||||
|
|
||||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
I'm proud to present a new pre-release version of SOAP::WSDL.
|
||||||
@@ -16,17 +16,17 @@ Features:
|
|||||||
o Automatically encodes perl data structures as message data
|
o Automatically encodes perl data structures as message data
|
||||||
o Automatically sets HTTP headers right
|
o Automatically sets HTTP headers right
|
||||||
* Efficient documentation
|
* Efficient documentation
|
||||||
o SOAP::WSDL::Manual guides you at getting your work done, not at
|
o SOAP::WSDL::Manual guides you at getting your work done, not at
|
||||||
the module's internals
|
the module's internals
|
||||||
* Thorough test suite
|
* Thorough test suite
|
||||||
o SOAP::WSDL is heavily regression tested, with a test coverage of
|
o SOAP::WSDL is heavily regression tested, with a test coverage of
|
||||||
over 95% (excluding documentation - you wouldn't want to read
|
over 95% (excluding documentation - you wouldn't want to read
|
||||||
through it all).
|
through it all).
|
||||||
* SOAP::Lite like look and feel
|
* SOAP::Lite like look and feel
|
||||||
o Where possible, SOAP::WSDL mimics SOAP::Lite's API to allow easy migrations
|
o Where possible, SOAP::WSDL mimics SOAP::Lite's API to allow easy migrations
|
||||||
* XML schema based class library for creating data objects
|
* XML schema based class library for creating data objects
|
||||||
* High-performance XML parser
|
* High-performance XML parser
|
||||||
* Plugin support. SOAP::WSDL can be extended through plugins in various aspects.
|
* Plugin support. SOAP::WSDL can be extended through plugins in various aspects.
|
||||||
The following plugins are supported:
|
The following plugins are supported:
|
||||||
o Transport plugins via SOAP::WSDL::Factory::Transport
|
o Transport plugins via SOAP::WSDL::Factory::Transport
|
||||||
o Serializer plugins via SOAP::WSDL::Factory::Serializer
|
o Serializer plugins via SOAP::WSDL::Factory::Serializer
|
||||||
@@ -34,9 +34,51 @@ Features:
|
|||||||
|
|
||||||
The following changes have been made:
|
The following changes have been made:
|
||||||
|
|
||||||
|
2.00_31 - Feb 11 2007
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1883843 ] Support wsdl:import
|
||||||
|
* [ 1883863 ] Support xsd:import
|
||||||
|
|
||||||
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* The WSDL Parser now warns about unsupported WSDL / XML schema elements
|
||||||
|
* Fixed path handling in t/006_client.t
|
||||||
|
* Removed useless ms regex flag in SOAP::WSDL::Factory::Transport
|
||||||
|
* The test suite has been improved
|
||||||
|
|
||||||
|
2.00_30 - unreleased
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1875288 ] Support XML attributes (partial)
|
||||||
|
|
||||||
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
|
* [ 1876435 ] Test on perl-5.10 fails
|
||||||
|
* #32611 empty complexType structure classes are missing 'use Class::Std::Fast::Storable'
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* ComplexType objects now accept { foo => undef } in constructor and handle
|
||||||
|
it as non-present child element foo.
|
||||||
|
* Updated test suite
|
||||||
|
* Updated SOAP::WSDL::Client::Base to correctly handle SOAP calls with
|
||||||
|
no parameters (empty parts)
|
||||||
|
* Test on perl-5.10 fails when SOAP::Lite is not installed
|
||||||
|
|
||||||
2.00_29
|
2.00_29
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
@@ -53,13 +95,13 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_28
|
2.00_28
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
* #32062: minor doc fixes
|
* #32062: minor doc fixes
|
||||||
* [ 1852988 ] Generated Interface POD is invalid
|
* [ 1852988 ] Generated Interface POD is invalid
|
||||||
* [ 1855583 ] t/SOAP/WSDL/XSD/Typelib/ComplexType.t requires Test::Warn
|
* [ 1855583 ] t/SOAP/WSDL/XSD/Typelib/ComplexType.t requires Test::Warn
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
@@ -67,13 +109,13 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_27
|
2.00_27
|
||||||
|
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1850793 ] Add a to_hash_ref method
|
* [ 1850793 ] Add a to_hash_ref method
|
||||||
* [ 1844427 ] Support multiple parts in body
|
* [ 1844427 ] Support multiple parts in body
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
@@ -91,10 +133,10 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_26
|
2.00_26
|
||||||
|
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
@@ -110,25 +152,25 @@ The following uncategorized improvements have been made:
|
|||||||
---
|
---
|
||||||
WARNING: INCOMPATIBLE CHANGE:
|
WARNING: INCOMPATIBLE CHANGE:
|
||||||
|
|
||||||
SOAP::WSDL now uses Class::Std::Fast. Read the MIGRATING guide for
|
SOAP::WSDL now uses Class::Std::Fast. Read the MIGRATING guide for
|
||||||
upgrading from previous versions.
|
upgrading from previous versions.
|
||||||
You probably need to re-generate all your interfaces.
|
You probably need to re-generate all your interfaces.
|
||||||
|
|
||||||
WARNING: INCOMPATIBLE CHANGE:
|
WARNING: INCOMPATIBLE CHANGE:
|
||||||
|
|
||||||
SOAP::WSDL::XSD::Typelib::anySimpleType based objects no longer serialize
|
SOAP::WSDL::XSD::Typelib::anySimpleType based objects no longer serialize
|
||||||
to their XML value on stringification.
|
to their XML value on stringification.
|
||||||
This means that strings are no longer XML-escaped when the simpleType
|
This means that strings are no longer XML-escaped when the simpleType
|
||||||
containing the string is printed or used like this:
|
containing the string is printed or used like this:
|
||||||
|
|
||||||
my $value = "$simpleType";
|
my $value = "$simpleType";
|
||||||
|
|
||||||
Note that ComplexType objects still serialize to their XML on
|
Note that ComplexType objects still serialize to their XML on
|
||||||
stringification. This Change is due to the demands of applications
|
stringification. This Change is due to the demands of applications
|
||||||
embedding SOAP::WSDL::XSD::Typelib objects in templates - it would mean
|
embedding SOAP::WSDL::XSD::Typelib objects in templates - it would mean
|
||||||
a nasty ->get_value for every (simple) value.
|
a nasty ->get_value for every (simple) value.
|
||||||
|
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1837347 ] Use Class::Std::Fast
|
* [ 1837347 ] Use Class::Std::Fast
|
||||||
@@ -137,7 +179,7 @@ tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
|||||||
for even faster XS implementations.
|
for even faster XS implementations.
|
||||||
* [ 1842436 ] Add SOAP Server
|
* [ 1842436 ] Add SOAP Server
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
@@ -155,13 +197,13 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_24
|
2.00_24
|
||||||
---
|
---
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1832998 ] Make interface methods complain when called as class method
|
* [ 1832998 ] Make interface methods complain when called as class method
|
||||||
* [ 1826833 ] listify all XSD type objects when called as @{}
|
* [ 1826833 ] listify all XSD type objects when called as @{}
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
@@ -170,7 +212,7 @@ The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
|||||||
* [ 1828240 ] POD Defects
|
* [ 1828240 ] POD Defects
|
||||||
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* The test suite has been improved
|
* The test suite has been improved
|
||||||
* Documentation has been improved
|
* Documentation has been improved
|
||||||
@@ -178,160 +220,160 @@ The following uncategorized improvements have been made:
|
|||||||
2.00_23
|
2.00_23
|
||||||
---
|
---
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1826382 ] nillable elements not serialized as xsi:nil
|
* [ 1826382 ] nillable elements not serialized as xsi:nil
|
||||||
* [ 1826337 ] Second element in complexType gets eaten up
|
* [ 1826337 ] Second element in complexType gets eaten up
|
||||||
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* Test for complexType containing element with atomic simpleType added
|
* Test for complexType containing element with atomic simpleType added
|
||||||
|
|
||||||
2.00_22
|
2.00_22
|
||||||
----
|
----
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1817697 ] Dots in service/port names lead to broken interfaces
|
* [ 1817697 ] Dots in service/port names lead to broken interfaces
|
||||||
* [ 1817699 ] Templates not found on all OS
|
* [ 1817699 ] Templates not found on all OS
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* Code cleanup. The XSD library has been cleaned up a bit. Should result
|
* Code cleanup. The XSD library has been cleaned up a bit. Should result
|
||||||
in a minor speedup in serializing and deserializing XML messages,
|
in a minor speedup in serializing and deserializing XML messages,
|
||||||
|
|
||||||
2.00_21 - not released
|
2.00_21 - not released
|
||||||
----
|
----
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1810058 ] .tt's pod indexed on CPAN (again)
|
* [ 1810058 ] .tt's pod indexed on CPAN (again)
|
||||||
* [ 1809284 ] Rename SOAP::WSDL::Deserializer::SOAP11 to ::XSD
|
* [ 1809284 ] Rename SOAP::WSDL::Deserializer::SOAP11 to ::XSD
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* Requires at least perl 5.8.0. This is due to a bug in perls before -
|
* Requires at least perl 5.8.0. This is due to a bug in perls before -
|
||||||
see http://aspn.activestate.com/ASPN/Mail/Message/perl5-porters/929746
|
see http://aspn.activestate.com/ASPN/Mail/Message/perl5-porters/929746
|
||||||
|
|
||||||
2.00_20
|
2.00_20
|
||||||
----
|
----
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1815646 ] Only include last part of port name in interface
|
* [ 1815646 ] Only include last part of port name in interface
|
||||||
* [ 1815648 ] Methods with empty body cannot be called as ->method()
|
* [ 1815648 ] Methods with empty body cannot be called as ->method()
|
||||||
* [ 1815651 ] Empty complexType definitions not supported
|
* [ 1815651 ] Empty complexType definitions not supported
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1815643 ] ComplexTypes cannot be freezed/thawed
|
* [ 1815643 ] ComplexTypes cannot be freezed/thawed
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* WSDL definitions are decoded into utf8
|
* WSDL definitions are decoded into utf8
|
||||||
* fixed tests to use correct path on windows
|
* fixed tests to use correct path on windows
|
||||||
|
|
||||||
2.00_19
|
2.00_19
|
||||||
----
|
----
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1810395 ] Implement complexType complexContent extension
|
* [ 1810395 ] Implement complexType complexContent extension
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1813144 ] Typemap not used in interface class
|
* [ 1813144 ] Typemap not used in interface class
|
||||||
* [ 1810058 ] .tt's pod indexed on CPAN
|
* [ 1810058 ] .tt's pod indexed on CPAN
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* Documentation improvements
|
* Documentation improvements
|
||||||
|
|
||||||
2.00_18
|
2.00_18
|
||||||
----
|
----
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1790983 ] Create generator Plugin API
|
* [ 1790983 ] Create generator Plugin API
|
||||||
Generator factory is SOAP::WSDL::Factory::Generator
|
Generator factory is SOAP::WSDL::Factory::Generator
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1805252 ] t/SOAP/WSDL/XSD/Typelib/Builtin/004_time.t fails
|
* [ 1805252 ] t/SOAP/WSDL/XSD/Typelib/Builtin/004_time.t fails
|
||||||
The default timezone conversion has been fixed.
|
The default timezone conversion has been fixed.
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* Documentation improvements
|
* Documentation improvements
|
||||||
* Test updates
|
* Test updates
|
||||||
* readable() has been converted into a no-op, as it already had no effect
|
* readable() has been converted into a no-op, as it already had no effect
|
||||||
any more
|
any more
|
||||||
|
|
||||||
2.00_17
|
2.00_17
|
||||||
----
|
----
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1772617 ] SOAP Header not working
|
* [ 1772617 ] SOAP Header not working
|
||||||
Added header support. Currently, SOAP headers are only supported with
|
Added header support. Currently, SOAP headers are only supported with
|
||||||
the SOM or the XSD (SOAP11) serializer.
|
the SOM or the XSD (SOAP11) serializer.
|
||||||
|
|
||||||
* [ 1805238 ] Tests in t/SOAP/WSDL don't work when run from t/
|
* [ 1805238 ] Tests in t/SOAP/WSDL don't work when run from t/
|
||||||
|
|
||||||
* [ 1805241 ] explain() broken in SOAP::WSDL
|
* [ 1805241 ] explain() broken in SOAP::WSDL
|
||||||
explain has been removed from SOAP::WSDL
|
explain has been removed from SOAP::WSDL
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
|
||||||
|
|
||||||
* Added limited support for complexType complexContent content model with
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Added limited support for complexType complexContent content model with
|
||||||
restriction variety.
|
restriction variety.
|
||||||
SOAP::WSDL now supports this XML Schema definition variant, although no
|
SOAP::WSDL now supports this XML Schema definition variant, although no
|
||||||
constraints are imposed on derived types yet.
|
constraints are imposed on derived types yet.
|
||||||
Derived types do not serialize with a xsi:type attribute (and the xsi:type
|
Derived types do not serialize with a xsi:type attribute (and the xsi:type
|
||||||
attribute is not recognized by the XML parser), so you cannot use derived
|
attribute is not recognized by the XML parser), so you cannot use derived
|
||||||
types as a substitute for theri parent, yet.
|
types as a substitute for theri parent, yet.
|
||||||
|
|
||||||
* Added support for complexType choice variety
|
* Added support for complexType choice variety
|
||||||
complexType definitions using the choice variety are now supported,
|
complexType definitions using the choice variety are now supported,
|
||||||
even though the content is not checked (if you pass in invalid data,
|
even though the content is not checked (if you pass in invalid data,
|
||||||
invalid XML will be generated).
|
invalid XML will be generated).
|
||||||
|
|
||||||
* Added Loopback Transport backend.
|
* Added Loopback Transport backend.
|
||||||
SOAP::WSDL::Tranport::Loopback just returns the request as respons, but
|
SOAP::WSDL::Tranport::Loopback just returns the request as respons, but
|
||||||
allows testing the whole chain from user interface to transport backend.
|
allows testing the whole chain from user interface to transport backend.
|
||||||
|
|
||||||
* Fixed SOAP::WSDL::Factory::Transport prefer user-registered
|
* Fixed SOAP::WSDL::Factory::Transport prefer user-registered
|
||||||
transport backend
|
transport backend
|
||||||
|
|
||||||
* Fixed set_soap_version method in SOAP::WSDL::Client.
|
* Fixed set_soap_version method in SOAP::WSDL::Client.
|
||||||
Re-setting the SOAP version now invalidates (resets) serializer and
|
Re-setting the SOAP version now invalidates (resets) serializer and
|
||||||
deserializer, but not the transport backend.
|
deserializer, but not the transport backend.
|
||||||
|
|
||||||
* Fixed SOAP::WSDL::XSD::Typelib::Builtin::boolean to return false
|
* Fixed SOAP::WSDL::XSD::Typelib::Builtin::boolean to return false
|
||||||
when false and true when true.
|
when false and true when true.
|
||||||
|
|
||||||
* SOAP::WSDL::XSD::Typelib::Builtin::normalizedString now replaces all
|
* SOAP::WSDL::XSD::Typelib::Builtin::normalizedString now replaces all
|
||||||
occurences of tab, newline and carriage return by whitespce on set_value.
|
occurences of tab, newline and carriage return by whitespce on set_value.
|
||||||
|
|
||||||
* Code cleanup
|
* Code cleanup
|
||||||
o Lots of orphan methods now replaced by the SOAP::WSDL::Generator
|
o Lots of orphan methods now replaced by the SOAP::WSDL::Generator
|
||||||
hierarchy have been removed.
|
hierarchy have been removed.
|
||||||
o Unused (and unusable) readable option checking has been removed in
|
o Unused (and unusable) readable option checking has been removed in
|
||||||
SOAP::WSDL::Serializer::SOAP11.
|
SOAP::WSDL::Serializer::SOAP11.
|
||||||
o Unused XML Schema facet attributes have been removed from XSD Builtin
|
o Unused XML Schema facet attributes have been removed from XSD Builtin
|
||||||
classes
|
classes
|
||||||
o Methods common to all expat parser classes have been factored out
|
o Methods common to all expat parser classes have been factored out
|
||||||
into a common base class.
|
into a common base class.
|
||||||
|
|
||||||
* XML serialization speedup for SOAP::WSDL::XSD::* objects
|
* XML serialization speedup for SOAP::WSDL::XSD::* objects
|
||||||
|
|
||||||
* Tests added to improve test coverage.
|
* Tests added to improve test coverage.
|
||||||
@@ -342,7 +384,7 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_16
|
2.00_16
|
||||||
----
|
----
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1761532 ] Support embedded atomic types
|
* [ 1761532 ] Support embedded atomic types
|
||||||
@@ -358,11 +400,11 @@ tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
|||||||
* [ 1803330 ] Create one interface per port
|
* [ 1803330 ] Create one interface per port
|
||||||
SOAP::WSDL now creates one interface per port, not one per service.
|
SOAP::WSDL now creates one interface per port, not one per service.
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1804441 ] parts from binding not regarded in SOAP::WSDL
|
* [ 1804441 ] parts from binding not regarded in SOAP::WSDL
|
||||||
SOAP::WSDL (interpreter mode) now respects the body parts specified in the
|
SOAP::WSDL (interpreter mode) now respects the body parts specified in the
|
||||||
binding.
|
binding.
|
||||||
|
|
||||||
* [ 1803763 ] nonNegativeInteger misspelled in Schema::Builtin
|
* [ 1803763 ] nonNegativeInteger misspelled in Schema::Builtin
|
||||||
@@ -370,35 +412,35 @@ tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
|||||||
* [ 1793965 ] _expand() does not work on non-root-node ns declarations
|
* [ 1793965 ] _expand() does not work on non-root-node ns declarations
|
||||||
|
|
||||||
* [ 1792348 ] 006_client.t requires SOAP::Lite in 2.00_15
|
* [ 1792348 ] 006_client.t requires SOAP::Lite in 2.00_15
|
||||||
SOAP::WSDL no longer attempts to load SOAP::WSDL::Deserializer::SOM when
|
SOAP::WSDL no longer attempts to load SOAP::WSDL::Deserializer::SOM when
|
||||||
no_dispatch is set.
|
no_dispatch is set.
|
||||||
006_client.t now sets outputxml(1), to be really sure.
|
006_client.t now sets outputxml(1), to be really sure.
|
||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* Code generator only generates interface for the first port in a service
|
* Code generator only generates interface for the first port in a service
|
||||||
The code generator now generates interfaces for all ports.
|
The code generator now generates interfaces for all ports.
|
||||||
Note: The naming scheme has changed. It is now
|
Note: The naming scheme has changed. It is now
|
||||||
InterfacePrefix::Service::Port
|
InterfacePrefix::Service::Port
|
||||||
|
|
||||||
* XML Parser speedup
|
* XML Parser speedup
|
||||||
The XML parser has received a little speedup.
|
The XML parser has received a little speedup.
|
||||||
|
|
||||||
* A number of errors in parsing / traversing WSDL documents have been
|
* A number of errors in parsing / traversing WSDL documents have been
|
||||||
corrected.
|
corrected.
|
||||||
|
|
||||||
* Documentation has been improved
|
* Documentation has been improved
|
||||||
|
|
||||||
* A number of (incorrect, but passing) tests have been fixed.
|
* A number of (incorrect, but passing) tests have been fixed.
|
||||||
|
|
||||||
* Code cleanup: The SOAP::WSDL::SAX* modules are no longer included, as they
|
* Code cleanup: The SOAP::WSDL::SAX* modules are no longer included, as they
|
||||||
are not supported any more. They can still be found in SOAP::WSDL's
|
are not supported any more. They can still be found in SOAP::WSDL's
|
||||||
subversion repository in the attic directory, though.
|
subversion repository in the attic directory, though.
|
||||||
|
|
||||||
2.00_15
|
2.00_15
|
||||||
----
|
----
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1792321 ] 2.00_14 requires SOAP::Lite for passing tests
|
* [ 1792321 ] 2.00_14 requires SOAP::Lite for passing tests
|
||||||
@@ -406,7 +448,7 @@ tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
|||||||
2.00_14
|
2.00_14
|
||||||
----
|
----
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1792235 ] SOAP::WSDL::Transport::Test missing from 2.00_13
|
* [ 1792235 ] SOAP::WSDL::Transport::Test missing from 2.00_13
|
||||||
@@ -417,7 +459,7 @@ tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
|||||||
|
|
||||||
The following uncategorized improvements have been made:
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
* The ::SOM deserializer has been simplified to be just a subclass
|
* The ::SOM deserializer has been simplified to be just a subclass
|
||||||
of SOAP::Deserializer from SOAP::Lite
|
of SOAP::Deserializer from SOAP::Lite
|
||||||
* Factories now emit more useful error messages when no class is registered
|
* Factories now emit more useful error messages when no class is registered
|
||||||
for the protocol/soap_version requested
|
for the protocol/soap_version requested
|
||||||
@@ -428,36 +470,36 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_13
|
2.00_13
|
||||||
----
|
----
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [ 1790619 ] Test transport backend
|
* [ 1790619 ] Test transport backend
|
||||||
A test transport backend has been implemented (SOAP::WSDL::Transport::Test).
|
A test transport backend has been implemented (SOAP::WSDL::Transport::Test).
|
||||||
It returns the contents from a file and discards the response.
|
It returns the contents from a file and discards the response.
|
||||||
The filename is determined from the soap_action field.
|
The filename is determined from the soap_action field.
|
||||||
|
|
||||||
* [ 1785196 ] Replace outputsom(1) by deserializer plugin
|
* [ 1785196 ] Replace outputsom(1) by deserializer plugin
|
||||||
outputsom(1) in SOAP::WSDL is now implemented via using the deserializer
|
outputsom(1) in SOAP::WSDL is now implemented via using the deserializer
|
||||||
plugin SOAP::WSDL::Deserializer::SOM.
|
plugin SOAP::WSDL::Deserializer::SOM.
|
||||||
|
|
||||||
* [1785195] Support deserializer plugins
|
* [1785195] Support deserializer plugins
|
||||||
Deserializer plugin API added via SOAP::WSDL::Factory::Deserializer.
|
Deserializer plugin API added via SOAP::WSDL::Factory::Deserializer.
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [1789581] Support ComplexType mixed
|
* [1789581] Support ComplexType mixed
|
||||||
WSDL parser now supports using the mixed="true" attribute in complexType
|
WSDL parser now supports using the mixed="true" attribute in complexType
|
||||||
definitions. Mixed content in messages is only supported via SOAP::SOM yet.
|
definitions. Mixed content in messages is only supported via SOAP::SOM yet.
|
||||||
|
|
||||||
* [1787975] 016_client_object.t fails due to testing XML as string
|
* [1787975] 016_client_object.t fails due to testing XML as string
|
||||||
Removed string test.
|
Removed string test.
|
||||||
|
|
||||||
* [1787959] Test wsdl seems to be broken
|
* [1787959] Test wsdl seems to be broken
|
||||||
Corrected typo.
|
Corrected typo.
|
||||||
|
|
||||||
* [1787955] ::XSD::Typelib::date is broken
|
* [1787955] ::XSD::Typelib::date is broken
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::date now converts time-zoned dates properly,
|
SOAP::WSDL::XSD::Typelib::Builtin::date now converts time-zoned dates properly,
|
||||||
and adds the local time zone if none is given.
|
and adds the local time zone if none is given.
|
||||||
|
|
||||||
* [1785646] SOAPAction header not set from soap:operation soapAction
|
* [1785646] SOAPAction header not set from soap:operation soapAction
|
||||||
@@ -469,55 +511,55 @@ The following uncategorized improvements have been made:
|
|||||||
|
|
||||||
2.00_12
|
2.00_12
|
||||||
----
|
----
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [1787146] SOAP::WSDL still uses XML::LibXML
|
* [1787146] SOAP::WSDL still uses XML::LibXML
|
||||||
The superficious usage of XML::LibXML has been removed. XML::LibXML with
|
The superficious usage of XML::LibXML has been removed. XML::LibXML with
|
||||||
sax filter has been replaced by SOAP::WSDL::Expat::WSDLParser.
|
sax filter has been replaced by SOAP::WSDL::Expat::WSDLParser.
|
||||||
|
|
||||||
* [1787054] Test suite requires XML::LibXML in 2.00_11
|
* [1787054] Test suite requires XML::LibXML in 2.00_11
|
||||||
The test suite no longer requires XML::LibXML to pass.
|
The test suite no longer requires XML::LibXML to pass.
|
||||||
|
|
||||||
* [1785678] SOAP envelope not checked for namespace
|
* [1785678] SOAP envelope not checked for namespace
|
||||||
The SOAP envelope is now checked for the correct namespace.
|
The SOAP envelope is now checked for the correct namespace.
|
||||||
|
|
||||||
* [1786644] SOAP::WSDL::Manual - doc error
|
* [1786644] SOAP::WSDL::Manual - doc error
|
||||||
Documentation improvements
|
Documentation improvements
|
||||||
|
|
||||||
The following uncategorized improvements have been made
|
The following uncategorized improvements have been made
|
||||||
|
|
||||||
* The SOAPAction header is now alway quoted (R1109 in WS-I BP 1.0).
|
* The SOAPAction header is now alway quoted (R1109 in WS-I BP 1.0).
|
||||||
|
|
||||||
2.00_11
|
2.00_11
|
||||||
----
|
----
|
||||||
|
|
||||||
The following features were added (the numbers in square brackets are the
|
The following features were added (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
* [1767963] Transport plugins via SOAP::WSDL::Factory::Transport.
|
* [1767963] Transport plugins via SOAP::WSDL::Factory::Transport.
|
||||||
SOAP::WSDL uses SOAP::Lite's tranport modules as default, with a
|
SOAP::WSDL uses SOAP::Lite's tranport modules as default, with a
|
||||||
lightweight HTTP(S) transport plugin as fallback.
|
lightweight HTTP(S) transport plugin as fallback.
|
||||||
Custom transport modules can be registered via SOAP::WSDL::Factory::Transport.
|
Custom transport modules can be registered via SOAP::WSDL::Factory::Transport.
|
||||||
|
|
||||||
* [ 1772730 ] Serializer plugins via SOAP::WSDL::Factory::Serializer
|
* [ 1772730 ] Serializer plugins via SOAP::WSDL::Factory::Serializer
|
||||||
The default serializer for SOAP1.1 is SOAP::WSDL::Serializer::SOAP11.
|
The default serializer for SOAP1.1 is SOAP::WSDL::Serializer::SOAP11.
|
||||||
Custom serializers classes can be registered via
|
Custom serializers classes can be registered via
|
||||||
SOAP::WSDL::Factory::Serializer or set via SOAP::WSDL's set_serializer
|
SOAP::WSDL::Factory::Serializer or set via SOAP::WSDL's set_serializer
|
||||||
method.
|
method.
|
||||||
|
|
||||||
The following bugs have been fixed (the numbers in square brackets are the
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
|
||||||
* [ 1764854 ] Port WSDL parser to expat and remove XML::LibXML dependency
|
* [ 1764854 ] Port WSDL parser to expat and remove XML::LibXML dependency
|
||||||
SOAP::WSDL now requires only XML::Parser to be installed.
|
SOAP::WSDL now requires only XML::Parser to be installed.
|
||||||
XML::LibXML is not required any more, though XML::LibXML based modules still
|
XML::LibXML is not required any more, though XML::LibXML based modules still
|
||||||
exist.
|
exist.
|
||||||
|
|
||||||
The following uncategorized improvements have been made
|
The following uncategorized improvements have been made
|
||||||
|
|
||||||
* The number of dependencies has been reduced. SOAP::WSDL no longer requires the
|
* The number of dependencies has been reduced. SOAP::WSDL no longer requires the
|
||||||
following modules to be installed:
|
following modules to be installed:
|
||||||
- XML::SAX::Base
|
- XML::SAX::Base
|
||||||
- XML::SAX::ParserFactory
|
- XML::SAX::ParserFactory
|
||||||
@@ -536,27 +578,27 @@ The following uncategorized improvements have been made
|
|||||||
|
|
||||||
2.00_09
|
2.00_09
|
||||||
----
|
----
|
||||||
* SOAP::WSDL::XSD::Typelib::Builtin::boolean objects now return their numerical
|
* SOAP::WSDL::XSD::Typelib::Builtin::boolean objects now return their numerical
|
||||||
value in bool context, not "true" or "false" (always true...)
|
value in bool context, not "true" or "false" (always true...)
|
||||||
* date/time test are now timezone-sensitive
|
* date/time test are now timezone-sensitive
|
||||||
* examples added
|
* examples added
|
||||||
|
|
||||||
2.00_08
|
2.00_08
|
||||||
---
|
---
|
||||||
* SOAP::WSDL::XSD::Typelib::ComplexType objects now check the class of their
|
* SOAP::WSDL::XSD::Typelib::ComplexType objects now check the class of their
|
||||||
child objects.
|
child objects.
|
||||||
This provides early feedback to developers.
|
This provides early feedback to developers.
|
||||||
* SOAP message parser can skip unwanted parts of the message to improve parsing
|
* SOAP message parser can skip unwanted parts of the message to improve parsing
|
||||||
speed - see SOAP::WSDL::Expat::MessageParser for details.
|
speed - see SOAP::WSDL::Expat::MessageParser for details.
|
||||||
* HTTP Content-Type is configurable
|
* HTTP Content-Type is configurable
|
||||||
* SOAP::WSDL::XSD::Typelib::ComplexType based objects accept any combination of
|
* SOAP::WSDL::XSD::Typelib::ComplexType based objects accept any combination of
|
||||||
hash refs, list refs and objects as parameter to set_value() and new().
|
hash refs, list refs and objects as parameter to set_value() and new().
|
||||||
* SOAP::WSDL::XSD::Typelib::Builtin::dateTime and ::date convert date
|
* SOAP::WSDL::XSD::Typelib::Builtin::dateTime and ::date convert date
|
||||||
strings into XML date strings
|
strings into XML date strings
|
||||||
* SOAP::WSDL::Definitions::create now
|
* SOAP::WSDL::Definitions::create now
|
||||||
- converts '.' in service names to '::' (.NET class separator to perl class
|
- converts '.' in service names to '::' (.NET class separator to perl class
|
||||||
separator)
|
separator)
|
||||||
- outputs Typemaps and Interface classes in UTF8 to allow proper inclusion
|
- outputs Typemaps and Interface classes in UTF8 to allow proper inclusion
|
||||||
of UTF8 documentation from WSDL
|
of UTF8 documentation from WSDL
|
||||||
* SOAP::WSDL::Definitions::create() includes doc in generated interface classes
|
* SOAP::WSDL::Definitions::create() includes doc in generated interface classes
|
||||||
* WSDLHandler now handles <wsdl:documentation> tags
|
* WSDLHandler now handles <wsdl:documentation> tags
|
||||||
@@ -567,7 +609,7 @@ The following uncategorized improvements have been made
|
|||||||
* Implemented a Code generator for creating SOAP interfaces based on WSDL definitions
|
* Implemented a Code generator for creating SOAP interfaces based on WSDL definitions
|
||||||
* Implemented a high-speed stream based SOAP message parser
|
* Implemented a high-speed stream based SOAP message parser
|
||||||
SOAP message parser returns a objects based on XML schema based class library
|
SOAP message parser returns a objects based on XML schema based class library
|
||||||
* Implemented a XML schema based class library
|
* Implemented a XML schema based class library
|
||||||
* Implemented a stream based WSDL parser.
|
* Implemented a stream based WSDL parser.
|
||||||
Parses WSDL into objects. Objects can serialize data, and explain how to use the
|
Parses WSDL into objects. Objects can serialize data, and explain how to use the
|
||||||
service(s) they make up (output documentation).
|
service(s) they make up (output documentation).
|
||||||
|
|||||||
9
MANIFEST
9
MANIFEST
@@ -2,6 +2,7 @@ benchmark/01_expat.t
|
|||||||
benchmark/hello.pl
|
benchmark/hello.pl
|
||||||
benchmark/person.pl
|
benchmark/person.pl
|
||||||
benchmark/person.xml
|
benchmark/person.xml
|
||||||
|
benchmark/person_profile.pl
|
||||||
benchmark/XSD/01_anyType.t
|
benchmark/XSD/01_anyType.t
|
||||||
benchmark/XSD/02_anySimpleType.t
|
benchmark/XSD/02_anySimpleType.t
|
||||||
benchmark/XSD/03_string.t
|
benchmark/XSD/03_string.t
|
||||||
@@ -229,7 +230,6 @@ Makefile.PL
|
|||||||
MANIFEST This list of files
|
MANIFEST This list of files
|
||||||
META.yml
|
META.yml
|
||||||
MIGRATING
|
MIGRATING
|
||||||
patches/Manual.diff
|
|
||||||
README
|
README
|
||||||
t/001_use.t
|
t/001_use.t
|
||||||
t/002_parse_wsdl.t
|
t/002_parse_wsdl.t
|
||||||
@@ -281,7 +281,10 @@ t/acceptance/wsdl/email_account.wsdl
|
|||||||
t/acceptance/wsdl/generator_test.wsdl
|
t/acceptance/wsdl/generator_test.wsdl
|
||||||
t/acceptance/wsdl/generator_test_dot_names.wsdl
|
t/acceptance/wsdl/generator_test_dot_names.wsdl
|
||||||
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
||||||
|
t/acceptance/wsdl/import.xsd
|
||||||
t/acceptance/wsdl/message_gateway.wsdl
|
t/acceptance/wsdl/message_gateway.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser-import.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser-imported.wsdl
|
||||||
t/acceptance/wsdl/WSDLParser.wsdl
|
t/acceptance/wsdl/WSDLParser.wsdl
|
||||||
t/contributed.wsdl
|
t/contributed.wsdl
|
||||||
t/Expat/03_wsdl.t
|
t/Expat/03_wsdl.t
|
||||||
@@ -313,6 +316,7 @@ t/SOAP/WSDL/11_helloworld.NET.t
|
|||||||
t/SOAP/WSDL/12_binding.t
|
t/SOAP/WSDL/12_binding.t
|
||||||
t/SOAP/WSDL/Client.t
|
t/SOAP/WSDL/Client.t
|
||||||
t/SOAP/WSDL/Client/Base.t
|
t/SOAP/WSDL/Client/Base.t
|
||||||
|
t/SOAP/WSDL/Definitions.t
|
||||||
t/SOAP/WSDL/Deserializer/Hash.t
|
t/SOAP/WSDL/Deserializer/Hash.t
|
||||||
t/SOAP/WSDL/Deserializer/SOM.t
|
t/SOAP/WSDL/Deserializer/SOM.t
|
||||||
t/SOAP/WSDL/Deserializer/XSD.t
|
t/SOAP/WSDL/Deserializer/XSD.t
|
||||||
@@ -330,6 +334,7 @@ t/SOAP/WSDL/Generator/XSD.t
|
|||||||
t/SOAP/WSDL/Generator/XSD_dot_names.t
|
t/SOAP/WSDL/Generator/XSD_dot_names.t
|
||||||
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
||||||
t/SOAP/WSDL/Part.t
|
t/SOAP/WSDL/Part.t
|
||||||
|
t/SOAP/WSDL/PortType.t
|
||||||
t/SOAP/WSDL/Serializer/XSD.t
|
t/SOAP/WSDL/Serializer/XSD.t
|
||||||
t/SOAP/WSDL/Server.t
|
t/SOAP/WSDL/Server.t
|
||||||
t/SOAP/WSDL/Server/CGI.t
|
t/SOAP/WSDL/Server/CGI.t
|
||||||
@@ -338,8 +343,10 @@ t/SOAP/WSDL/Transport/02_HTTP.t
|
|||||||
t/SOAP/WSDL/Transport/acceptance/test2.xml
|
t/SOAP/WSDL/Transport/acceptance/test2.xml
|
||||||
t/SOAP/WSDL/Transport/acceptance/test3.xml
|
t/SOAP/WSDL/Transport/acceptance/test3.xml
|
||||||
t/SOAP/WSDL/Typelib/Fault11.t
|
t/SOAP/WSDL/Typelib/Fault11.t
|
||||||
|
t/SOAP/WSDL/XSD/Attribute.t
|
||||||
t/SOAP/WSDL/XSD/ComplexType.t
|
t/SOAP/WSDL/XSD/ComplexType.t
|
||||||
t/SOAP/WSDL/XSD/Element.t
|
t/SOAP/WSDL/XSD/Element.t
|
||||||
|
t/SOAP/WSDL/XSD/Schema.t
|
||||||
t/SOAP/WSDL/XSD/SimpleType.t
|
t/SOAP/WSDL/XSD/SimpleType.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Attribute.t
|
t/SOAP/WSDL/XSD/Typelib/Attribute.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
|
||||||
|
|||||||
15
META.yml
15
META.yml
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: SOAP-WSDL
|
name: SOAP-WSDL
|
||||||
version: 2.00_29
|
version: 2.00_31
|
||||||
author:
|
author:
|
||||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||||
abstract: SOAP with WSDL support
|
abstract: SOAP with WSDL support
|
||||||
@@ -25,12 +25,13 @@ requires:
|
|||||||
List::Util: 0
|
List::Util: 0
|
||||||
Template: 0
|
Template: 0
|
||||||
Term::ReadKey: 0
|
Term::ReadKey: 0
|
||||||
|
URI: 0
|
||||||
XML::Parser::Expat: 0
|
XML::Parser::Expat: 0
|
||||||
perl: 5.8.0
|
perl: 5.8.0
|
||||||
provides:
|
provides:
|
||||||
SOAP::WSDL:
|
SOAP::WSDL:
|
||||||
file: lib/SOAP/WSDL.pm
|
file: lib/SOAP/WSDL.pm
|
||||||
version: 2.00_25
|
version: 2.00_31
|
||||||
SOAP::WSDL::Base:
|
SOAP::WSDL::Base:
|
||||||
file: lib/SOAP/WSDL/Base.pm
|
file: lib/SOAP/WSDL/Base.pm
|
||||||
version: 2.00_27
|
version: 2.00_27
|
||||||
@@ -77,7 +78,7 @@ provides:
|
|||||||
version: 2.00_24
|
version: 2.00_24
|
||||||
SOAP::WSDL::Factory::Transport:
|
SOAP::WSDL::Factory::Transport:
|
||||||
file: lib/SOAP/WSDL/Factory/Transport.pm
|
file: lib/SOAP/WSDL/Factory/Transport.pm
|
||||||
version: 2.00_25
|
version: 2.00_31
|
||||||
SOAP::WSDL::Generator::Template:
|
SOAP::WSDL::Generator::Template:
|
||||||
file: lib/SOAP/WSDL/Generator/Template.pm
|
file: lib/SOAP/WSDL/Generator/Template.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -139,7 +140,7 @@ provides:
|
|||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::TypeLookup:
|
SOAP::WSDL::TypeLookup:
|
||||||
file: lib/SOAP/WSDL/TypeLookup.pm
|
file: lib/SOAP/WSDL/TypeLookup.pm
|
||||||
version: 2.00_29
|
version: 2.00_31
|
||||||
SOAP::WSDL::Types:
|
SOAP::WSDL::Types:
|
||||||
file: lib/SOAP/WSDL/Types.pm
|
file: lib/SOAP/WSDL/Types.pm
|
||||||
SOAP::WSDL::XSD::Attribute:
|
SOAP::WSDL::XSD::Attribute:
|
||||||
@@ -149,7 +150,7 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
||||||
SOAP::WSDL::XSD::ComplexType:
|
SOAP::WSDL::XSD::ComplexType:
|
||||||
file: lib/SOAP/WSDL/XSD/ComplexType.pm
|
file: lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||||
version: 2.00_25
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Element:
|
SOAP::WSDL::XSD::Element:
|
||||||
file: lib/SOAP/WSDL/XSD/Element.pm
|
file: lib/SOAP/WSDL/XSD/Element.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -163,8 +164,10 @@ provides:
|
|||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::XSD::Typelib::Attribute:
|
SOAP::WSDL::XSD::Typelib::Attribute:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||||
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||||
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin:
|
SOAP::WSDL::XSD::Typelib::Builtin:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -265,7 +268,7 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType:
|
SOAP::WSDL::XSD::Typelib::ComplexType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||||
version: 2.00_29
|
version: 2.00_31
|
||||||
SOAP::WSDL::XSD::Typelib::Element:
|
SOAP::WSDL::XSD::Typelib::Element:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||||
version: 2.00_29
|
version: 2.00_29
|
||||||
|
|||||||
18
MIGRATING
18
MIGRATING
@@ -1,7 +1,23 @@
|
|||||||
MIGRATING
|
MIGRATING
|
||||||
---------
|
---------
|
||||||
|
|
||||||
This document describes how to migrate from 2.00_24 and before versions to
|
MIGRATING FROM PRE-2.00_29
|
||||||
|
--------------------------
|
||||||
|
SOAP::WSDL 2.00_29 added experimental XML attribute support. The attribute
|
||||||
|
support changed the code of the generated classes, which may now
|
||||||
|
require the class SOAP::WSDL::XSD::Typelib::Attribute introduced in the same
|
||||||
|
pre-release.
|
||||||
|
|
||||||
|
While interfaces generated with pre-releases back to 2.00_25 work without
|
||||||
|
change, this does not hold true vice versa: Interfaces generated with
|
||||||
|
2.00_29 and above won't work with older pre-releases.
|
||||||
|
|
||||||
|
You'll have to update SOAP::WSDL on all your machines.
|
||||||
|
|
||||||
|
MIGRATING FROM PRE-2.00_24
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
This section describes how to migrate from 2.00_24 and before versions to
|
||||||
2.00_25.
|
2.00_25.
|
||||||
|
|
||||||
Migrating from 2.00_xx
|
Migrating from 2.00_xx
|
||||||
|
|||||||
11
benchmark/person_profile.pl
Normal file
11
benchmark/person_profile.pl
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
use lib '../lib';
|
||||||
|
use lib '../example/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
# Load all classes - XML::Compile has created everything before, too
|
||||||
|
for (1..100) { $soap->ListPerson({}) };
|
||||||
@@ -23,10 +23,10 @@ my %opt = (
|
|||||||
|
|
||||||
{ # a block just to scope "no warnings"
|
{ # a block just to scope "no warnings"
|
||||||
no warnings qw(redefine);
|
no warnings qw(redefine);
|
||||||
|
|
||||||
*LWP::UserAgent::get_basic_credentials = sub {
|
*LWP::UserAgent::get_basic_credentials = sub {
|
||||||
my ($user, $password);
|
my ($user, $password);
|
||||||
# remove user from option if called, to force prompting for a user
|
# remove user from option if called, to force prompting for a user
|
||||||
# name the next time
|
# name the next time
|
||||||
print "URL requires authorization.\n";
|
print "URL requires authorization.\n";
|
||||||
if (not $user = delete $opt{user}) {
|
if (not $user = delete $opt{user}) {
|
||||||
@@ -39,14 +39,14 @@ my %opt = (
|
|||||||
print 'Password:';
|
print 'Password:';
|
||||||
ReadMode 2;
|
ReadMode 2;
|
||||||
$user = ReadLine;
|
$user = ReadLine;
|
||||||
ReadMode 0;
|
ReadMode 0;
|
||||||
};
|
};
|
||||||
return ($user, $password);
|
return ($user, $password);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
GetOptions(\%opt,
|
GetOptions(\%opt,
|
||||||
qw(
|
qw(
|
||||||
prefix|p=s
|
prefix|p=s
|
||||||
type_prefix|t=s
|
type_prefix|t=s
|
||||||
element_prefix|e=s
|
element_prefix|e=s
|
||||||
@@ -69,24 +69,21 @@ my $url = $ARGV[0];
|
|||||||
pod2usage( -exit => 1 , verbose => 2 ) if ($opt{help});
|
pod2usage( -exit => 1 , verbose => 2 ) if ($opt{help});
|
||||||
pod2usage( -exit => 1 , verbose => 1 ) if not ($url);
|
pod2usage( -exit => 1 , verbose => 1 ) if not ($url);
|
||||||
|
|
||||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
|
||||||
|
|
||||||
local $ENV{HTTP_PROXY} = $opt{proxy} if $opt{proxy};
|
local $ENV{HTTP_PROXY} = $opt{proxy} if $opt{proxy};
|
||||||
local $ENV{HTTPS_PROXY} = $opt{proxy} if $opt{proxy};
|
local $ENV{HTTPS_PROXY} = $opt{proxy} if $opt{proxy};
|
||||||
|
|
||||||
my $lwp = LWP::UserAgent->new(
|
my $lwp = LWP::UserAgent->new(
|
||||||
$opt{keep_alive}
|
$opt{keep_alive}
|
||||||
? ( keep_alive => 1 )
|
? ( keep_alive => 1 )
|
||||||
: ()
|
: ()
|
||||||
);
|
);
|
||||||
$lwp->env_proxy(); # get proxy from environment. Works for both http & https.
|
$lwp->env_proxy(); # get proxy from environment. Works for both http & https.
|
||||||
|
|
||||||
my $response = $lwp->get($url);
|
my $parser = SOAP::WSDL::Expat::WSDLParser->new({
|
||||||
die $response->message(), "\n" if $response->code != 200;
|
user_agent => $lwp,
|
||||||
|
});
|
||||||
|
|
||||||
my $xml = $response->content();
|
my $definitions = $parser->parse_uri( $url );
|
||||||
|
|
||||||
my $definitions = $parser->parse_string( $xml );
|
|
||||||
|
|
||||||
my %typemap = ();
|
my %typemap = ();
|
||||||
|
|
||||||
@@ -112,7 +109,7 @@ $generator->set_element_prefix($opt{ element_prefix }) if $generator->can('set_e
|
|||||||
$generator->set_interface_prefix($opt{ interface_prefix }) if $generator->can('set_interface_prefix');
|
$generator->set_interface_prefix($opt{ interface_prefix }) if $generator->can('set_interface_prefix');
|
||||||
$generator->set_OUTPUT_PATH($opt{ base_path }) if $generator->can('set_OUTPUT_PATH');
|
$generator->set_OUTPUT_PATH($opt{ base_path }) if $generator->can('set_OUTPUT_PATH');
|
||||||
$generator->set_definitions($definitions) if $generator->can('set_definitions');
|
$generator->set_definitions($definitions) if $generator->can('set_definitions');
|
||||||
$generator->set_wsdl($xml) if $generator->can('set_wsdl');
|
# $generator->set_wsdl($xml) if $generator->can('set_wsdl');
|
||||||
|
|
||||||
# start with typelib, as errors will most likely occur here...
|
# start with typelib, as errors will most likely occur here...
|
||||||
$generator->generate();
|
$generator->generate();
|
||||||
@@ -136,33 +133,33 @@ wsdl2perl.pl - create perl bindings for SOAP webservices.
|
|||||||
NAME SHORT DESCRITPION
|
NAME SHORT DESCRITPION
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
prefix p Prefix for both type and element classes.
|
prefix p Prefix for both type and element classes.
|
||||||
type_prefix t Prefix for type classes.
|
type_prefix t Prefix for type classes.
|
||||||
Default: MyTypes
|
Default: MyTypes
|
||||||
element_prefix e Prefix for element classes.
|
element_prefix e Prefix for element classes.
|
||||||
Default: MyElements
|
Default: MyElements
|
||||||
typemap_prefix m Prefix for typemap classes.
|
typemap_prefix m Prefix for typemap classes.
|
||||||
Default: MyTypemaps
|
Default: MyTypemaps
|
||||||
interface_prefix i Prefix for interface classes.
|
interface_prefix i Prefix for interface classes.
|
||||||
Default: MyInterfaces
|
Default: MyInterfaces
|
||||||
base_path b Path to create classes in.
|
base_path b Path to create classes in.
|
||||||
Default: .
|
Default: .
|
||||||
typemap_include mi File to include in typemap. Must eval() to a valid
|
typemap_include mi File to include in typemap. Must eval() to a valid
|
||||||
perl hash (not a hash ref !).
|
perl hash (not a hash ref !).
|
||||||
proxy x HTTP(S) proxy to use (if any). wsdl2perl will also
|
proxy x HTTP(S) proxy to use (if any). wsdl2perl will also
|
||||||
use the proxy settings specified via the HTTP_PROXY
|
use the proxy settings specified via the HTTP_PROXY
|
||||||
and HTTPS_PROXY environment variables.
|
and HTTPS_PROXY environment variables.
|
||||||
keep_alive Use http keep_alive.
|
keep_alive Use http keep_alive.
|
||||||
user Username for HTTP authentication
|
user Username for HTTP authentication
|
||||||
password Password. wsdl2perl will prompt if not given.
|
password Password. wsdl2perl will prompt if not given.
|
||||||
generator g Generator to use.
|
generator g Generator to use.
|
||||||
Default: XSD
|
Default: XSD
|
||||||
server s Generate a server interface (currently only CGI
|
server s Generate a server interface (currently only CGI
|
||||||
supported)
|
supported)
|
||||||
help h Show help content
|
help h Show help content
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
Generates a interface class for a SOAP web service described by a WSDL
|
Generates a interface class for a SOAP web service described by a WSDL
|
||||||
definition.
|
definition.
|
||||||
|
|
||||||
The following classes are created:
|
The following classes are created:
|
||||||
@@ -171,7 +168,7 @@ The following classes are created:
|
|||||||
|
|
||||||
=item * A interface class for every SOAP port in service
|
=item * A interface class for every SOAP port in service
|
||||||
|
|
||||||
Interface classes are what you will mainly deal with: They provide a method
|
Interface classes are what you will mainly deal with: They provide a method
|
||||||
for accessing every web service method.
|
for accessing every web service method.
|
||||||
|
|
||||||
If you chose to generate Server interfaces, a class for every SOAP port in
|
If you chose to generate Server interfaces, a class for every SOAP port in
|
||||||
@@ -183,13 +180,13 @@ to dispatch calls to.
|
|||||||
|
|
||||||
=item * A typemap for every service
|
=item * A typemap for every service
|
||||||
|
|
||||||
Typemaps are used internally by SOAP::WSDL for parsing the SOAP message into
|
Typemaps are used internally by SOAP::WSDL for parsing the SOAP message into
|
||||||
object trees.
|
object trees.
|
||||||
|
|
||||||
If the WSDL definition is incomplete, you may need to add some lines to
|
If the WSDL definition is incomplete, you may need to add some lines to
|
||||||
your typemap. Especially definitions for faults are sometimes left out.
|
your typemap. Especially definitions for faults are sometimes left out.
|
||||||
|
|
||||||
Additional typemap content may be included by passing a file name as
|
Additional typemap content may be included by passing a file name as
|
||||||
typemap_include (mi) option.
|
typemap_include (mi) option.
|
||||||
|
|
||||||
=item * A type class for every element, complexType or simpleType definition
|
=item * A type class for every element, complexType or simpleType definition
|
||||||
@@ -197,7 +194,7 @@ typemap_include (mi) option.
|
|||||||
You may need to write additional type classes if your WSDL is incomplete.
|
You may need to write additional type classes if your WSDL is incomplete.
|
||||||
|
|
||||||
For writing your own lib classes, see L<SOAP::WSDL::XSD::Typelib::Element>,
|
For writing your own lib classes, see L<SOAP::WSDL::XSD::Typelib::Element>,
|
||||||
L<SOAP::WSDL::XSD::Typelib::ComplexType>
|
L<SOAP::WSDL::XSD::Typelib::ComplexType>
|
||||||
and L<SOAP::WSDL::XSD::Typelib::SimpleType>.
|
and L<SOAP::WSDL::XSD::Typelib::SimpleType>.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
@@ -210,26 +207,26 @@ You need Crypt::SSLeay installed for accessing HTTPS URLs.
|
|||||||
|
|
||||||
=head2 Accessing protected documents
|
=head2 Accessing protected documents
|
||||||
|
|
||||||
Use the -u option for specifying the user name. You will be prompted for a
|
Use the -u option for specifying the user name. You will be prompted for a
|
||||||
password.
|
password.
|
||||||
|
|
||||||
Alternatively, you may specify a passowrd with --password on the command
|
Alternatively, you may specify a passowrd with --password on the command
|
||||||
line.
|
line.
|
||||||
|
|
||||||
=head2 Accessing documents protected by NTLM authentication
|
=head2 Accessing documents protected by NTLM authentication
|
||||||
|
|
||||||
Set the --keep_alive option.
|
Set the --keep_alive option.
|
||||||
|
|
||||||
Note that accessing documents protected by NTLM authentication is currently
|
Note that accessing documents protected by NTLM authentication is currently
|
||||||
untested, because I have no access to a system using NTLM authentication.
|
untested, because I have no access to a system using NTLM authentication.
|
||||||
If you try it, I would be glad if you could just drop me a note about
|
If you try it, I would be glad if you could just drop me a note about
|
||||||
success or failure.
|
success or failure.
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
||||||
Copyright 2007 Martin Kutter.
|
Copyright 2007 Martin Kutter.
|
||||||
|
|
||||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||||
the same terms as perl itself
|
the same terms as perl itself
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ use Class::Std::Fast;
|
|||||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||||
use LWP::UserAgent;
|
use LWP::UserAgent;
|
||||||
|
|
||||||
our $VERSION= '2.00_25';
|
our $VERSION= '2.00_31';
|
||||||
|
|
||||||
my %no_dispatch_of :ATTR(:name<no_dispatch>);
|
my %no_dispatch_of :ATTR(:name<no_dispatch>);
|
||||||
my %wsdl_of :ATTR(:name<wsdl>);
|
my %wsdl_of :ATTR(:name<wsdl>);
|
||||||
@@ -176,7 +176,7 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
my $ns = $wsdl->get_targetNamespace();
|
my $ns = $wsdl->get_targetNamespace();
|
||||||
|
|
||||||
# get bindings, portType, message, part(s) - use private methods for clear separation...
|
# get bindings, portType, message, part(s) - use private methods for clear separation...
|
||||||
$self->_wsdl_get_service if not ($service_of{ $ident });
|
$self->_wsdl_get_service();
|
||||||
$self->_wsdl_get_portType();
|
$self->_wsdl_get_portType();
|
||||||
|
|
||||||
$method_info_of{ $ident } = {};
|
$method_info_of{ $ident } = {};
|
||||||
@@ -187,9 +187,10 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
|
|
||||||
# get SOAP Action
|
# get SOAP Action
|
||||||
# SOAP-Action is a required HTTP Header, so we need to look it up...
|
# SOAP-Action is a required HTTP Header, so we need to look it up...
|
||||||
|
# There must be a soapAction uri - or the WSDL is invalid (and
|
||||||
|
# it's not us to prove that...)
|
||||||
my $soap_binding_operation = $binding_operation->get_operation()->[0];
|
my $soap_binding_operation = $binding_operation->get_operation()->[0];
|
||||||
$method->{ soap_action } = $soap_binding_operation ?
|
$method->{ soap_action } = $soap_binding_operation->get_soapAction();
|
||||||
$soap_binding_operation->get_soapAction() : $method;
|
|
||||||
|
|
||||||
# get parts
|
# get parts
|
||||||
# 1. get operation from port
|
# 1. get operation from port
|
||||||
@@ -204,7 +205,10 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
my $message = $wsdl->find_message( $ns, $localname )
|
my $message = $wsdl->find_message( $ns, $localname )
|
||||||
or croak "Message {$ns}$localname not found in WSDL definition";
|
or croak "Message {$ns}$localname not found in WSDL definition";
|
||||||
|
|
||||||
if (my $body=$binding_operation->first_input()->first_body()) {
|
# Is body not required? So there must be one? Do we need the "if"?
|
||||||
|
# if (
|
||||||
|
my $body=$binding_operation->first_input()->first_body();
|
||||||
|
# {
|
||||||
if ($body->get_parts()) {
|
if ($body->get_parts()) {
|
||||||
$method->{ parts } = []; # make sure it's empty
|
$method->{ parts } = []; # make sure it's empty
|
||||||
my $message_part_ref = $message->get_part();
|
my $message_part_ref = $message->get_part();
|
||||||
@@ -216,7 +220,9 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
grep { $_->get_name() eq $name } @{ $message_part_ref };
|
grep { $_->get_name() eq $name } @{ $message_part_ref };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
# }
|
||||||
|
# A body does not need to specify the parts of a messages.
|
||||||
|
# Use all of the message's parts if it does not.
|
||||||
$method->{ parts } ||= $message->get_part();
|
$method->{ parts } ||= $message->get_part();
|
||||||
|
|
||||||
# rpc / encoded methods may have a namespace specified.
|
# rpc / encoded methods may have a namespace specified.
|
||||||
@@ -329,7 +335,7 @@ SOAP client, which mimics L<SOAP::Lite|SOAP::Lite>'s API, read on.
|
|||||||
my $soap = SOAP::WSDL->new(
|
my $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file://bla.wsdl',
|
wsdl => 'file://bla.wsdl',
|
||||||
);
|
);
|
||||||
|
|
||||||
my $result = $soap->call('MyMethod', %data);
|
my $result = $soap->call('MyMethod', %data);
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
@@ -436,7 +442,7 @@ Class resolver
|
|||||||
'Person/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Person/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'Person/FirstName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Person/FirstName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
);
|
);
|
||||||
|
|
||||||
sub get_class { return $typemap{ $_[1] } };
|
sub get_class { return $typemap{ $_[1] } };
|
||||||
1;
|
1;
|
||||||
|
|
||||||
@@ -730,9 +736,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 477 $
|
$Rev: 524 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: WSDL.pm 477 2007-12-24 10:23:52Z kutterma $
|
$Id: WSDL.pm 524 2008-02-10 23:24:43Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -8,22 +8,32 @@ our $VERSION = '2.00_25';
|
|||||||
|
|
||||||
sub call {
|
sub call {
|
||||||
my ($self, $method, $body, $header) = @_;
|
my ($self, $method, $body, $header) = @_;
|
||||||
|
|
||||||
|
# Treat non-objects special
|
||||||
if (not blessed $body) {
|
if (not blessed $body) {
|
||||||
|
|
||||||
|
# make sure there's something sensible in our body data
|
||||||
$body = {} if not defined $body;
|
$body = {} if not defined $body;
|
||||||
$body = ref $body eq 'ARRAY' ? $body : [ $body ];
|
$body = ref $body eq 'ARRAY' ? $body : [ $body ];
|
||||||
my $index = 0;
|
|
||||||
my @part_from;
|
my @body_from = @{ $body }; # make a copy
|
||||||
foreach my $part (@{ $body }) {
|
|
||||||
my $class = $method->{ body }->{ parts }->[$index];
|
# build list of parts as objects initialized with
|
||||||
|
# parameters given
|
||||||
|
my @part_from = ();
|
||||||
|
foreach my $class (@{ $method->{ body }->{ parts } }) {
|
||||||
eval "require $class" || die $@;
|
eval "require $class" || die $@;
|
||||||
push @part_from, $class->new($part);
|
push @part_from, $class->new(shift(@body_from) || {});
|
||||||
$index++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# it's either the first part or a list ref with all parts...
|
||||||
$body = $#part_from ? \@part_from : $part_from[0];
|
$body = $#part_from ? \@part_from : $part_from[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
# if we have a header
|
# if we have a header
|
||||||
if (%{ $method->{ header } }) {
|
if (%{ $method->{ header } }) {
|
||||||
|
|
||||||
|
# trat non object special - as above, but only for one
|
||||||
if (not blessed $header) {
|
if (not blessed $header) {
|
||||||
my $class = $method->{ header }->{ parts }->[0];
|
my $class = $method->{ header }->{ parts }->[0];
|
||||||
eval "require $class" || die $@;
|
eval "require $class" || die $@;
|
||||||
@@ -33,39 +43,6 @@ sub call {
|
|||||||
return $self->SUPER::call($method, $body, $header);
|
return $self->SUPER::call($method, $body, $header);
|
||||||
}
|
}
|
||||||
|
|
||||||
#sub __create_methods {
|
|
||||||
# my ($package, %info_of) = @_;
|
|
||||||
#
|
|
||||||
# no strict qw(refs);
|
|
||||||
# no warnings qw(redefine);
|
|
||||||
# for my $method (keys %info_of){
|
|
||||||
# my ($soap_action, @parts);
|
|
||||||
#
|
|
||||||
# # up to 2.00_10 we had list refs...
|
|
||||||
# if (ref $info_of{ $method }eq 'HASH') {
|
|
||||||
# @parts = @{ $info_of{ $method }->{ parts } };
|
|
||||||
# $soap_action = $info_of{ $method }->{ soap_action };
|
|
||||||
# }
|
|
||||||
# else {
|
|
||||||
# die "Pre-v2.00_10 Interfaces are no longer supported. Please re-generate your interface.";
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# *{ "$package\::$method" } = sub {
|
|
||||||
# my $self = shift;
|
|
||||||
# my @param = map {
|
|
||||||
# my $data = shift || {};
|
|
||||||
# eval "require $_";
|
|
||||||
# $_->new( $data );
|
|
||||||
# } @parts;
|
|
||||||
#
|
|
||||||
# return $self->SUPER::call( {
|
|
||||||
# operation => $method,
|
|
||||||
# soap_action => $soap_action,
|
|
||||||
# }, @param );
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
#}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -101,9 +78,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 440 $
|
$Rev: 501 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Base.pm 440 2007-12-04 22:24:33Z kutterma $
|
$Id: Base.pm 501 2008-01-26 20:23:32Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ sub BUILD {
|
|||||||
sub deserialize {
|
sub deserialize {
|
||||||
my ($self, $content) = @_;
|
my ($self, $content) = @_;
|
||||||
|
|
||||||
$parser_of{ ${ $self } } ||= SOAP::WSDL::Expat::MessageParser->new();
|
$parser_of{ ${ $self } } = SOAP::WSDL::Expat::MessageParser->new()
|
||||||
|
if not $parser_of{ ${ $self } };
|
||||||
$parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ident $self } );
|
$parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ident $self } );
|
||||||
eval { $parser_of{ ${ $self } }->parse_string( $content ) };
|
eval { $parser_of{ ${ $self } }->parse_string( $content ) };
|
||||||
if ($@) {
|
if ($@) {
|
||||||
@@ -98,9 +99,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 501 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: XSD.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: XSD.pm 501 2008-01-26 20:23:32Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,17 +1,47 @@
|
|||||||
package SOAP::WSDL::Expat::Base;
|
package SOAP::WSDL::Expat::Base;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use URI;
|
||||||
use XML::Parser::Expat;
|
use XML::Parser::Expat;
|
||||||
|
|
||||||
|
# TODO: convert to Class::Std::Fast based class - hash based classes suck.
|
||||||
|
|
||||||
our $VERSION = '2.00_27';
|
our $VERSION = '2.00_27';
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, $args) = @_;
|
my ($class, $arg_ref) = @_;
|
||||||
my $self = {};
|
my $self = {};
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
|
$self->set_user_agent($arg_ref->{ user_agent })
|
||||||
|
if $arg_ref->{ user_agent };
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub set_uri { $_[0]->{ uri } = $_[1]; }
|
||||||
|
sub get_uri { return $_[0]->{ uri }; }
|
||||||
|
|
||||||
|
sub set_user_agent { $_[0]->{ user_agent } = $_[1]; }
|
||||||
|
sub get_user_agent { return $_[0]->{ user_agent }; }
|
||||||
|
|
||||||
|
|
||||||
|
sub parse_uri {
|
||||||
|
my $self = shift;
|
||||||
|
my $uri = shift;
|
||||||
|
$self->set_uri( $uri );
|
||||||
|
|
||||||
|
if (not $self->{ user_agent }) {
|
||||||
|
require LWP::UserAgent;
|
||||||
|
$self->{ user_agent } = LWP::UserAgent->new();
|
||||||
|
}
|
||||||
|
|
||||||
|
my $response = $self->{ user_agent }->get($uri);
|
||||||
|
|
||||||
|
die $response->message() if $response->code() ne '200';
|
||||||
|
return $self->parse( $response->content() );
|
||||||
|
}
|
||||||
|
|
||||||
sub parse {
|
sub parse {
|
||||||
eval {
|
eval {
|
||||||
$_[0]->_initialize( XML::Parser::Expat->new( Namespaces => 1 ) )->parse( $_[1] );
|
$_[0]->_initialize( XML::Parser::Expat->new( Namespaces => 1 ) )->parse( $_[1] );
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ sub _initialize {
|
|||||||
return &{$content_check{ $depth }}
|
return &{$content_check{ $depth }}
|
||||||
if exists $content_check{ $depth };
|
if exists $content_check{ $depth };
|
||||||
|
|
||||||
push @{ $path }, $_[1]; # step down in path
|
push @{ $path }, $_[1]; # step down in path
|
||||||
return if $skip; # skip inside __SKIP__
|
return if $skip; # skip inside __SKIP__
|
||||||
|
|
||||||
# resolve class of this element
|
# resolve class of this element
|
||||||
@@ -171,6 +171,7 @@ sub _initialize {
|
|||||||
$current = bless \$o, $_class;
|
$current = bless \$o, $_class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# set attributes if there are any
|
||||||
$current->attr({ @_[2..$#_] }) if (@_ > 2);
|
$current->attr({ @_[2..$#_] }) if (@_ > 2);
|
||||||
|
|
||||||
$depth++;
|
$depth++;
|
||||||
@@ -294,8 +295,8 @@ the same terms as perl itself
|
|||||||
|
|
||||||
$Id: $
|
$Id: $
|
||||||
|
|
||||||
$LastChangedDate: 2008-01-19 13:57:57 +0100 (Sa, 19 Jan 2008) $
|
$LastChangedDate: 2008-02-02 10:19:45 +0100 (Sa, 02 Feb 2008) $
|
||||||
$LastChangedRevision: 497 $
|
$LastChangedRevision: 516 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||||
|
|||||||
@@ -5,7 +5,57 @@ use Carp;
|
|||||||
use SOAP::WSDL::TypeLookup;
|
use SOAP::WSDL::TypeLookup;
|
||||||
use base qw(SOAP::WSDL::Expat::Base);
|
use base qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
our $VERSION = q{2.00_29};
|
our $VERSION = q{2.00_31};
|
||||||
|
|
||||||
|
sub _import_children {
|
||||||
|
my ($self, $name, $imported, $importer, $import_namespace) = @_;
|
||||||
|
my $targetNamespace = $importer->get_targetNamespace();
|
||||||
|
my $push_method = "push_$name";
|
||||||
|
my $get_method = "get_$name";
|
||||||
|
no strict qw(refs);
|
||||||
|
my $value_ref = $imported->$get_method();
|
||||||
|
if ($value_ref) {
|
||||||
|
$value_ref = [ $value_ref ] if (not ref $value_ref eq 'ARRAY');
|
||||||
|
# set xmlns - can be different from parent
|
||||||
|
for (@{ $value_ref }) {
|
||||||
|
# fixup targetNamespace, but don't override
|
||||||
|
$_->set_targetNamespace( $import_namespace )
|
||||||
|
if ( ($import_namespace ne $targetNamespace) && ! $_->get_targetNamespace);
|
||||||
|
# update parent...
|
||||||
|
$_->set_parent( $importer );
|
||||||
|
}
|
||||||
|
# push elements into importing WSDL
|
||||||
|
$importer->$push_method(@{ $value_ref });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub xml_schema_import {
|
||||||
|
my $self = shift;
|
||||||
|
my $schema = shift;
|
||||||
|
my $parser = ref($self)->new();
|
||||||
|
my %attr_of = @_;
|
||||||
|
my $import_namespace = $attr_of{ namespace };
|
||||||
|
my $uri = URI->new_abs($attr_of{schemaLocation}, $self->get_uri() );
|
||||||
|
my $import = $parser->parse_uri($uri);
|
||||||
|
|
||||||
|
for my $name ( qw(type element group) ) {
|
||||||
|
$self->_import_children( $name, $import, $schema, $import_namespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub wsdl_import {
|
||||||
|
my $self = shift;
|
||||||
|
my $definitions = shift;
|
||||||
|
my $parser = ref($self)->new();
|
||||||
|
my %attr_of = @_;
|
||||||
|
my $import_namespace = $attr_of{ namespace };
|
||||||
|
my $uri = URI->new_abs($attr_of{location}, $self->get_uri() );
|
||||||
|
|
||||||
|
my $import = $parser->parse_uri($uri);
|
||||||
|
for my $name ( qw(types message binding portType service) ) {
|
||||||
|
$self->_import_children( $name, $import, $definitions, $import_namespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub _initialize {
|
sub _initialize {
|
||||||
my ($self, $parser) = @_;
|
my ($self, $parser) = @_;
|
||||||
@@ -81,6 +131,20 @@ sub _initialize {
|
|||||||
: _fixup_attrs($parser, %attrs)
|
: _fixup_attrs($parser, %attrs)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
elsif ($action->{type} eq 'HANDLER') {
|
||||||
|
my $method = $self->can($action->{method});
|
||||||
|
$method->($self, $current, %attrs);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# TODO replace by hash lookup of known namespaces.
|
||||||
|
my $namespace = $parser->namespace($localname) || q{};
|
||||||
|
my $part = $namespace eq 'http://schemas.xmlsoap.org/wsdl/'
|
||||||
|
? 'WSDL 1.1'
|
||||||
|
: 'XML Schema';
|
||||||
|
|
||||||
|
warn "$part element <$localname> is not implemented yet"
|
||||||
|
if ($localname !~m{ \A (:? annotation | documentation ) \z }xms );
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
@@ -179,8 +243,8 @@ the same terms as perl itself
|
|||||||
|
|
||||||
$Id: $
|
$Id: $
|
||||||
|
|
||||||
$LastChangedDate: 2007-12-24 11:23:52 +0100 (Mo, 24 Dez 2007) $
|
$LastChangedDate: 2008-02-11 00:14:27 +0100 (Mo, 11 Feb 2008) $
|
||||||
$LastChangedRevision: 477 $
|
$LastChangedRevision: 522 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ sub register {
|
|||||||
|
|
||||||
sub get_deserializer {
|
sub get_deserializer {
|
||||||
my ($self, $args_of_ref) = @_;
|
my ($self, $args_of_ref) = @_;
|
||||||
|
$args_of_ref->{ soap_version } ||= '1.1';
|
||||||
# sanity check
|
# sanity check
|
||||||
die "no deserializer registered for SOAP version $args_of_ref->{ soap_version }"
|
die "no deserializer registered for SOAP version $args_of_ref->{ soap_version }"
|
||||||
if not exists ($DESERIALIZER{ $args_of_ref->{ soap_version } });
|
if not exists ($DESERIALIZER{ $args_of_ref->{ soap_version } });
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ sub register {
|
|||||||
|
|
||||||
sub get_serializer {
|
sub get_serializer {
|
||||||
my ($self, $args_of_ref) = @_;
|
my ($self, $args_of_ref) = @_;
|
||||||
|
$args_of_ref->{ soap_version } ||= '1.1';
|
||||||
# sanity check
|
# sanity check
|
||||||
die "no serializer registered for SOAP version $args_of_ref->{ soap_version }"
|
die "no serializer registered for SOAP version $args_of_ref->{ soap_version }"
|
||||||
if not exists ($SERIALIZER{ $args_of_ref->{ soap_version } });
|
if not exists ($SERIALIZER{ $args_of_ref->{ soap_version } });
|
||||||
@@ -138,9 +138,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 510 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Serializer.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Serializer.pm 510 2008-01-29 08:03:46Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Transport;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION='2.00_25';
|
our $VERSION='2.00_31';
|
||||||
|
|
||||||
# class data
|
# class data
|
||||||
my %registered_transport_of = ();
|
my %registered_transport_of = ();
|
||||||
@@ -34,7 +34,7 @@ sub register {
|
|||||||
sub get_transport {
|
sub get_transport {
|
||||||
my ($class, $scheme, %attrs) = @_;
|
my ($class, $scheme, %attrs) = @_;
|
||||||
|
|
||||||
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}smx;
|
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}x;
|
||||||
|
|
||||||
if ($registered_transport_of{ $scheme }) {
|
if ($registered_transport_of{ $scheme }) {
|
||||||
no strict qw(refs);
|
no strict qw(refs);
|
||||||
@@ -96,12 +96,12 @@ SOAP::WSDL::Factory::Transport - Factory for retrieving transport objects
|
|||||||
# in transport class:
|
# in transport class:
|
||||||
package MyWickedTransport;
|
package MyWickedTransport;
|
||||||
use SOAP::WSDL::Factory::Transport;
|
use SOAP::WSDL::Factory::Transport;
|
||||||
|
|
||||||
# register class as transport module for httpr and https
|
# register class as transport module for httpr and https
|
||||||
# (httpr is "reliable http", a protocol developed by IBM).
|
# (httpr is "reliable http", a protocol developed by IBM).
|
||||||
SOAP::WSDL::Factory::Transport->register( 'httpr' , __PACKAGE__ );
|
SOAP::WSDL::Factory::Transport->register( 'httpr' , __PACKAGE__ );
|
||||||
SOAP::WSDL::Factory::Transport->register( 'https' , __PACKAGE__ );
|
SOAP::WSDL::Factory::Transport->register( 'https' , __PACKAGE__ );
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SOAP::WSDL::Transport serves as factory for retrieving transport objects for
|
SOAP::WSDL::Transport serves as factory for retrieving transport objects for
|
||||||
@@ -207,10 +207,10 @@ classes in one file, and to follow this naming scheme:
|
|||||||
|
|
||||||
Module name:
|
Module name:
|
||||||
"SOAP::Transport::" . uc($scheme)
|
"SOAP::Transport::" . uc($scheme)
|
||||||
|
|
||||||
Client class (additional package in module):
|
Client class (additional package in module):
|
||||||
"SOAP::Transport::" . uc($scheme) . "::Client"
|
"SOAP::Transport::" . uc($scheme) . "::Client"
|
||||||
|
|
||||||
Server class (additional package in module):
|
Server class (additional package in module):
|
||||||
"SOAP::Transport::" . uc($scheme) . "::Client"
|
"SOAP::Transport::" . uc($scheme) . "::Client"
|
||||||
|
|
||||||
@@ -240,9 +240,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 459 $
|
$Rev: 524 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Transport.pm 459 2007-12-16 16:00:14Z kutterma $
|
$Id: Transport.pm 524 2008-02-10 23:24:43Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -9,7 +9,12 @@ ELSIF (complexType.get_variety == 'choice');
|
|||||||
INCLUDE complexType/all.tt(complexType = complexType);
|
INCLUDE complexType/all.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_variety);
|
ELSIF (complexType.get_variety);
|
||||||
THROW NOT_IMPLEMENTED, "Unknown variety ${ complexType.get_variety } in ${ complexType.get_name } (${ element.get_name })";
|
THROW NOT_IMPLEMENTED, "Unknown variety ${ complexType.get_variety } in ${ complexType.get_name } (${ element.get_name })";
|
||||||
ELSE;
|
ELSE %]
|
||||||
# There's no variety - might be empty complexType
|
|
||||||
END;
|
# There's no variety - empty complexType
|
||||||
%]
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory();
|
||||||
|
|
||||||
|
[% END %]
|
||||||
@@ -34,11 +34,11 @@ considered as bugs.
|
|||||||
=item * RULES NOT APPLICABLE
|
=item * RULES NOT APPLICABLE
|
||||||
|
|
||||||
WS-I Basic Profile contains rules for web services as a whole. SOAP::WSDL only
|
WS-I Basic Profile contains rules for web services as a whole. SOAP::WSDL only
|
||||||
plays the part of one layer in a Web Service CONSUMER, thus does not implement
|
plays the part of one layer in a Web Service CONSUMER / RECEIVER, thus does
|
||||||
some parts the WS-I Basic Profile references.
|
not implement some parts the WS-I Basic Profile references.
|
||||||
|
|
||||||
This section contains rules not applicable for SOAP::WSDL, because they refer
|
This section contains rules not applicable for SOAP::WSDL, because they refer
|
||||||
parts to web service SOAP::WSDL does not implement.
|
to parts SOAP::WSDL does not implement.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -427,9 +427,10 @@ TODO support rpc-literal bindings.
|
|||||||
In a DESCRIPTION the value of the location attribute of a wsdl:import element
|
In a DESCRIPTION the value of the location attribute of a wsdl:import element
|
||||||
SHOULD be treated as a hint.
|
SHOULD be treated as a hint.
|
||||||
|
|
||||||
SOAP::WSDL's schema parser does not handle import elements yet.
|
The wsdl:import element imports the referenced WSDL definition.
|
||||||
|
|
||||||
TODO implement support for wsdl:import in SOAP::WSDL::Expat::WSDLParser.
|
This is rather hard-wired and does not allow to specify a wsdl:import without
|
||||||
|
a resolvable location.
|
||||||
|
|
||||||
=head2 R4002
|
=head2 R4002
|
||||||
|
|
||||||
@@ -448,9 +449,7 @@ TODO Test whether UTF-16 works.
|
|||||||
The wsdl:documentation element MAY occur as a child of the wsdl:import
|
The wsdl:documentation element MAY occur as a child of the wsdl:import
|
||||||
element in a DESCRIPTION.
|
element in a DESCRIPTION.
|
||||||
|
|
||||||
SOAP::WSDL's schema parser does not handle import elements yet.
|
Not tested yet.
|
||||||
|
|
||||||
TODO implement support for wsdl:import in SOAP::WSDL::Expat::WSDLParser.
|
|
||||||
|
|
||||||
=head2 R2024
|
=head2 R2024
|
||||||
|
|
||||||
@@ -681,7 +680,11 @@ is Schema valid.
|
|||||||
A DESCRIPTION MUST only use the WSDL "import" statement to import another
|
A DESCRIPTION MUST only use the WSDL "import" statement to import another
|
||||||
WSDL description.
|
WSDL description.
|
||||||
|
|
||||||
SOAP::WSDL has no means of generating WSDL definitions
|
SOAP::WSDL (partially) supports the wsdl:import statement. The wsdl:include
|
||||||
|
statement is not supported (yet).
|
||||||
|
|
||||||
|
It's the responsibility of the WSDL author to use only the wsdl:import
|
||||||
|
statement for importing WSDL descriptions.
|
||||||
|
|
||||||
=head2 R2002
|
=head2 R2002
|
||||||
|
|
||||||
@@ -1249,9 +1252,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 478 $
|
$Rev: 514 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: WS_I.pod 478 2007-12-27 14:15:01Z kutterma $
|
$Id: WS_I.pod 514 2008-01-31 19:57:52Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/WS_I.pod $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/WS_I.pod $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ use warnings;
|
|||||||
use Class::Std::Fast::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
our $VERSION=q{2.00_27};
|
our $VERSION=q{2.00_27};
|
||||||
|
use SOAP::WSDL::Factory::Serializer;
|
||||||
|
|
||||||
my $SOAP_NS = 'http://schemas.xmlsoap.org/soap/envelope/';
|
my $SOAP_NS = 'http://schemas.xmlsoap.org/soap/envelope/';
|
||||||
my $XML_INSTANCE_NS = 'http://www.w3.org/2001/XMLSchema-instance';
|
my $XML_INSTANCE_NS = 'http://www.w3.org/2001/XMLSchema-instance';
|
||||||
@@ -119,9 +120,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 477 $
|
$Rev: 510 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: XSD.pm 477 2007-12-24 10:23:52Z kutterma $
|
$Id: XSD.pm 510 2008-01-29 08:03:46Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Serializer/XSD.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Serializer/XSD.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -2,11 +2,15 @@ package SOAP::WSDL::TypeLookup;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION=q{2.00_29};
|
our $VERSION=q{2.00_31};
|
||||||
|
|
||||||
my %TYPES = (
|
my %TYPES = (
|
||||||
# wsdl:
|
# wsdl:
|
||||||
'http://schemas.xmlsoap.org/wsdl/' => {
|
'http://schemas.xmlsoap.org/wsdl/' => {
|
||||||
|
'import' => {
|
||||||
|
type => 'HANDLER',
|
||||||
|
method => 'wsdl_import',
|
||||||
|
},
|
||||||
binding => {
|
binding => {
|
||||||
type => 'CLASS',
|
type => 'CLASS',
|
||||||
class => 'SOAP::WSDL::Binding',
|
class => 'SOAP::WSDL::Binding',
|
||||||
@@ -83,6 +87,10 @@ my %TYPES = (
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
'http://www.w3.org/2001/XMLSchema' => {
|
'http://www.w3.org/2001/XMLSchema' => {
|
||||||
|
'import' => {
|
||||||
|
type => 'HANDLER',
|
||||||
|
method => 'xml_schema_import',
|
||||||
|
},
|
||||||
schema => {
|
schema => {
|
||||||
type => 'CLASS',
|
type => 'CLASS',
|
||||||
class => 'SOAP::WSDL::XSD::Schema',
|
class => 'SOAP::WSDL::XSD::Schema',
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ sub serialize {
|
|||||||
my $prefix = $prefix_of{ $ns }
|
my $prefix = $prefix_of{ $ns }
|
||||||
|| die 'No prefix found for namespace '. $ns;
|
|| die 'No prefix found for namespace '. $ns;
|
||||||
$xml .= ' type="' . $prefix . ':'
|
$xml .= ' type="' . $prefix . ':'
|
||||||
. $self->get_name() . '"' if ($self->get_name() );
|
. $self->get_name() . '"';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined $value) {
|
if (defined $value) {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use Class::Std::Fast::Storable;
|
|||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
use base qw/SOAP::WSDL::Base/;
|
use base qw/SOAP::WSDL::Base/;
|
||||||
|
|
||||||
our $VERSION=q{2.00_25};
|
our $VERSION=q{2.00_29};
|
||||||
|
|
||||||
my %annotation_of :ATTR(:name<annotation> :default<()>);
|
my %annotation_of :ATTR(:name<annotation> :default<()>);
|
||||||
my %attribute_of :ATTR(:name<attribute> :default<()>);
|
my %attribute_of :ATTR(:name<attribute> :default<()>);
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ sub serialize {
|
|||||||
# TODO: implement final and substitutionGroup - maybe never implement
|
# TODO: implement final and substitutionGroup - maybe never implement
|
||||||
# substitutionGroup ?
|
# substitutionGroup ?
|
||||||
|
|
||||||
$name ||= $self->get_name();
|
$name = $self->get_name() if not ($name);
|
||||||
|
|
||||||
if ( $opt->{ qualify } ) {
|
if ( $opt->{ qualify } ) {
|
||||||
$opt->{ attributes } = [ ' xmlns="' . $self->get_targetNamespace .'"' ];
|
$opt->{ attributes } = [ ' xmlns="' . $self->get_targetNamespace .'"' ];
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ use warnings;
|
|||||||
|
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::Element);
|
use base qw(SOAP::WSDL::XSD::Typelib::Element);
|
||||||
|
|
||||||
|
our $VERSION=q{2.00_29};
|
||||||
|
|
||||||
sub start_tag {
|
sub start_tag {
|
||||||
# my ($self, $opt, $value) = @_;
|
# my ($self, $opt, $value) = @_;
|
||||||
return q{} if (@_ < 3);
|
return q{} if (@_ < 3);
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
our $VERSION=q{2.00_29};
|
||||||
|
|
||||||
sub serialize {
|
sub serialize {
|
||||||
# we work on @_ for performance.
|
# we work on @_ for performance.
|
||||||
$_[1] ||= {}; # $option_ref
|
$_[1] ||= {}; # $option_ref
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ require Class::Std::Fast::Storable;
|
|||||||
|
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
||||||
|
|
||||||
our $VERSION = '2.00_29';
|
our $VERSION = '2.00_31';
|
||||||
|
|
||||||
my %ELEMENTS_FROM;
|
my %ELEMENTS_FROM;
|
||||||
my %ATTRIBUTES_OF;
|
my %ATTRIBUTES_OF;
|
||||||
@@ -45,6 +45,10 @@ my %xml_attr_of :ATTR();
|
|||||||
sub attr {
|
sub attr {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $class = ref $self;
|
my $class = ref $self;
|
||||||
|
|
||||||
|
# disable strictness - in perl 5.10 %{ "$foo\::_bar" } triggers a
|
||||||
|
# symbolic reference error with strictness enabled
|
||||||
|
no strict qw(refs);
|
||||||
die "$class has no attributes" if not defined %{ "$class\::_ATTR::"};
|
die "$class has no attributes" if not defined %{ "$class\::_ATTR::"};
|
||||||
if (@_) {
|
if (@_) {
|
||||||
# setter
|
# setter
|
||||||
@@ -176,7 +180,7 @@ sub _factory {
|
|||||||
: die croak "cannot use $is_ref reference as value for $name - $type required"
|
: die croak "cannot use $is_ref reference as value for $name - $type required"
|
||||||
|
|
||||||
# not $is_ref
|
# not $is_ref
|
||||||
: $type->new({ value => $_[1] });
|
: defined $_[1] ? $type->new({ value => $_[1] }) : () ;
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -223,7 +227,7 @@ sub _factory {
|
|||||||
: $_ =~ m{ \A # beginning of string
|
: $_ =~ m{ \A # beginning of string
|
||||||
xmlns # xmlns
|
xmlns # xmlns
|
||||||
}xms # get_elements is inlined for performance.
|
}xms # get_elements is inlined for performance.
|
||||||
? do {}
|
? ()
|
||||||
: do { use Data::Dumper;
|
: do { use Data::Dumper;
|
||||||
croak "unknown field $_ in $class. Valid fields are:\n"
|
croak "unknown field $_ in $class. Valid fields are:\n"
|
||||||
. join(', ', @{ $ELEMENTS_FROM{ $class } }) . "\n"
|
. join(', ', @{ $ELEMENTS_FROM{ $class } }) . "\n"
|
||||||
@@ -455,9 +459,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 497 $
|
$Rev: 524 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: ComplexType.pm 497 2008-01-19 12:57:57Z kutterma $
|
$Id: ComplexType.pm 524 2008-02-10 23:24:43Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -175,9 +175,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 497 $
|
$Rev: 498 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Element.pm 497 2008-01-19 12:57:57Z kutterma $
|
$Id: Element.pm 498 2008-01-20 22:47:18Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/Element.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/Element.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
--- Manual.pod-orig 2007-12-04 00:45:33.000000000 -0500
|
|
||||||
+++ Manual.pod 2007-12-04 00:53:12.000000000 -0500
|
|
||||||
@@ -37,7 +37,7 @@
|
|
||||||
objects based on SOAP::WSDL's XML schema implementation.
|
|
||||||
|
|
||||||
To access the object's properties use get_NAME / set_NAME getter/setter
|
|
||||||
-methods whith NAME corresponding to the XML tag name / the hash structure as
|
|
||||||
+methods with NAME corresponding to the XML tag name / the hash structure as
|
|
||||||
showed in the generated pod.
|
|
||||||
|
|
||||||
=item * Run script
|
|
||||||
@@ -91,7 +91,7 @@
|
|
||||||
|
|
||||||
There should be a bunch of classes for types (in the MyTypes:: namespace by
|
|
||||||
default), elements (in MyElements::), and at least one typemap (in
|
|
||||||
-MyTypemaps::) and one ore more interface classes (in MyInterfaces::).
|
|
||||||
+MyTypemaps::) and one or more interface classes (in MyInterfaces::).
|
|
||||||
|
|
||||||
If you don't already know the details of the web service you're going to
|
|
||||||
instrument, it's now time to read the perldoc of the generated interface
|
|
||||||
@@ -111,7 +111,7 @@
|
|
||||||
print $result;
|
|
||||||
|
|
||||||
The above handling of errors ("die $result if not $result") may look a bit
|
|
||||||
-strange - it is due to the nature of
|
|
||||||
+strange - it is due to the nature of the
|
|
||||||
L<SOAP::WSDL::SOAP::Typelib::Fault11|SOAP::WSDL::SOAP::Typelib::Fault11>
|
|
||||||
objects SOAP::WSDL uses for signalling failure.
|
|
||||||
|
|
||||||
@@ -144,12 +144,12 @@
|
|
||||||
only implement a few by hand. These (precious) few classes may get lost in
|
|
||||||
the mass of (cheap) generated ones. Just imagine one of your co-workers (or
|
|
||||||
even yourself) deleting the whole bunch and re-generating everything - oops
|
|
||||||
-- almost everything. You got the point.
|
|
||||||
+- almost everything. You get the point.
|
|
||||||
|
|
||||||
For simplicity, you probably just want to use builtin types wherever possible
|
|
||||||
- you are probably not interested in whether a fault detail's error code is
|
|
||||||
presented to you as a simpleType ranging from 1 to 10 (which you have to
|
|
||||||
-write) or as a int (which is a builtin type ready to use).
|
|
||||||
+write) or as an int (which is a builtin type ready to use).
|
|
||||||
|
|
||||||
Using builtin types for simpleType definitions may greatly reduce the number
|
|
||||||
of additional classes you need to implement.
|
|
||||||
@@ -4,23 +4,26 @@ use warnings;
|
|||||||
use diagnostics;
|
use diagnostics;
|
||||||
use Test::More tests => 17; # qw/no_plan/; # TODO: change to tests => N;
|
use Test::More tests => 17; # qw/no_plan/; # TODO: change to tests => N;
|
||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
|
use File::Spec;
|
||||||
|
use File::Basename qw(dirname);
|
||||||
eval {
|
eval {
|
||||||
require Test::XML;
|
require Test::XML;
|
||||||
import Test::XML
|
import Test::XML
|
||||||
};
|
};
|
||||||
|
|
||||||
use Cwd;
|
|
||||||
|
|
||||||
my $path = cwd;
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
$path =~s|\/t\/?$||; # allow running from t/ and above (Build test)
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my $soap = SOAP::WSDL->new(
|
my $soap;
|
||||||
wsdl => 'file:///' . $path .'/t/acceptance/wsdl/006_sax_client.wsdl',
|
$soap = SOAP::WSDL->new(
|
||||||
outputxml => 1, # required, if not set ::SOM serializer will be loaded on
|
wsdl => 'file:///' . $url .'/acceptance/wsdl/006_sax_client.wsdl',
|
||||||
# call
|
outputxml => 1, # required, if not set ::SOM serializer will be loaded
|
||||||
)->wsdlinit();
|
)->wsdlinit();
|
||||||
|
|
||||||
$soap->servicename('MessageGateway');
|
$soap->servicename('MessageGateway');
|
||||||
@@ -96,7 +99,7 @@ SKIP: {
|
|||||||
'MMessageContent' => 'TestContent for Message' ,
|
'MMessageContent' => 'TestContent for Message' ,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
ok $result->isa('SOAP::SOM');
|
ok $result->isa('SOAP::SOM');
|
||||||
is $result->result()->{MMessageContent}, 'TestContent for Message';
|
is $result->result()->{MMessageContent}, 'TestContent for Message';
|
||||||
is $result->result()->{MRecipientURI}, 'mailto:test@example.com';
|
is $result->result()->{MRecipientURI}, 'mailto:test@example.com';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/perl
|
#!/usr/bin/perl
|
||||||
use Test::More tests => 9;
|
use Test::More tests => 10;
|
||||||
use strict;
|
use strict;
|
||||||
use lib 'lib/';
|
use lib 'lib/';
|
||||||
use lib '../lib/';
|
use lib '../lib/';
|
||||||
@@ -48,16 +48,23 @@ ok $result->isa('SOAP::WSDL::SOAP::Typelib::Fault11'),
|
|||||||
'return fault on impossible call';
|
'return fault on impossible call';
|
||||||
ok ! $result, 'fault is false in boolean context';
|
ok ! $result, 'fault is false in boolean context';
|
||||||
|
|
||||||
package FakeResolver;
|
|
||||||
|
|
||||||
sub get_class {
|
# $soap->no_dispatch(1);
|
||||||
my %class_list = (
|
ok ! $soap->call('Test'), 'second call';
|
||||||
|
|
||||||
|
package FakeResolver;
|
||||||
|
my %class_list = (
|
||||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyType',
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyType',
|
||||||
);
|
);
|
||||||
|
sub get_class {
|
||||||
|
|
||||||
return $class_list{ $_[1] };
|
return $class_list{ $_[1] };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return \%class_list;
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 12;
|
use Test::More tests => 12;
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
use File::Basename;
|
use File::Basename qw(dirname);
|
||||||
use_ok qw(SOAP::WSDL);
|
use_ok qw(SOAP::WSDL);
|
||||||
|
|
||||||
my $path = File::Spec->rel2abs(dirname( __FILE__ ) );
|
my $path = File::Spec->rel2abs(dirname( __FILE__ ) );
|
||||||
|
$path =~s{\\}{/}xmsg; # fix for windows
|
||||||
my $soap = SOAP::WSDL->new();
|
my $soap = SOAP::WSDL->new();
|
||||||
$soap->wsdl("file://$path/WSDL_NOT_FOUND.wsdl");
|
$soap->wsdl("file://$path/WSDL_NOT_FOUND.wsdl");
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use Test::More tests => 7;
|
use Test::More tests => 10;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use diagnostics;
|
use diagnostics;
|
||||||
@@ -28,4 +28,13 @@ ok( $soap->wsdlinit(), 'parsed WSDL' );
|
|||||||
|
|
||||||
ok( $soap->wsdlinit( servicename => 'testService', portname => 'testPort'), 'parsed WSDL' );
|
ok( $soap->wsdlinit( servicename => 'testService', portname => 'testPort'), 'parsed WSDL' );
|
||||||
|
|
||||||
ok( ($soap->portname() eq 'testPort' ), 'found port passed to wsdlinit');
|
ok( ($soap->portname() eq 'testPort' ), 'found port passed to wsdlinit');
|
||||||
|
|
||||||
|
ok( $soap = SOAP::WSDL->new(
|
||||||
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/02_port.wsdl'
|
||||||
|
), 'Instantiated object' );
|
||||||
|
|
||||||
|
ok( $soap->wsdlinit() );
|
||||||
|
$soap->outputxml(1);
|
||||||
|
eval { $soap->call('test') };
|
||||||
|
like $@, qr{type \s tns:testSimpleType1 \s , \s urn:simpleType \s not \s found}xms;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use Test::More tests => 8;
|
use Test::More tests => 9;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
@@ -28,7 +28,11 @@ ok( $soap = SOAP::WSDL->new(
|
|||||||
), 'Instantiated object' );
|
), 'Instantiated object' );
|
||||||
|
|
||||||
#3
|
#3
|
||||||
$soap->readable(1);
|
SKIP: {
|
||||||
|
skip 'Cannot test warning without Test::Warn', 1 if not (eval "require Test::Warn");
|
||||||
|
Test::Warn::warning_like( sub { $soap->readable(1) },
|
||||||
|
qr{\A 'readable' \s has \s no \s effect \s any \s more}xms);
|
||||||
|
}
|
||||||
$soap->outputxml(1);
|
$soap->outputxml(1);
|
||||||
|
|
||||||
ok( $soap->wsdlinit(
|
ok( $soap->wsdlinit(
|
||||||
@@ -36,15 +40,15 @@ ok( $soap->wsdlinit(
|
|||||||
), 'parsed WSDL' );
|
), 'parsed WSDL' );
|
||||||
$soap->no_dispatch(1);
|
$soap->no_dispatch(1);
|
||||||
|
|
||||||
ok ($xml = $soap->call('test',
|
ok ($xml = $soap->call('test',
|
||||||
testElement1 => 'Test'
|
testElement1 => 'Test'
|
||||||
), 'Serialized (simple) element' );
|
), 'Serialized (simple) element' );
|
||||||
|
|
||||||
ok ($xml = $soap->call('testRef',
|
ok ($xml = $soap->call('testRef',
|
||||||
testElementRef => 'Test'
|
testElementRef => 'Test'
|
||||||
), 'Serialized (simple) element' );
|
), 'Serialized (simple) element' );
|
||||||
|
|
||||||
like $xml
|
like $xml
|
||||||
, qr{<testElementRef\s\sxmlns="urn:Test">Test</testElementRef></SOAP-ENV:Body></SOAP-ENV:Envelope>}
|
, qr{<testElementRef\s\sxmlns="urn:Test">Test</testElementRef></SOAP-ENV:Body></SOAP-ENV:Envelope>}
|
||||||
, 'element ref serialization result'
|
, 'element ref serialization result'
|
||||||
;
|
;
|
||||||
@@ -52,10 +56,10 @@ like $xml
|
|||||||
TODO: {
|
TODO: {
|
||||||
local $TODO="implement min/maxOccurs checks";
|
local $TODO="implement min/maxOccurs checks";
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
$xml = $soap->call('test',
|
$xml = $soap->call('test',
|
||||||
testAll => [ 'Test 2', 'Test 3' ]
|
testAll => [ 'Test 2', 'Test 3' ]
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
ok( ($@ =~m/illegal\snumber\sof\selements/),
|
ok( ($@ =~m/illegal\snumber\sof\selements/),
|
||||||
@@ -63,7 +67,7 @@ TODO: {
|
|||||||
);
|
);
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
$xml = $soap->call('test', testAll => undef );
|
$xml = $soap->call('test', testAll => undef );
|
||||||
};
|
};
|
||||||
ok($@, 'Died on illegal number of elements (not enough)');
|
ok($@, 'Died on illegal number of elements (not enough)');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 4; #qw(no_plan);
|
use Test::More tests => 8; #qw(no_plan);
|
||||||
|
|
||||||
use_ok qw(SOAP::WSDL::Client);
|
use_ok qw(SOAP::WSDL::Client);
|
||||||
|
|
||||||
@@ -10,4 +10,28 @@ ok $client = SOAP::WSDL::Client->new({
|
|||||||
proxy => 'http://localhost',
|
proxy => 'http://localhost',
|
||||||
});
|
});
|
||||||
|
|
||||||
is $client->get_endpoint(), 'http://localhost';
|
is $client->get_endpoint(), 'http://localhost';
|
||||||
|
|
||||||
|
$client->no_dispatch(1);
|
||||||
|
$client->set_serializer('main');
|
||||||
|
my $serialize = $client->call({
|
||||||
|
operation => 'testMethod'
|
||||||
|
}, { foo => 'bar'}, { bar => 'baz'});
|
||||||
|
is $serialize->{ body }->{ foo }, 'bar';
|
||||||
|
is $serialize->{ header }->{ bar }, 'baz';
|
||||||
|
|
||||||
|
# Old calling style compatibility test - foo => bar is body...
|
||||||
|
$serialize = $client->call({
|
||||||
|
operation => 'testMethod'
|
||||||
|
}, foo => 'bar');
|
||||||
|
is $serialize->{ body }->{ foo }, 'bar';
|
||||||
|
|
||||||
|
# Old calling style compatibility test - foo => bar is body...
|
||||||
|
$serialize = $client->call('testMethod', foo => 'bar');
|
||||||
|
is $serialize->{ body }->{ foo }, 'bar';
|
||||||
|
|
||||||
|
|
||||||
|
sub serialize {
|
||||||
|
my $self = shift;
|
||||||
|
return shift;
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,11 +4,9 @@ use Class::Std::Fast;
|
|||||||
package main;
|
package main;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 9;
|
use Test::More tests => 21;
|
||||||
use_ok qw(SOAP::WSDL::Client::Base);
|
use_ok qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
my $client = SOAP::WSDL::Client::Base->new();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
no warnings qw(redefine once);
|
no warnings qw(redefine once);
|
||||||
*SOAP::WSDL::Client::call = sub { is $_[1]->{ operation }, 'sayHello', 'Called method';
|
*SOAP::WSDL::Client::call = sub { is $_[1]->{ operation }, 'sayHello', 'Called method';
|
||||||
@@ -16,35 +14,41 @@ my $client = SOAP::WSDL::Client::Base->new();
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $client = SOAP::WSDL::Client::Base->new();
|
||||||
|
|
||||||
my @result = $client->call({
|
my @result = $client->call({
|
||||||
operation => 'sayHello',
|
operation => 'sayHello',
|
||||||
soap_action => 'urn:HelloWorld#sayHello',
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
|
|
||||||
'use' => 'literal',
|
'use' => 'literal',
|
||||||
namespace => '',
|
namespace => '',
|
||||||
encodingStyle => '',
|
encodingStyle => '',
|
||||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
)],
|
||||||
},
|
},
|
||||||
header => {
|
header => {
|
||||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
|
||||||
|
)],
|
||||||
},
|
},
|
||||||
headerfault => {
|
headerfault => {
|
||||||
|
|
||||||
}
|
}
|
||||||
}, { value => 'Body' }, { value => 'Header' });
|
}, { value => 'Body' }, { value => 'Header' });
|
||||||
|
|
||||||
is $result[0], 'Body';
|
is $result[0]->[0], 'Body';
|
||||||
is $result[1], 'Header';
|
is $result[1], 'Header';
|
||||||
isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
isa_ok $result[0]->[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
|
|
||||||
@result = $client->call({
|
@result = $client->call({
|
||||||
operation => 'sayHello',
|
operation => 'sayHello',
|
||||||
soap_action => 'urn:HelloWorld#sayHello',
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
|
|
||||||
'use' => 'literal',
|
'use' => 'literal',
|
||||||
namespace => '',
|
namespace => '',
|
||||||
encodingStyle => '',
|
encodingStyle => '',
|
||||||
@@ -54,9 +58,9 @@ isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
|||||||
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||||
},
|
},
|
||||||
headerfault => {
|
headerfault => {
|
||||||
|
|
||||||
}
|
}
|
||||||
}, SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Body2' }),
|
}, SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Body2' }),
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Header2' })
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Header2' })
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -64,3 +68,97 @@ is $result[0], 'Body2';
|
|||||||
is $result[1], 'Header2';
|
is $result[1], 'Header2';
|
||||||
isa_ok $result[1], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
isa_ok $result[1], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
|
|
||||||
|
# Call with more body parts than parameters. Body parts are empty
|
||||||
|
@result = $client->call({
|
||||||
|
operation => 'sayHello',
|
||||||
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
}, [],
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'Header2' })
|
||||||
|
);
|
||||||
|
|
||||||
|
isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
|
is $result[0], undef;
|
||||||
|
is $result[1], 'Header2';
|
||||||
|
isa_ok $result[1], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
|
|
||||||
|
# Call with more body parts than parameters. Body parts are empty
|
||||||
|
# No header
|
||||||
|
@result = $client->call({
|
||||||
|
operation => 'sayHello',
|
||||||
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
|
is $result[0], undef;
|
||||||
|
|
||||||
|
eval { $client->call({
|
||||||
|
operation => 'sayHello',
|
||||||
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( SomeStupidClassYouProbablyDontHaveOnYourSystem )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
like $@, qr{ Can't \s locate }xms;
|
||||||
|
|
||||||
|
isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
|
is $result[0], undef;
|
||||||
|
|
||||||
|
eval { $client->call({
|
||||||
|
operation => 'sayHello',
|
||||||
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( SOAP::WSDL::XSD::Typelib::Builtin::string )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
parts => [qw( SomeOtherStupidClassYouProbablyDontHaveOnYourSystem )],
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
};
|
||||||
|
# die $@;
|
||||||
|
like $@, qr{ Can't \s locate }xms;
|
||||||
32
t/SOAP/WSDL/Definitions.t
Normal file
32
t/SOAP/WSDL/Definitions.t
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More tests => 4;
|
||||||
|
|
||||||
|
use SOAP::WSDL::PortType;
|
||||||
|
use_ok qw(SOAP::WSDL::Definitions);
|
||||||
|
|
||||||
|
my $obj = SOAP::WSDL::Definitions->new({
|
||||||
|
portType => [
|
||||||
|
SOAP::WSDL::PortType->new({
|
||||||
|
name => 'foo',
|
||||||
|
targetNamespace => 'bar',
|
||||||
|
}),
|
||||||
|
SOAP::WSDL::PortType->new({
|
||||||
|
name => 'foo',
|
||||||
|
targetNamespace => 'baz',
|
||||||
|
}),
|
||||||
|
SOAP::WSDL::PortType->new({
|
||||||
|
name => 'foobar',
|
||||||
|
targetNamespace => 'bar',
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
my $found= $obj->find_portType('bar', 'foobar');
|
||||||
|
is $found->get_name(), 'foobar', 'found PortType';
|
||||||
|
$found = $obj->find_portType('baz', 'foo');
|
||||||
|
is $found->get_name(), 'foo', 'found PortType';
|
||||||
|
|
||||||
|
$found = $obj->find_portType('baz', 'foobar');
|
||||||
|
is $found, undef, 'find_PortType returns undef on unknown PortType';
|
||||||
@@ -4,7 +4,7 @@ package TestResolver;
|
|||||||
sub get_typemap { {} };
|
sub get_typemap { {} };
|
||||||
|
|
||||||
package main;
|
package main;
|
||||||
use Test::More tests => 8;
|
use Test::More tests => 9;
|
||||||
|
|
||||||
use SOAP::WSDL::Deserializer::XSD;
|
use SOAP::WSDL::Deserializer::XSD;
|
||||||
|
|
||||||
@@ -24,4 +24,7 @@ is $fault->get_faultcode(), 'soap:Client';
|
|||||||
|
|
||||||
isa_ok $obj->deserialize('rubbeldiekatz'), 'SOAP::WSDL::SOAP::Typelib::Fault11';
|
isa_ok $obj->deserialize('rubbeldiekatz'), 'SOAP::WSDL::SOAP::Typelib::Fault11';
|
||||||
isa_ok $obj->deserialize('<zumsel></zumsel>'), 'SOAP::WSDL::SOAP::Typelib::Fault11';
|
isa_ok $obj->deserialize('<zumsel></zumsel>'), 'SOAP::WSDL::SOAP::Typelib::Fault11';
|
||||||
isa_ok $obj->deserialize('<Envelope xmlns="huchmampf"></Envelope>'), 'SOAP::WSDL::SOAP::Typelib::Fault11';
|
isa_ok $obj->deserialize('<Envelope xmlns="huchmampf"></Envelope>'), 'SOAP::WSDL::SOAP::Typelib::Fault11';
|
||||||
|
is $obj->deserialize('<SOAP-ENV:Envelope
|
||||||
|
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
|
<SOAP-ENV:Body ></SOAP-ENV:Body></SOAP-ENV:Envelope>'), undef, 'Deserialize empty envelope';
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 3;
|
use Test::More tests => 5;
|
||||||
use_ok qw(SOAP::WSDL::Expat::Base);
|
use_ok qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
my $parser = SOAP::WSDL::Expat::Base->new();
|
my $parser = SOAP::WSDL::Expat::Base->new();
|
||||||
@@ -9,4 +9,13 @@ eval { $parser->parse('Foobar')};
|
|||||||
ok $@;
|
ok $@;
|
||||||
|
|
||||||
eval { $parser->parsefile('Foobar')};
|
eval { $parser->parsefile('Foobar')};
|
||||||
ok $@;
|
ok $@;
|
||||||
|
|
||||||
|
|
||||||
|
$parser = SOAP::WSDL::Expat::Base->new({
|
||||||
|
user_agent => 'foo',
|
||||||
|
});
|
||||||
|
|
||||||
|
is $parser->get_user_agent(), 'foo';
|
||||||
|
$parser->set_user_agent('bar');
|
||||||
|
is $parser->get_user_agent(), 'bar';
|
||||||
|
|||||||
@@ -36,20 +36,20 @@ my $xml_attr = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-
|
|||||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
<SOAP-ENV:Body><MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2">
|
<SOAP-ENV:Body><MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2">
|
||||||
<test>Test</test>
|
<test>Test</test>
|
||||||
<test2 >Test2</test2>
|
<test2 > </test2>
|
||||||
</MyElementAttrs></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
</MyElementAttrs></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
|
|
||||||
$parser->parse($xml_attr);
|
$parser->parse($xml_attr);
|
||||||
|
|
||||||
is $parser->get_data(),
|
is $parser->get_data(),
|
||||||
q{<MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2"><test>Test</test><test2>Test2</test2></MyElementAttrs>},
|
q{<MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2"><test>Test</test></MyElementAttrs>},
|
||||||
'Content with attributes';
|
'Content with attributes';
|
||||||
|
|
||||||
my $xml_error = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
my $xml_error = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
<SOAP-ENV:Body><MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2">
|
<SOAP-ENV:Body><MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2">
|
||||||
<test>Test</test>
|
<test>Test</test>
|
||||||
<test2 >Test2</test2>
|
<test2 ></test2>
|
||||||
<foo>Bar</foo>
|
<foo>Bar</foo>
|
||||||
</MyElementAttrs></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
</MyElementAttrs></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 4; #qw(no_plan);
|
use Test::More tests => 10; #qw(no_plan);
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ use_ok qw( SOAP::WSDL::Expat::WSDLParser);
|
|||||||
|
|
||||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
||||||
|
|
||||||
my $definitions = $parser->parse_file(
|
my $definitions = $parser->parse_file(
|
||||||
"$path/../../../acceptance/wsdl/WSDLParser.wsdl"
|
"$path/../../../acceptance/wsdl/WSDLParser.wsdl"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -30,16 +30,27 @@ my $generator = SOAP::WSDL::Generator::Template::XSD->new({
|
|||||||
OUTPUT_PATH => "$path/testlib",
|
OUTPUT_PATH => "$path/testlib",
|
||||||
});
|
});
|
||||||
|
|
||||||
my $code = "";
|
#my $code = "";
|
||||||
$generator->set_output(\$code);
|
#$generator->set_output(\$code);
|
||||||
$generator->generate_typelib();
|
#$generator->generate_typelib();
|
||||||
{
|
#{
|
||||||
eval $code;
|
# eval $code;
|
||||||
ok !$@;
|
# ok !$@;
|
||||||
print $@ if $@;
|
# print $@ if $@;
|
||||||
}
|
#}
|
||||||
|
|
||||||
# print $code;
|
$definitions = $parser->parse_uri(
|
||||||
|
"file://$path/../../../acceptance/wsdl/WSDLParser-import.wsdl"
|
||||||
|
);
|
||||||
|
|
||||||
|
ok my $service = $definitions->first_service();
|
||||||
|
is $service->get_name(), 'Service1', 'wsdl:import service name';
|
||||||
|
is $definitions->first_binding()->get_name(), 'Service1Soap', 'wsdl:import binding name';
|
||||||
|
|
||||||
|
ok my $schema_from_ref = $definitions->first_types()->get_schema();
|
||||||
|
is @{ $schema_from_ref }, 2, 'got builtin and imported schema';
|
||||||
|
ok @{ $schema_from_ref->[1]->get_element } > 0;
|
||||||
|
is $schema_from_ref->[1]->get_element->[0]->get_name(), 'sayHello';
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 5;
|
use Test::More tests => 6;
|
||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
use SOAP::WSDL::Factory::Transport;
|
use SOAP::WSDL::Factory::Transport;
|
||||||
|
|
||||||
|
eval { SOAP::WSDL::Factory::Transport->get_transport('') };
|
||||||
|
like $@, qr{^no transport};
|
||||||
|
|
||||||
|
|
||||||
eval { SOAP::WSDL::Factory::Transport->get_transport('zumsl') };
|
eval { SOAP::WSDL::Factory::Transport->get_transport('zumsl') };
|
||||||
like $@, qr{^no transport};
|
like $@, qr{^no transport};
|
||||||
|
|
||||||
@@ -12,7 +16,7 @@ ok blessed $obj;
|
|||||||
|
|
||||||
SOAP::WSDL::Factory::Transport->register('zumsl', 'Hope_You_Have_No_Such_Package_Installed');
|
SOAP::WSDL::Factory::Transport->register('zumsl', 'Hope_You_Have_No_Such_Package_Installed');
|
||||||
|
|
||||||
eval { SOAP::WSDL::Factory::Transport->get_transport('zumsl') };
|
eval { SOAP::WSDL::Factory::Transport->get_transport('zumsl:foo') };
|
||||||
like $@, qr{^Cannot load};
|
like $@, qr{^Cannot load};
|
||||||
|
|
||||||
eval { SOAP::WSDL::Factory::Transport->register( \'zumsl', 'Foo') };
|
eval { SOAP::WSDL::Factory::Transport->register( \'zumsl', 'Foo') };
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ print $@ if $@;
|
|||||||
# print $output;
|
# print $output;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
my $tt = Template->new(
|
my $tt = Template->new(
|
||||||
DEBUG => 1,
|
DEBUG => 1,
|
||||||
EVAL_PERL => 1,
|
EVAL_PERL => 1,
|
||||||
RECURSION => 1,
|
RECURSION => 1,
|
||||||
@@ -53,7 +53,7 @@ my $tt = Template->new(
|
|||||||
|
|
||||||
foreach my $service (@{ $definitions->get_service }) {
|
foreach my $service (@{ $definitions->get_service }) {
|
||||||
my $output;
|
my $output;
|
||||||
$tt->process( 'Interface.tt', {
|
$tt->process( 'Interface.tt', {
|
||||||
definitions => $definitions,
|
definitions => $definitions,
|
||||||
service => $service,
|
service => $service,
|
||||||
interface_prefix => 'MyInterface',
|
interface_prefix => 'MyInterface',
|
||||||
@@ -62,8 +62,8 @@ foreach my $service (@{ $definitions->get_service }) {
|
|||||||
element_prefix => 'MyElement',
|
element_prefix => 'MyElement',
|
||||||
}, \$output);
|
}, \$output);
|
||||||
die $tt->error if $tt->error();
|
die $tt->error if $tt->error();
|
||||||
|
|
||||||
ok eval $output, 'eval output';
|
ok eval $output, 'eval output';
|
||||||
|
|
||||||
print $output;
|
print $output;
|
||||||
};
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
use Test::More tests => 38;
|
use Test::More tests => 41;
|
||||||
use File::Basename qw(dirname);
|
use File::Basename qw(dirname);
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
@@ -149,5 +149,12 @@ is $ct_east->get_testAtomicSimpleTypeElement2->get_value(), 23;
|
|||||||
isa_ok($ct_east->get_testAtomicSimpleTypeElement2,
|
isa_ok($ct_east->get_testAtomicSimpleTypeElement2,
|
||||||
'MyTypes::testComplexTypeElementAtomicSimpleType::_testAtomicSimpleTypeElement2');
|
'MyTypes::testComplexTypeElementAtomicSimpleType::_testAtomicSimpleTypeElement2');
|
||||||
|
|
||||||
|
ok eval { require MyElements::testElementCompletelyEmptyComplex; }
|
||||||
|
, 'load MyElements::testElementCompletelyEmptyComplex';
|
||||||
|
ok my $empty = MyElements::testElementCompletelyEmptyComplex->new();
|
||||||
|
|
||||||
|
is $empty->serialize_qualified(), '<testElementCompletelyEmptyComplex xmlns="urn:Test"/>'
|
||||||
|
, 'serialize empty';
|
||||||
|
|
||||||
|
|
||||||
rmtree "$path/testlib";
|
rmtree "$path/testlib";
|
||||||
|
|||||||
32
t/SOAP/WSDL/PortType.t
Normal file
32
t/SOAP/WSDL/PortType.t
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More tests => 4;
|
||||||
|
|
||||||
|
use SOAP::WSDL::Operation;
|
||||||
|
use_ok qw(SOAP::WSDL::PortType);
|
||||||
|
|
||||||
|
my $portType = SOAP::WSDL::PortType->new({
|
||||||
|
operation => [
|
||||||
|
SOAP::WSDL::Operation->new({
|
||||||
|
name => 'foo',
|
||||||
|
targetNamespace => 'bar',
|
||||||
|
}),
|
||||||
|
SOAP::WSDL::Operation->new({
|
||||||
|
name => 'foo',
|
||||||
|
targetNamespace => 'baz',
|
||||||
|
}),
|
||||||
|
SOAP::WSDL::Operation->new({
|
||||||
|
name => 'foobar',
|
||||||
|
targetNamespace => 'bar',
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
my $operation = $portType->find_operation('bar', 'foobar');
|
||||||
|
is $operation->get_name(), 'foobar', 'found operation';
|
||||||
|
$operation = $portType->find_operation('baz', 'foo');
|
||||||
|
is $operation->get_name(), 'foo', 'found operation';
|
||||||
|
|
||||||
|
$operation = $portType->find_operation('baz', 'foobar');
|
||||||
|
is $operation, undef, 'find_operation returns undef on unknown operation';
|
||||||
@@ -55,8 +55,13 @@ eval { $server->handle($request) };
|
|||||||
like $@, qr{\A Not \s implemented:}x, 'Not implemented fault caught';
|
like $@, qr{\A Not \s implemented:}x, 'Not implemented fault caught';
|
||||||
|
|
||||||
|
|
||||||
|
$server->set_action_map_ref({ Test => 'test'});
|
||||||
|
ok $server->handle($request);
|
||||||
|
|
||||||
$server->set_deserializer('MyDeserializer2');
|
$server->set_deserializer('MyDeserializer2');
|
||||||
eval { $server->handle(HTTP::Request->new()) };
|
eval { $server->handle(HTTP::Request->new()) };
|
||||||
like $@, qr{\A Error \s deserializing}x, 'Error deserializing caught';
|
like $@, qr{\A Error \s deserializing}x, 'Error deserializing caught';
|
||||||
|
|
||||||
|
sub test {
|
||||||
|
return;
|
||||||
|
}
|
||||||
@@ -11,7 +11,7 @@ use Test::More;
|
|||||||
eval "require IO::Scalar"
|
eval "require IO::Scalar"
|
||||||
or plan skip_all => 'IO::Scalar required for testing...';
|
or plan skip_all => 'IO::Scalar required for testing...';
|
||||||
|
|
||||||
plan tests => 8;
|
plan tests => 12;
|
||||||
|
|
||||||
use_ok(SOAP::WSDL::Server);
|
use_ok(SOAP::WSDL::Server);
|
||||||
use_ok(SOAP::WSDL::Server::CGI);
|
use_ok(SOAP::WSDL::Server::CGI);
|
||||||
@@ -30,51 +30,113 @@ $server->set_action_map_ref({
|
|||||||
my $output = q{};
|
my $output = q{};
|
||||||
my $fh = IO::Scalar->new(\$output);
|
my $fh = IO::Scalar->new(\$output);
|
||||||
my $stdout = *STDOUT;
|
my $stdout = *STDOUT;
|
||||||
|
my $stdin = *STDIN;
|
||||||
|
|
||||||
*STDOUT = $fh;
|
*STDOUT = $fh;
|
||||||
|
{
|
||||||
|
local %ENV;
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
like $output, qr{ \A Status: \s 411 \s Length \s Required}x;
|
||||||
|
$output = q{};
|
||||||
|
|
||||||
|
$ENV{'CONTENT_LENGTH'} = '0e0';
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
like $output, qr{ Error \s deserializing }xsm;
|
||||||
|
$output = q{};
|
||||||
|
|
||||||
|
$server->set_action_map_ref({
|
||||||
|
'foo' => 'bar',
|
||||||
|
});
|
||||||
|
$server->set_dispatch_to( 'HandlerClass' );
|
||||||
|
|
||||||
|
$server->handle();
|
||||||
|
like $output, qr{no \s element \s found}xms;
|
||||||
|
$output = q{};
|
||||||
|
|
||||||
|
$ENV{REQUEST_METHOD} = 'POST';
|
||||||
|
$ENV{HTTP_SOAPACTION} = 'test';
|
||||||
|
$server->handle();
|
||||||
|
like $output, qr{no \s element \s found}xms;
|
||||||
|
$output = q{};
|
||||||
|
|
||||||
|
delete $ENV{HTTP_SOAPACTION};
|
||||||
|
|
||||||
|
$ENV{EXPECT} = 'Foo';
|
||||||
|
$ENV{HTTP_SOAPAction} = 'foo';
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
like $output, qr{no \s element \s found}xms;
|
||||||
|
$output = q{};
|
||||||
|
|
||||||
|
$ENV{EXPECT} = '100-Continue';
|
||||||
|
$ENV{HTTP_SOAPAction} = 'foo';
|
||||||
|
$server->handle();
|
||||||
|
like $output, qr{100 \s Continue}xms;
|
||||||
|
$output = q{};
|
||||||
|
|
||||||
|
delete $ENV{EXPECT};
|
||||||
|
|
||||||
|
my $input = 'Foobar';
|
||||||
|
my $ih = IO::Scalar->new(\$input);
|
||||||
|
$ih->seek(0);
|
||||||
|
*STDIN = $ih;
|
||||||
|
|
||||||
|
# my $buffer;
|
||||||
|
# read(*STDIN, $buffer, 6);
|
||||||
|
# die $buffer;
|
||||||
|
$ENV{HTTP_SOAPAction} = 'bar';
|
||||||
|
$ENV{CONTENT_LENGTH} = 6;
|
||||||
|
$server->handle();
|
||||||
|
like $output, qr{ Error \s deserializing \s message}xms;
|
||||||
|
$output = q{};
|
||||||
|
$ih->seek(0);
|
||||||
|
|
||||||
$server->handle();
|
$input = q{<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
|
<SOAP-ENV:Body></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
like $output, qr{ \A Status: \s 411 \s Length \s Required}x;
|
$ENV{HTTP_SOAPAction} = 'bar';
|
||||||
$output = q{};
|
$ENV{CONTENT_LENGTH} = length $input;
|
||||||
|
$server->handle();
|
||||||
$ENV{'CONTENT_LENGTH'} = '0e0';
|
# die $output;
|
||||||
$server->handle();
|
like $output, qr{ Not \s found:}xms;
|
||||||
|
$output = q{};
|
||||||
like $output, qr{ Error \s deserializing }xsm;
|
$ih->seek(0);
|
||||||
$output = q{};
|
|
||||||
|
|
||||||
$server->set_action_map_ref({
|
|
||||||
'foo' => 'bar',
|
|
||||||
});
|
|
||||||
$server->set_dispatch_to( 'HandlerClass' );
|
|
||||||
|
|
||||||
$server->handle();
|
|
||||||
like $output, qr{no \s element \s found}xms;
|
|
||||||
$output = q{};
|
|
||||||
|
|
||||||
$ENV{REQUEST_METHOD} = 'POST';
|
|
||||||
$ENV{HTTP_SOAPACTION} = 'test';
|
|
||||||
$server->handle();
|
|
||||||
like $output, qr{no \s element \s found}xms;
|
|
||||||
$output = q{};
|
|
||||||
|
|
||||||
delete $ENV{HTTP_SOAPACTION};
|
|
||||||
|
|
||||||
$ENV{EXPECT} = 'Foo';
|
|
||||||
$ENV{HTTP_SOAPAction} = 'foo';
|
|
||||||
$server->handle();
|
|
||||||
|
|
||||||
like $output, qr{no \s element \s found}xms;
|
|
||||||
$output = q{};
|
|
||||||
|
|
||||||
$ENV{EXPECT} = '100-Continue';
|
|
||||||
$ENV{HTTP_SOAPAction} = 'foo';
|
|
||||||
$server->handle();
|
|
||||||
like $output, qr{100 \s Continue}xms;
|
|
||||||
$output = q{};
|
|
||||||
|
|
||||||
|
|
||||||
|
$server->set_dispatch_to( 'HandlerClass' );
|
||||||
|
$server->set_action_map_ref({
|
||||||
|
'bar' => 'bar',
|
||||||
|
});
|
||||||
|
$input = q{<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
|
<SOAP-ENV:Body></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
|
$ENV{HTTP_SOAPAction} = q{"bar"};
|
||||||
|
$ENV{CONTENT_LENGTH} = length $input;
|
||||||
|
$server->handle();
|
||||||
|
use Data::Dumper;
|
||||||
|
like $output, qr{ \A Status: \s 200 \s OK}xms;
|
||||||
|
$output = q{};
|
||||||
|
$ih->seek(0);
|
||||||
|
|
||||||
|
|
||||||
|
$server->set_dispatch_to( 'HandlerClass' );
|
||||||
|
$server->set_action_map_ref({
|
||||||
|
'bar' => 'bar',
|
||||||
|
});
|
||||||
|
$input = q{<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||||
|
<SOAP-ENV:Body></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
|
$ENV{SERVER_SOFTWARE} ='IIS Foobar';
|
||||||
|
$ENV{HTTP_SOAPAction} = q{"bar"};
|
||||||
|
$ENV{CONTENT_LENGTH} = length $input;
|
||||||
|
$server->handle();
|
||||||
|
use Data::Dumper;
|
||||||
|
like $output, qr{ \A HTTP/1.0 \s 200 \s OK}xms;
|
||||||
|
$output = q{};
|
||||||
|
$ih->seek(0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# restore handles
|
||||||
*STDOUT = $stdout;
|
*STDOUT = $stdout;
|
||||||
|
*STDIN = $stdin;
|
||||||
# print $output;
|
# print $output;
|
||||||
40
t/SOAP/WSDL/XSD/Attribute.t
Normal file
40
t/SOAP/WSDL/XSD/Attribute.t
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More tests => 2; #qw(no_plan);
|
||||||
|
|
||||||
|
use_ok qw(SOAP::WSDL::XSD::Attribute);
|
||||||
|
|
||||||
|
use SOAP::WSDL::Expat::WSDLParser;
|
||||||
|
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
||||||
|
|
||||||
|
my $xml = q{<s:schema elementFormDefault="qualified"
|
||||||
|
targetNamespace="urn:HelloWorld" xmlns:s="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<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" nillable="1" />
|
||||||
|
</s:sequence>
|
||||||
|
<s:attribute name="testAttr" type="s:string" use="optional"></s:attribute>
|
||||||
|
</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:schema>
|
||||||
|
};
|
||||||
|
|
||||||
|
my $schema = $parser->parse($xml);
|
||||||
|
|
||||||
|
is $schema->find_element('urn:HelloWorld', 'sayHello')
|
||||||
|
->first_complexType()
|
||||||
|
->first_attribute()->get_name(),
|
||||||
|
'testAttr', 'found attribute';
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package Foo;
|
package Foo;
|
||||||
sub serialize {
|
sub serialize {
|
||||||
return "serialized $_[1] $_[2]";
|
return "serialized $_[1] $_[2]" . join ' ', @{$_[3]->{ attributes } || [] } if $_[3];
|
||||||
}
|
}
|
||||||
package main;
|
package main;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Test::More tests => 12;
|
use Test::More tests => 16;
|
||||||
|
|
||||||
use_ok qw(SOAP::WSDL::XSD::Element);
|
use_ok qw(SOAP::WSDL::XSD::Element);
|
||||||
|
|
||||||
@@ -16,6 +16,9 @@ is $element->first_simpleType(), undef;
|
|||||||
$element->set_simpleType('Foo');
|
$element->set_simpleType('Foo');
|
||||||
is $element->first_simpleType(), 'Foo';
|
is $element->first_simpleType(), 'Foo';
|
||||||
|
|
||||||
|
is $element->serialize('Foobar', 'Bar', { namespace => {} } ), 'serialized Foobar Bar';
|
||||||
|
is $element->serialize('Foobar', undef, { namespace => {} } ), 'serialized Foobar ';
|
||||||
|
|
||||||
$element->set_simpleType( [ 'Foo', 'Bar' ]);
|
$element->set_simpleType( [ 'Foo', 'Bar' ]);
|
||||||
is $element->first_simpleType(), 'Foo';
|
is $element->first_simpleType(), 'Foo';
|
||||||
|
|
||||||
@@ -30,6 +33,13 @@ is $element->first_complexType(), 'Foo';
|
|||||||
$element->set_default('Foo');
|
$element->set_default('Foo');
|
||||||
is $element->serialize('Foobar', undef, { namespace => {} } ), 'serialized Foobar Foo';
|
is $element->serialize('Foobar', undef, { namespace => {} } ), 'serialized Foobar Foo';
|
||||||
|
|
||||||
|
$element->set_targetNamespace('urn:foobar');
|
||||||
|
is $element->serialize('Foobar', undef, { namespace => {}, qualify => 1 } ), 'serialized Foobar Foo xmlns="urn:foobar"';
|
||||||
|
|
||||||
|
$element->set_targetNamespace('urn:foobar');
|
||||||
|
is $element->serialize('Foobar', 'Bar', { namespace => {}, qualify => 1 } ), 'serialized Foobar Bar xmlns="urn:foobar"';
|
||||||
|
|
||||||
|
|
||||||
$element->set_name('Bar');
|
$element->set_name('Bar');
|
||||||
is $element->serialize(undef, undef, { namespace => {} } ), 'serialized Bar Foo';
|
is $element->serialize(undef, undef, { namespace => {} } ), 'serialized Bar Foo';
|
||||||
|
|
||||||
|
|||||||
32
t/SOAP/WSDL/XSD/Schema.t
Normal file
32
t/SOAP/WSDL/XSD/Schema.t
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Test::More tests => 4;
|
||||||
|
|
||||||
|
use SOAP::WSDL::XSD::Element;
|
||||||
|
use_ok qw(SOAP::WSDL::XSD::Schema);
|
||||||
|
|
||||||
|
my $obj = SOAP::WSDL::XSD::Schema->new({
|
||||||
|
element => [
|
||||||
|
SOAP::WSDL::XSD::Element->new({
|
||||||
|
name => 'foo',
|
||||||
|
targetNamespace => 'bar',
|
||||||
|
}),
|
||||||
|
SOAP::WSDL::XSD::Element->new({
|
||||||
|
name => 'foo',
|
||||||
|
targetNamespace => 'baz',
|
||||||
|
}),
|
||||||
|
SOAP::WSDL::XSD::Element->new({
|
||||||
|
name => 'foobar',
|
||||||
|
targetNamespace => 'bar',
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
my $found= $obj->find_element('bar', 'foobar');
|
||||||
|
is $found->get_name(), 'foobar', 'found Element';
|
||||||
|
$found = $obj->find_element('baz', 'foo');
|
||||||
|
is $found->get_name(), 'foo', 'found Element';
|
||||||
|
|
||||||
|
$found = $obj->find_element('baz', 'foobar');
|
||||||
|
is $found, undef, 'find_Element returns undef on unknown Element';
|
||||||
@@ -18,7 +18,7 @@ package MyType;
|
|||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
{
|
{
|
||||||
my %test_of :ATTR(:get<test>);
|
my %test_of :ATTR(:get<test>);
|
||||||
|
|
||||||
__PACKAGE__->_factory(
|
__PACKAGE__->_factory(
|
||||||
[ 'test' ],
|
[ 'test' ],
|
||||||
{ test => \%test_of, },
|
{ test => \%test_of, },
|
||||||
@@ -41,11 +41,11 @@ use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
|||||||
my %test2_of :ATTR(:get<test2>);
|
my %test2_of :ATTR(:get<test2>);
|
||||||
__PACKAGE__->_factory(
|
__PACKAGE__->_factory(
|
||||||
[ 'test', 'test2' ],
|
[ 'test', 'test2' ],
|
||||||
{
|
{
|
||||||
test => \%test_of,
|
test => \%test_of,
|
||||||
test2 => \%test2_of,
|
test2 => \%test2_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
test => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
test2 => 'MyAttribute',
|
test2 => 'MyAttribute',
|
||||||
}
|
}
|
||||||
@@ -68,21 +68,18 @@ __PACKAGE__->_factory(
|
|||||||
);
|
);
|
||||||
|
|
||||||
package main;
|
package main;
|
||||||
use Test::More tests => 106;
|
use Test::More tests => 109;
|
||||||
use Storable;
|
use Storable;
|
||||||
|
|
||||||
my $have_warn = eval { require Test::Warn; import Test::Warn; 1; };
|
my $have_warn = eval { require Test::Warn; import Test::Warn; 1; };
|
||||||
|
|
||||||
my $obj;
|
my $obj;
|
||||||
|
|
||||||
$obj = MyEmptyType->new();
|
for my $class (qw{MyEmptyType MyEmptyType2}) {
|
||||||
is $obj->serialize, '';
|
$obj = $class->new();
|
||||||
is $obj->serialize({ name => 'test'}), '<test/>';
|
is $obj->serialize, '', "$class object serializes to q{}";
|
||||||
|
is $obj->serialize({ name => 'test'}), '<test/>', "$class object serializes to <test/> with name=test";
|
||||||
$obj = MyEmptyType2->new();
|
}
|
||||||
is $obj->serialize, '';
|
|
||||||
is $obj->serialize({ name => 'test'}), '<test/>';
|
|
||||||
|
|
||||||
|
|
||||||
$obj = MyType->new({});
|
$obj = MyType->new({});
|
||||||
isa_ok $obj, 'MyType';
|
isa_ok $obj, 'MyType';
|
||||||
@@ -101,16 +98,17 @@ isa_ok $obj, 'MyType';
|
|||||||
isa_ok $obj->get_test, 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
isa_ok $obj->get_test, 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
is $obj->get_test, 'Test1', 'element content';
|
is $obj->get_test, 'Test1', 'element content';
|
||||||
|
|
||||||
$obj = MyType->new({
|
$obj = MyType->new({
|
||||||
test => SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
test => SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Test2'
|
value => 'Test2'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
isa_ok $obj, 'MyType';
|
isa_ok $obj, 'MyType';
|
||||||
isa_ok $obj->get_test, 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
isa_ok $obj->get_test, 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||||
is $obj->get_test, 'Test2', 'element content';
|
is $obj->get_test, 'Test2', 'element content';
|
||||||
|
|
||||||
$obj = MyType->new({
|
$obj = MyType->new({
|
||||||
test => { value => 'Test2' } # just a trick - pass it unaltered to new...
|
test => { value => 'Test2' } # just a trick - pass it unaltered to new...
|
||||||
});
|
});
|
||||||
isa_ok $obj, 'MyType';
|
isa_ok $obj, 'MyType';
|
||||||
@@ -120,17 +118,18 @@ is $obj->get_test, 'Test2', 'element content';
|
|||||||
$hash_of_ref = $obj->as_hash_ref();
|
$hash_of_ref = $obj->as_hash_ref();
|
||||||
is $hash_of_ref->{ test }, 'Test2';
|
is $hash_of_ref->{ test }, 'Test2';
|
||||||
|
|
||||||
$obj = MyType->new({
|
$obj = MyType->new({
|
||||||
test => [
|
test => [
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Test'
|
value => 'Test'
|
||||||
}),
|
}),
|
||||||
|
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Test2'
|
value => 'Test2'
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
isa_ok $obj, 'MyType';
|
isa_ok $obj, 'MyType';
|
||||||
isa_ok $obj->get_test, 'ARRAY';
|
isa_ok $obj->get_test, 'ARRAY';
|
||||||
is $obj->get_test()->[0], 'Test', 'element content (list content [0])';
|
is $obj->get_test()->[0], 'Test', 'element content (list content [0])';
|
||||||
@@ -154,24 +153,21 @@ is $nested->get_test->[0], $obj;
|
|||||||
$nested = MyType2->new({
|
$nested = MyType2->new({
|
||||||
test => {
|
test => {
|
||||||
test => [
|
test => [
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Test'
|
value => 'Test'
|
||||||
}),
|
}),
|
||||||
|
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Test2'
|
value => 'Test2'
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$hash_of_ref = $nested->as_hash_ref();
|
$hash_of_ref = $nested->as_hash_ref();
|
||||||
is $hash_of_ref->{ test }->{ test }->[1], 'Test2';
|
is $hash_of_ref->{ test }->{ test }->[1], 'Test2';
|
||||||
|
|
||||||
|
|
||||||
# isnt $nested->get_test->[0], $obj, 'element identity';
|
|
||||||
|
|
||||||
$obj = MyType->new();
|
$obj = MyType->new();
|
||||||
isa_ok $obj, 'MyType';
|
isa_ok $obj, 'MyType';
|
||||||
is $obj->get_test, undef, 'undefined element content';
|
is $obj->get_test, undef, 'undefined element content';
|
||||||
@@ -197,6 +193,11 @@ for my $count (1..5) {
|
|||||||
$obj->set_test();
|
$obj->set_test();
|
||||||
is $obj->get_test, (), 'removed element content';
|
is $obj->get_test, (), 'removed element content';
|
||||||
|
|
||||||
|
$obj = MyEmptyType->new();
|
||||||
|
eval {
|
||||||
|
isa_ok $obj->attr() , 'SOAP::WSDL::XSD::Typelib::AttributeSet';
|
||||||
|
};
|
||||||
|
like $@, qr{\s has \s no \s attributes}x;
|
||||||
|
|
||||||
$obj = MyElement->new();
|
$obj = MyElement->new();
|
||||||
isa_ok $obj->attr() , 'SOAP::WSDL::XSD::Typelib::AttributeSet';
|
isa_ok $obj->attr() , 'SOAP::WSDL::XSD::Typelib::AttributeSet';
|
||||||
@@ -212,7 +213,7 @@ is $obj->serialize(),
|
|||||||
'Serialization with attributes';
|
'Serialization with attributes';
|
||||||
|
|
||||||
$obj->attr()->set_test2('test');
|
$obj->attr()->set_test2('test');
|
||||||
is $obj->serialize(),
|
is $obj->serialize(),
|
||||||
q{<MyElement test="TestAttribute" test2="test"/>},
|
q{<MyElement test="TestAttribute" test2="test"/>},
|
||||||
'Serialization with attributes';
|
'Serialization with attributes';
|
||||||
|
|
||||||
@@ -227,7 +228,7 @@ is $obj->get_test, undef;
|
|||||||
eval { $foo = @{ $obj->get_test() } };
|
eval { $foo = @{ $obj->get_test() } };
|
||||||
if (! $@) {
|
if (! $@) {
|
||||||
is $foo, undef;
|
is $foo, undef;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
like $@ , qr{Can't \s use \s an \s undefined}x, 'get_ELEMENT still undef on ARRAYIFY';
|
like $@ , qr{Can't \s use \s an \s undefined}x, 'get_ELEMENT still undef on ARRAYIFY';
|
||||||
}
|
}
|
||||||
@@ -260,13 +261,18 @@ for my $count (1..5) {
|
|||||||
is $obj->get_test->[$index], "TestString$index";
|
is $obj->get_test->[$index], "TestString$index";
|
||||||
}
|
}
|
||||||
is $obj->serialize(), $serialized[$count -1];
|
is $obj->serialize(), $serialized[$count -1];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $clone = Storable::thaw( Storable::freeze( $obj ));
|
||||||
|
is $clone->get_test()->[0], 'TestString0';
|
||||||
|
|
||||||
|
## failure tests
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
$obj = MyType->new({
|
$obj = MyType->new({
|
||||||
test => [
|
test => [
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Test'
|
value => 'Test'
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -277,14 +283,22 @@ eval {
|
|||||||
like $@, qr{cannot \s use \s CODE}xms;
|
like $@, qr{cannot \s use \s CODE}xms;
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
$obj = MyType->new({
|
$obj = MyType->new({
|
||||||
test => \&CORE::die,
|
test => \&CORE::die,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
like $@, qr{cannot \s use \s CODE}xms;
|
like $@, qr{cannot \s use \s CODE}xms;
|
||||||
|
|
||||||
|
# TODO ignore XMLNS (for now)
|
||||||
|
$obj = MyType->new({ xmlns => 'fubar'});
|
||||||
|
ok defined $obj;
|
||||||
|
TODO: {
|
||||||
|
local $TODO = "Support XML namespaces";
|
||||||
|
is $obj->get_xmlns(), 'fubar';
|
||||||
|
}
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
$obj = MyType->new({
|
$obj = MyType->new({
|
||||||
foobar => 'fubar'
|
foobar => 'fubar'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -300,16 +314,13 @@ like $@, qr{Can't \s locate \s object \s method}x;
|
|||||||
eval { MyType->new({ FOO => 42 }) };
|
eval { MyType->new({ FOO => 42 }) };
|
||||||
like $@, qr{unknown \s field \s}xm;
|
like $@, qr{unknown \s field \s}xm;
|
||||||
|
|
||||||
my $clone = Storable::thaw( Storable::freeze( $obj ));
|
|
||||||
is $clone->get_test()->[0], 'TestString0';
|
|
||||||
|
|
||||||
eval { SOAP::WSDL::XSD::Typelib::ComplexType::AUTOMETHOD() };
|
eval { SOAP::WSDL::XSD::Typelib::ComplexType::AUTOMETHOD() };
|
||||||
like $@, qr{Cannot \s call}xm;
|
like $@, qr{Cannot \s call}xm;
|
||||||
|
|
||||||
|
|
||||||
eval { SOAP::WSDL::XSD::Typelib::ComplexType->_factory([], { test => {} }, {}) };
|
eval { SOAP::WSDL::XSD::Typelib::ComplexType->_factory([], { test => {} }, {}) };
|
||||||
like $@, qr{ No \s class \s given \s for \s }xms;
|
like $@, qr{ No \s class \s given \s for \s }xms;
|
||||||
|
|
||||||
eval { SOAP::WSDL::XSD::Typelib::ComplexType->_factory([], { test => {} }, { test => 'HopeItDoesntExistOnYourSystem'}) };
|
eval { SOAP::WSDL::XSD::Typelib::ComplexType->_factory([], { test => {} }, { test => 'HopeItDoesntExistOnYourSystem'}) };
|
||||||
like $@, qr{ Can't \s locate \s HopeItDoesntExistOnYourSystem.pm }xms;
|
like $@, qr{ Can't \s locate \s HopeItDoesntExistOnYourSystem.pm }xms;
|
||||||
|
|
||||||
|
# print Dumper
|
||||||
|
|||||||
20
t/acceptance/wsdl/WSDLParser-import.wsdl
Normal file
20
t/acceptance/wsdl/WSDLParser-import.wsdl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?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/">
|
||||||
|
<import namespace="urn:HelloWorld" location="WSDLParser-imported.wsdl"/>
|
||||||
|
|
||||||
|
<service name="Service1">
|
||||||
|
<port name="Service1Soap" binding="s0:Service1Soap">
|
||||||
|
<soap:address
|
||||||
|
location="http://localhost:81/soap-wsdl-test/helloworld.pl" />
|
||||||
|
</port>
|
||||||
|
</service>
|
||||||
|
|
||||||
|
</definitions>
|
||||||
|
|
||||||
52
t/acceptance/wsdl/WSDLParser-imported.wsdl
Normal file
52
t/acceptance/wsdl/WSDLParser-imported.wsdl
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<?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>
|
||||||
|
<s:import namespace="urn:HelloWorld" schemaLocation="import.xsd"/>
|
||||||
|
</s:schema>
|
||||||
|
</types>
|
||||||
|
|
||||||
|
<message name="sayHelloSoapIn">
|
||||||
|
<part name="parameters" element="s0:sayHello" />
|
||||||
|
</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>
|
||||||
|
|
||||||
|
|
||||||
|
</definitions>
|
||||||
|
|
||||||
@@ -201,6 +201,15 @@ xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xm
|
|||||||
<xsd:complexType name="emptyComplexType">
|
<xsd:complexType name="emptyComplexType">
|
||||||
<xsd:sequence></xsd:sequence>
|
<xsd:sequence></xsd:sequence>
|
||||||
</xsd:complexType>
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:element name="testElementCompletelyEmptyComplex">
|
||||||
|
<xsd:complexType>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
|
||||||
|
<xsd:complexType name="completelyEmptyComplexType">
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
</xsd:schema>
|
</xsd:schema>
|
||||||
</types>
|
</types>
|
||||||
<message name="testChoice">
|
<message name="testChoice">
|
||||||
|
|||||||
23
t/acceptance/wsdl/import.xsd
Normal file
23
t/acceptance/wsdl/import.xsd
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<s:schema elementFormDefault="qualified" targetNamespace="urn:HelloWorld"
|
||||||
|
xmlns:s="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<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" nillable="1" />
|
||||||
|
</s:sequence>
|
||||||
|
<s:attribute name="testAttr" type="s:string" use="optional"></s:attribute>
|
||||||
|
</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:schema>
|
||||||
Reference in New Issue
Block a user