Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
915ee03cbe | ||
|
|
745ce925c1 | ||
|
|
0cbf981665 | ||
|
|
51db446428 | ||
|
|
f0b3bdc201 | ||
|
|
874251225f | ||
|
|
2bad767211 | ||
|
|
7ca2154ad6 | ||
|
|
eb096ad88e | ||
|
|
3cfeebae54 | ||
|
|
a9033164e6 |
@@ -1,55 +1,55 @@
|
|||||||
use Module::Build;
|
use Module::Build;
|
||||||
|
use version;
|
||||||
$build = Module::Build->new(
|
$build = Module::Build->new(
|
||||||
dist_author => 'Martin Kutter <martin.kutter@fen-net.de>',
|
dist_author => 'Martin Kutter <martin.kutter@fen-net.de>',
|
||||||
create_makefile_pl => 'passthrough',
|
create_makefile_pl => 'small',
|
||||||
dist_abstract => 'SOAP with WSDL support',
|
dist_abstract => 'SOAP with WSDL support',
|
||||||
dist_name => 'SOAP-WSDL',
|
dist_name => 'SOAP-WSDL',
|
||||||
dist_version => '2.00_24',
|
dist_version => '2.00.02',
|
||||||
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' => '5.8.0',
|
'perl' => q(5.8.0),
|
||||||
'Class::Std' => q/v0.0.8/,
|
'Class::Std::Fast' => q(0.0.5),
|
||||||
'Class::Std::Storable' => 0,
|
|
||||||
'Data::Dumper' => 0,
|
'Data::Dumper' => 0,
|
||||||
'Date::Parse' => 0,
|
'Date::Parse' => 0,
|
||||||
'Date::Format' => 0,
|
'Date::Format' => 0,
|
||||||
'File::Basename' => 0,
|
'File::Basename' => 0,
|
||||||
'File::Path' => 0,
|
'File::Path' => 0,
|
||||||
'Getopt::Long' => 0,
|
'Getopt::Long' => 0,
|
||||||
'List::Util' => 0,
|
'List::Util' => 0,
|
||||||
'LWP::UserAgent' => 0,
|
'LWP::UserAgent' => 0,
|
||||||
'Template' => 0,
|
'Template' => q(2.18),
|
||||||
'Term::ReadKey' => 0,
|
'Term::ReadKey' => 0,
|
||||||
'XML::Parser::Expat' => 0,
|
'URI' => 0,
|
||||||
},
|
'XML::Parser::Expat' => 0,
|
||||||
buildrequires => {
|
},
|
||||||
'Class::Std' => q/v0.0.8/,
|
build_requires => {
|
||||||
'Class::Std::Storable' => 0,
|
'Class::Std::Fast' => q(0.0.5),
|
||||||
'Cwd' => 0,
|
'Cwd' => 0,
|
||||||
'Date::Parse' => 0,
|
'Date::Parse' => 0,
|
||||||
'Date::Format' => 0,
|
'Date::Format' => 0,
|
||||||
'Getopt::Long' => 0,
|
'Getopt::Long' => 0,
|
||||||
'List::Util' => 0,
|
'List::Util' => 0,
|
||||||
'LWP::UserAgent' => 0,
|
'LWP::UserAgent' => 0,
|
||||||
'File::Basename' => 0,
|
'Module::Build' => 0,
|
||||||
'File::Path' => 0,
|
'File::Basename' => 0,
|
||||||
|
'File::Path' => 0,
|
||||||
'File::Spec' => 0,
|
'File::Spec' => 0,
|
||||||
'Storable' => 0,
|
'Storable' => 0,
|
||||||
'Test::More' => 0,
|
'Test::More' => 0,
|
||||||
'Template' => 0,
|
'Template' => q(2.18),
|
||||||
'XML::Parser::Expat' => 0,
|
'XML::Parser::Expat' => 0,
|
||||||
},
|
},
|
||||||
recursive_test_files => 1,
|
recursive_test_files => 1,
|
||||||
meta_add => {
|
meta_add => {
|
||||||
no_index => {
|
no_index => {
|
||||||
directory => 'lib/SOAP/WSDL/Generator/Template/XSD/',
|
directory => 'lib/SOAP/WSDL/Generator/Template/XSD/',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$build->add_build_element('tt');
|
$build->add_build_element('tt');
|
||||||
$build->create_build_script;
|
$build->create_build_script;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Release notes for SOAP::WSDL 2.00_24
|
Release notes for SOAP::WSDL 2.00.02
|
||||||
-------
|
-------
|
||||||
|
|
||||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
I'm proud to present a new release of SOAP::WSDL.
|
||||||
|
|
||||||
SOAP::WSDL is a toolkit for creating WSDL-based SOAP client interfaces in perl.
|
SOAP::WSDL is a toolkit for creating WSDL-based SOAP client interfaces in perl.
|
||||||
|
|
||||||
@@ -15,6 +15,8 @@ Features:
|
|||||||
* Easy-to use API
|
* Easy-to use API
|
||||||
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
|
||||||
|
o Datatypes provide hints on method names on calls to non-existant
|
||||||
|
methods
|
||||||
* 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
|
||||||
@@ -23,17 +25,297 @@ Features:
|
|||||||
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 migration
|
||||||
* 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
|
||||||
o Deserializer plugins via SOAP::WSDL::Factory::Serializer
|
o Deserializer plugins via SOAP::WSDL::Factory::Deserializer
|
||||||
|
|
||||||
The following changes have been made:
|
The following changes have been made:
|
||||||
|
|
||||||
|
2.00.02 - May 16 2008
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1941134 ] Server for mod_perl2. Thanks to Noah Robin for contributing.
|
||||||
|
(I actually forgot to include it in 2.00.01)
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1943667 ] Error parsing complexType/extension
|
||||||
|
* [ 1960650 ] multi-level inheritance of complexTypes fails
|
||||||
|
* [ 1960319 ] ComplexType as_hash_ref returns objects on maximum depth
|
||||||
|
* [ 1943673 ] Relative schemaLocation="" URLs not resolved in <import>
|
||||||
|
* [ 1953598 ] Cannot set server and attribute prefixes with wsdl2perl
|
||||||
|
* [ 1941080 ] 017_generator.t (test 2) fails with Template-Toolkit 2.15
|
||||||
|
* [ 1949209 ] spelling/grammar in Mod_Perl2.pm
|
||||||
|
* [ 1950670 ] on_action removed in SOAP::WSDL >= 2.00
|
||||||
|
* #35346 element ref="" not handled properly
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
2.00.01
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1941134 ] Server for mod_perl2. Thanks to Noah Robin for contributing.
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1944368 ] SOAP/WSDL/XSD/Typelib/SimpleType.pm spelling
|
||||||
|
* [ 1944367 ] SOAP/WSDL/XSD/Typelib/ComplexType.pm spelling
|
||||||
|
* [ 1944364 ] SOAP/WSDL/XSD/Typelib/Builtin.pm spelling
|
||||||
|
* [ 1944362 ] SOAP/WSDL/SOAP/Typelib/Fault11.pm spelling
|
||||||
|
* [ 1944361 ] SOAP/WSDL/Generator/Visitor.pm spelling
|
||||||
|
* [ 1944360 ] SOAP/WSDL/Generator/Iterator/WSDL11.pm spelling
|
||||||
|
* [ 1944359 ] SOAP::WSDL::Factory::Transport spelling
|
||||||
|
* [ 1944355 ] SOAP::WSDL::Deserializer::XSD.pm spelling
|
||||||
|
Thanks to "nobody" for correcting these errors.
|
||||||
|
|
||||||
|
* [ 1942576 ] SOAP/WSDL/Deserializer/SOM.pm spelling.
|
||||||
|
* [ 1942568 ] SOAP/WSDL/Client.pm minor spelling/grammar/style cleanup.
|
||||||
|
* [ 1942562 ] WSDL.pm spelling corrections.
|
||||||
|
Thanks to Noah Robin for providing patches for these errors.
|
||||||
|
|
||||||
|
* #34642 booleans in WSDL attributes don't get converted to perl's
|
||||||
|
representation (for now - not all attributes covered yet)
|
||||||
|
* #34714: MessageParser misses character data in elements just below SOAP-ENV:Body
|
||||||
|
* #34688: wsdl2perl.pl croaks when WSDL operation uses a header
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Storable freeze/thaw speedup in conjunction with upcoming version of
|
||||||
|
Class::Std::Fast
|
||||||
|
* improved server doc generation
|
||||||
|
* improved xsi:nil handling
|
||||||
|
* serializing an attribute from http://www.w3.org/XML/1998/namespace now
|
||||||
|
serializes it with xml: prefix. This should probably be moved into the
|
||||||
|
generator, to avoid testing every attribute
|
||||||
|
|
||||||
|
2.00_33 - Mar 30 2008
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1925336 ] Create a Prefix Resolver Plugin Interface for Code Generator
|
||||||
|
* [ 1898591 ] object stringify returns undef
|
||||||
|
* [ 1906753 ] Hypens in MyTypes/* cause runtime syntax errors
|
||||||
|
Hypens and dots in variable and method names are now replaced by _
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* #33616: Bugs in the META.yml file
|
||||||
|
* [ 1892895 ] Test failures on RHEL4
|
||||||
|
* [ 1844956 ] t/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKENS fails test on OS X
|
||||||
|
* #33376: HTTP Authentication (not implemented or not documented)
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Some minor performance improvements have been made
|
||||||
|
* The XSD generator now asserts the soap:operation style is "document"
|
||||||
|
* <wsdl:import> and <xsd:import> now import namespace declarations, too
|
||||||
|
* The XSD generator now uses the relevant <wsdl:portType>'s
|
||||||
|
targetNamespace for finding operation messages, not the <wsdl:definition>
|
||||||
|
element's targetNamespace
|
||||||
|
* Attribute handling has been improved so it could possibly work.
|
||||||
|
Attributes from different namespaces are probably still broken.
|
||||||
|
* Attribute ref handling has been added (though probably broken on
|
||||||
|
ref cascades).
|
||||||
|
* <xsd:attributeGroup> elements are now parsed, but have no effect yet.
|
||||||
|
* <xsd:enumeration> elements are now parsed, but have no effect yet.
|
||||||
|
|
||||||
|
2.00_32 - Feb 14 2008
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
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
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
|
* [ 1893147 ] Segfault on 2.0.0_31
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* changed SOAP::WSDL::XSD::ComplexType's set_/get_flavor methods to
|
||||||
|
set_/get_variety to reflect the XML standard more closely.
|
||||||
|
get_flavor is retained for compatibility reasons.
|
||||||
|
* added initial support for complexType/simpleContent definitions. Right
|
||||||
|
now, only restriction derivations are supported.
|
||||||
|
* fixed an error in the generator_test.wsdl
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* #32188: minor bug found and fixed in WSDL generation
|
||||||
|
* [ 1871175 ] Can't delete attributes from ComplexType objects
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Updated SOAP::WSDL::Manual::XSD
|
||||||
|
* Removed pod directives from templates to avoid confusing CPAN's pod
|
||||||
|
viewer
|
||||||
|
* Initial (incomplete) XML attribute support
|
||||||
|
* Updated test suite
|
||||||
|
|
||||||
|
2.00_28
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* #32062: minor doc fixes
|
||||||
|
* [ 1852988 ] Generated Interface POD is invalid
|
||||||
|
* [ 1855583 ] t/SOAP/WSDL/XSD/Typelib/ComplexType.t requires Test::Warn
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Updated SOAP::WSDL::Manual::WS_I to reflect new Server modules
|
||||||
|
|
||||||
|
2.00_27
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1850793 ] Add a to_hash_ref method
|
||||||
|
* [ 1844427 ] Support multiple parts in body
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1850795 ] attributes referencing types in default namespace throw
|
||||||
|
* [ 1844458 ] Add warning when generating Interface with multiple parts
|
||||||
|
* [ 1843841 ] Grammar/typos in Manual.pod
|
||||||
|
* [ 1843799 ] ./Build test fails due to testcount mismatch not IO::Scalar
|
||||||
|
* [ 1845077 ] Top level simpleType elements don't serialize correctly
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Fixed serializing complexType elements with no elements to empty element
|
||||||
|
* Enhanced test suite
|
||||||
|
* Documentation improvements
|
||||||
|
|
||||||
|
2.00_26
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
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
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
|
* [ 1843195 ] t/013_complexType.t still requires Class::Std::Storable
|
||||||
|
* [ 1843590 ] Tests broken on Cygwin
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Added examples
|
||||||
|
* Added Content-length header to CGI output
|
||||||
|
|
||||||
|
2.00_25
|
||||||
|
---
|
||||||
|
WARNING: INCOMPATIBLE CHANGE:
|
||||||
|
|
||||||
|
SOAP::WSDL now uses Class::Std::Fast. Read the MIGRATING guide for
|
||||||
|
upgrading from previous versions.
|
||||||
|
You probably need to re-generate all your interfaces.
|
||||||
|
|
||||||
|
WARNING: INCOMPATIBLE CHANGE:
|
||||||
|
|
||||||
|
SOAP::WSDL::XSD::Typelib::anySimpleType based objects no longer serialize
|
||||||
|
to their XML value on stringification.
|
||||||
|
This means that strings are no longer XML-escaped when the simpleType
|
||||||
|
containing the string is printed or used like this:
|
||||||
|
|
||||||
|
my $value = "$simpleType";
|
||||||
|
|
||||||
|
Note that ComplexType objects still serialize to their XML on
|
||||||
|
stringification. This Change is due to the demands of applications
|
||||||
|
embedding SOAP::WSDL::XSD::Typelib objects in templates - it would mean
|
||||||
|
a nasty ->get_value for every (simple) value.
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1837347 ] Use Class::Std::Fast
|
||||||
|
Class::Std::Fast allows optimizations which almost double SOAP::WSDL's
|
||||||
|
performance and reduce code size. Class::Std::Fast also opens the door
|
||||||
|
for even faster XS implementations.
|
||||||
|
* [ 1842436 ] Add SOAP Server
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1842418 ] Message parser eats up whitespaces between entities
|
||||||
|
* [ 1839820 ] encoding parameter of Content-Type header set incorrectly
|
||||||
|
* [ 1839851 ] token in UPPERCASE in default typemap
|
||||||
|
* [ 1839690 ] Can't use two prefixes for namespace in WSDL
|
||||||
|
* [ 1839833 ] incorrect encoding/decoding of double-quote
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Errors in typemap generation have been fixed
|
||||||
|
* XML parser speedups
|
||||||
|
* The test suite has been improved
|
||||||
|
|
||||||
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
|
||||||
@@ -84,7 +366,6 @@ 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
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ The following guidelines apply:
|
|||||||
- Testing
|
- Testing
|
||||||
* SOAP::WSDL has a test coverage of >95% and aims at 100%. Please write
|
* SOAP::WSDL has a test coverage of >95% and aims at 100%. Please write
|
||||||
a test first.
|
a test first.
|
||||||
* Use uthor tests are for testing guidelines. Disable author tests for
|
* Use author tests for testing guidelines. Disable author tests for
|
||||||
users - it's time consuming and of no use to have users run author tests.
|
users - it's time consuming and of no use to have users run author tests.
|
||||||
|
|
||||||
- Indentation and formatting
|
- Indentation and formatting
|
||||||
@@ -121,7 +121,7 @@ The following guidelines apply:
|
|||||||
$_[0]->foo($_[2..$#]); # read as $self->foo(%args_of);
|
$_[0]->foo($_[2..$#]); # read as $self->foo(%args_of);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
* POD is located at end of file, preferably after
|
* POD is located at end of file, preferably after __END__
|
||||||
* Complete POD coverage is essential. However, if the package in question
|
* Complete POD coverage is essential. However, if the package in question
|
||||||
is used internally only, it's better to omit the POD completely - too many
|
is used internally only, it's better to omit the POD completely - too many
|
||||||
PODs to look at confuse the average CPAN user.
|
PODs to look at confuse the average CPAN user.
|
||||||
|
|||||||
@@ -2,6 +2,145 @@ SOAP::WSDL is dual licensed under the same terms as
|
|||||||
Perl itself.
|
Perl itself.
|
||||||
|
|
||||||
This means at your choice, either the Perl Artistic License, or
|
This means at your choice, either the Perl Artistic License, or
|
||||||
the GNU GPL version 1 or higher.
|
the GNU GPL version 1 or - at your choice - any higher version.
|
||||||
|
|
||||||
|
The GNU GPL can be obtained from
|
||||||
|
http://www.gnu.org/licenses/old-licenses/gpl-1.0.txt
|
||||||
|
|
||||||
|
Newer versions can be found at http://www.gnu.org/licenses/gpl.html
|
||||||
|
|
||||||
|
The Artistic License can be obtained from
|
||||||
|
http://dev.perl.org/licenses/artistic.html and is included below.
|
||||||
|
|
||||||
|
ARTISTIC LICENSE
|
||||||
|
================
|
||||||
|
|
||||||
|
|
||||||
|
The "Artistic License"
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The intent of this document is to state the conditions under which a
|
||||||
|
Package may be copied, such that the Copyright Holder maintains some
|
||||||
|
semblance of artistic control over the development of the package,
|
||||||
|
while giving the users of the package the right to use and distribute
|
||||||
|
the Package in a more-or-less customary fashion, plus the right to make
|
||||||
|
reasonable modifications.
|
||||||
|
|
||||||
|
Definitions:
|
||||||
|
|
||||||
|
"Package" refers to the collection of files distributed by the
|
||||||
|
Copyright Holder, and derivatives of that collection of files
|
||||||
|
created through textual modification.
|
||||||
|
|
||||||
|
"Standard Version" refers to such a Package if it has not been
|
||||||
|
modified, or has been modified in accordance with the wishes
|
||||||
|
of the Copyright Holder as specified below.
|
||||||
|
|
||||||
|
"Copyright Holder" is whoever is named in the copyright or
|
||||||
|
copyrights for the package.
|
||||||
|
|
||||||
|
"You" is you, if you're thinking about copying or distributing
|
||||||
|
this Package.
|
||||||
|
|
||||||
|
"Reasonable copying fee" is whatever you can justify on the
|
||||||
|
basis of media cost, duplication charges, time of people involved,
|
||||||
|
and so on. (You will not be required to justify it to the
|
||||||
|
Copyright Holder, but only to the computing community at large
|
||||||
|
as a market that must bear the fee.)
|
||||||
|
|
||||||
|
"Freely Available" means that no fee is charged for the item
|
||||||
|
itself, though there may be fees involved in handling the item.
|
||||||
|
It also means that recipients of the item may redistribute it
|
||||||
|
under the same conditions they received it.
|
||||||
|
|
||||||
|
1. You may make and give away verbatim copies of the source form of the
|
||||||
|
Standard Version of this Package without restriction, provided that you
|
||||||
|
duplicate all of the original copyright notices and associated disclaimers.
|
||||||
|
|
||||||
|
2. You may apply bug fixes, portability fixes and other modifications
|
||||||
|
derived from the Public Domain or from the Copyright Holder. A Package
|
||||||
|
modified in such a way shall still be considered the Standard Version.
|
||||||
|
|
||||||
|
3. You may otherwise modify your copy of this Package in any way, provided
|
||||||
|
that you insert a prominent notice in each changed file stating how and
|
||||||
|
when you changed that file, and provided that you do at least ONE of the
|
||||||
|
following:
|
||||||
|
|
||||||
|
a) place your modifications in the Public Domain or otherwise make them
|
||||||
|
Freely Available, such as by posting said modifications to Usenet or
|
||||||
|
an equivalent medium, or placing the modifications on a major archive
|
||||||
|
site such as uunet.uu.net, or by allowing the Copyright Holder to include
|
||||||
|
your modifications in the Standard Version of the Package.
|
||||||
|
|
||||||
|
b) use the modified Package only within your corporation or organization.
|
||||||
|
|
||||||
|
c) rename any non-standard executables so the names do not conflict
|
||||||
|
with standard executables, which must also be provided, and provide
|
||||||
|
a separate manual page for each non-standard executable that clearly
|
||||||
|
documents how it differs from the Standard Version.
|
||||||
|
|
||||||
|
d) make other distribution arrangements with the Copyright Holder.
|
||||||
|
|
||||||
|
4. You may distribute the programs of this Package in object code or
|
||||||
|
executable form, provided that you do at least ONE of the following:
|
||||||
|
|
||||||
|
a) distribute a Standard Version of the executables and library files,
|
||||||
|
together with instructions (in the manual page or equivalent) on where
|
||||||
|
to get the Standard Version.
|
||||||
|
|
||||||
|
b) accompany the distribution with the machine-readable source of
|
||||||
|
the Package with your modifications.
|
||||||
|
|
||||||
|
c) give non-standard executables non-standard names, and clearly
|
||||||
|
document the differences in manual pages (or equivalent), together
|
||||||
|
with instructions on where to get the Standard Version.
|
||||||
|
|
||||||
|
d) make other distribution arrangements with the Copyright Holder.
|
||||||
|
|
||||||
|
5. You may charge a reasonable copying fee for any distribution of this
|
||||||
|
Package. You may charge any fee you choose for support of this
|
||||||
|
Package. You may not charge a fee for this Package itself. However,
|
||||||
|
you may distribute this Package in aggregate with other (possibly
|
||||||
|
commercial) programs as part of a larger (possibly commercial) software
|
||||||
|
distribution provided that you do not advertise this Package as a
|
||||||
|
product of your own. You may embed this Package's interpreter within
|
||||||
|
an executable of yours (by linking); this shall be construed as a mere
|
||||||
|
form of aggregation, provided that the complete Standard Version of the
|
||||||
|
interpreter is so embedded.
|
||||||
|
|
||||||
|
6. The scripts and library files supplied as input to or produced as
|
||||||
|
output from the programs of this Package do not automatically fall
|
||||||
|
under the copyright of this Package, but belong to whoever generated
|
||||||
|
them, and may be sold commercially, and may be aggregated with this
|
||||||
|
Package. If such scripts or library files are aggregated with this
|
||||||
|
Package via the so-called "undump" or "unexec" methods of producing a
|
||||||
|
binary executable image, then distribution of such an image shall
|
||||||
|
neither be construed as a distribution of this Package nor shall it
|
||||||
|
fall under the restrictions of Paragraphs 3 and 4, provided that you do
|
||||||
|
not represent such an executable image as a Standard Version of this
|
||||||
|
Package.
|
||||||
|
|
||||||
|
7. C subroutines (or comparably compiled subroutines in other
|
||||||
|
languages) supplied by you and linked into this Package in order to
|
||||||
|
emulate subroutines and variables of the language defined by this
|
||||||
|
Package shall not be considered part of this Package, but are the
|
||||||
|
equivalent of input as in Paragraph 6, provided these subroutines do
|
||||||
|
not change the language in any way that would cause it to fail the
|
||||||
|
regression tests for the language.
|
||||||
|
|
||||||
|
8. Aggregation of this Package with a commercial distribution is always
|
||||||
|
permitted provided that the use of this Package is embedded; that is,
|
||||||
|
when no overt attempt is made to make this Package's interfaces visible
|
||||||
|
to the end user of the commercial distribution. Such use shall not be
|
||||||
|
construed as a distribution of this Package.
|
||||||
|
|
||||||
|
9. The name of the Copyright Holder may not be used to endorse or promote
|
||||||
|
products derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
The End
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,25 @@
|
|||||||
benchmark/01_expat.t
|
benchmark/01_expat.t
|
||||||
|
benchmark/hello.pl
|
||||||
|
benchmark/MEMORY_FOOTPRINT
|
||||||
|
benchmark/person.pl
|
||||||
|
benchmark/person.xml
|
||||||
|
benchmark/person_profile.pl
|
||||||
|
benchmark/person_single.pl
|
||||||
|
benchmark/README
|
||||||
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
|
||||||
|
benchmark/XSD/strftime.pl
|
||||||
bin/wsdl2perl.pl
|
bin/wsdl2perl.pl
|
||||||
Build.PL
|
Build.PL
|
||||||
Changes
|
Changes
|
||||||
|
example/cgi-bin/helloworld.pl
|
||||||
|
example/cgi-bin/person.pl
|
||||||
example/fortune.pl
|
example/fortune.pl
|
||||||
|
example/genericbarcode.pl
|
||||||
|
example/hello.pl
|
||||||
|
example/hello_compile.pl
|
||||||
|
example/hello_lite.pl
|
||||||
example/lib/MyElements/CountCookies.pm
|
example/lib/MyElements/CountCookies.pm
|
||||||
example/lib/MyElements/CountCookiesResponse.pm
|
example/lib/MyElements/CountCookiesResponse.pm
|
||||||
example/lib/MyElements/GenerateBarCode.pm
|
example/lib/MyElements/GenerateBarCode.pm
|
||||||
@@ -19,18 +33,50 @@ example/lib/MyElements/GetSpecificCookieResponse.pm
|
|||||||
example/lib/MyElements/GetWeather.pm
|
example/lib/MyElements/GetWeather.pm
|
||||||
example/lib/MyElements/GetWeatherResponse.pm
|
example/lib/MyElements/GetWeatherResponse.pm
|
||||||
example/lib/MyElements/int.pm
|
example/lib/MyElements/int.pm
|
||||||
|
example/lib/MyElements/ListPerson.pm
|
||||||
|
example/lib/MyElements/ListPersonResponse.pm
|
||||||
example/lib/MyElements/readNodeCount.pm
|
example/lib/MyElements/readNodeCount.pm
|
||||||
example/lib/MyElements/readNodeCountResponse.pm
|
example/lib/MyElements/readNodeCountResponse.pm
|
||||||
|
example/lib/MyElements/sayHello.pm
|
||||||
|
example/lib/MyElements/sayHelloResponse.pm
|
||||||
example/lib/MyElements/string.pm
|
example/lib/MyElements/string.pm
|
||||||
|
example/lib/MyInterfaces/BarCode/BarCodeSoap.pm
|
||||||
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
||||||
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
||||||
|
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
|
||||||
|
example/lib/MyInterfaces/TestService/TestPort.pm
|
||||||
|
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
|
||||||
|
example/lib/MyServer/TestService/TestPort.pm
|
||||||
|
example/lib/MyTypemaps/BarCode.pm
|
||||||
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
||||||
example/lib/MyTypemaps/GlobalWeather.pm
|
example/lib/MyTypemaps/GlobalWeather.pm
|
||||||
|
example/lib/MyTypemaps/HelloWorld.pm
|
||||||
|
example/lib/MyTypemaps/TestService.pm
|
||||||
|
example/lib/MyTypes/Address.pm
|
||||||
|
example/lib/MyTypes/ArrayOfContract.pm
|
||||||
|
example/lib/MyTypes/ArrayOfPerson.pm
|
||||||
|
example/lib/MyTypes/BarCodeData.pm
|
||||||
|
example/lib/MyTypes/BarcodeOption.pm
|
||||||
|
example/lib/MyTypes/BarcodeType.pm
|
||||||
|
example/lib/MyTypes/CheckSumMethod.pm
|
||||||
|
example/lib/MyTypes/Contract.pm
|
||||||
|
example/lib/MyTypes/ImageFormats.pm
|
||||||
|
example/lib/MyTypes/Person.pm
|
||||||
|
example/lib/MyTypes/PersonID.pm
|
||||||
|
example/lib/MyTypes/PhoneNumber.pm
|
||||||
|
example/lib/MyTypes/ShowTextPosition.pm
|
||||||
|
example/lib/MyTypes/test2.pm
|
||||||
|
example/lib/MyTypes/testExtended.pm
|
||||||
|
example/person.pl
|
||||||
|
example/person_compile.pl
|
||||||
example/visitor/visitor.pl
|
example/visitor/visitor.pl
|
||||||
example/weather.pl
|
example/weather.pl
|
||||||
example/weather_wsdl.pl
|
example/weather_wsdl.pl
|
||||||
|
example/wsdl/11_helloworld.wsdl
|
||||||
example/wsdl/FortuneCookie.xml
|
example/wsdl/FortuneCookie.xml
|
||||||
|
example/wsdl/genericbarcode.xml
|
||||||
example/wsdl/globalweather.xml
|
example/wsdl/globalweather.xml
|
||||||
|
example/wsdl/Person.wsdl
|
||||||
HACKING
|
HACKING
|
||||||
lib/SOAP/WSDL.pm
|
lib/SOAP/WSDL.pm
|
||||||
lib/SOAP/WSDL/Base.pm
|
lib/SOAP/WSDL/Base.pm
|
||||||
@@ -50,23 +96,37 @@ lib/SOAP/WSDL/Factory/Deserializer.pm
|
|||||||
lib/SOAP/WSDL/Factory/Generator.pm
|
lib/SOAP/WSDL/Factory/Generator.pm
|
||||||
lib/SOAP/WSDL/Factory/Serializer.pm
|
lib/SOAP/WSDL/Factory/Serializer.pm
|
||||||
lib/SOAP/WSDL/Factory/Transport.pm
|
lib/SOAP/WSDL/Factory/Transport.pm
|
||||||
|
lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm
|
||||||
|
lib/SOAP/WSDL/Generator/PrefixResolver.pm
|
||||||
lib/SOAP/WSDL/Generator/Template.pm
|
lib/SOAP/WSDL/Generator/Template.pm
|
||||||
|
lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD.pm
|
lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/_type_class.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/attribute.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/all.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/all.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/atomicTypes.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/atomicTypes.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/attributeSet.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/complexContent.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/complexContent.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/contentModel.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/contentModel.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/extension.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/extension.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/all.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/all.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/attributeSet.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/choice.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/choice.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/complexContent.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/complexContent.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/content_model.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/restriction.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/restriction.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/simpleContent.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/simpleContent/extension.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/simpleContent/restriction.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/structure.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/structure.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/structure/restriction.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/structure/simpleContent.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/restriction.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/restriction.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/simpleContent.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/simpleContent/extension.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/variety.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/variety.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/element.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/element.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/element/POD/contentModel.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/element/POD/structure.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/element/POD/structure.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/Interface.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/Body.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/Interface/Body.tt
|
||||||
@@ -78,20 +138,31 @@ lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/method_info.tt
|
|||||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Operation.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Operation.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Part.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Part.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Type.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Type.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/POD/annotation.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/Server.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/Server/POD/Message.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/Server/POD/method_info.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/Server/POD/Operation.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/Server/POD/OutPart.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/atomicType.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/atomicType.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/contentModel.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/contentModel.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/list.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/list.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/contentModel.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/list.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/list.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/restriction.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/restriction.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/structure.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/structure.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/POD/union.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/restriction.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/restriction.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/simpleType/union.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt
|
||||||
lib/SOAP/WSDL/Generator/Visitor.pm
|
lib/SOAP/WSDL/Generator/Visitor.pm
|
||||||
lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
|
lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
|
||||||
lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
||||||
lib/SOAP/WSDL/Manual.pod
|
lib/SOAP/WSDL/Manual.pod
|
||||||
|
lib/SOAP/WSDL/Manual/Cookbook.pod
|
||||||
lib/SOAP/WSDL/Manual/Deserializer.pod
|
lib/SOAP/WSDL/Manual/Deserializer.pod
|
||||||
|
lib/SOAP/WSDL/Manual/FAQ.pod
|
||||||
lib/SOAP/WSDL/Manual/Glossary.pod
|
lib/SOAP/WSDL/Manual/Glossary.pod
|
||||||
lib/SOAP/WSDL/Manual/Parser.pod
|
lib/SOAP/WSDL/Manual/Parser.pod
|
||||||
lib/SOAP/WSDL/Manual/Serializer.pod
|
lib/SOAP/WSDL/Manual/Serializer.pod
|
||||||
@@ -104,6 +175,9 @@ lib/SOAP/WSDL/Part.pm
|
|||||||
lib/SOAP/WSDL/Port.pm
|
lib/SOAP/WSDL/Port.pm
|
||||||
lib/SOAP/WSDL/PortType.pm
|
lib/SOAP/WSDL/PortType.pm
|
||||||
lib/SOAP/WSDL/Serializer/XSD.pm
|
lib/SOAP/WSDL/Serializer/XSD.pm
|
||||||
|
lib/SOAP/WSDL/Server.pm
|
||||||
|
lib/SOAP/WSDL/Server/CGI.pm
|
||||||
|
lib/SOAP/WSDL/Server/Mod_Perl2.pm
|
||||||
lib/SOAP/WSDL/Service.pm
|
lib/SOAP/WSDL/Service.pm
|
||||||
lib/SOAP/WSDL/SOAP/Address.pm
|
lib/SOAP/WSDL/SOAP/Address.pm
|
||||||
lib/SOAP/WSDL/SOAP/Body.pm
|
lib/SOAP/WSDL/SOAP/Body.pm
|
||||||
@@ -116,12 +190,29 @@ lib/SOAP/WSDL/Transport/Loopback.pm
|
|||||||
lib/SOAP/WSDL/Transport/Test.pm
|
lib/SOAP/WSDL/Transport/Test.pm
|
||||||
lib/SOAP/WSDL/TypeLookup.pm
|
lib/SOAP/WSDL/TypeLookup.pm
|
||||||
lib/SOAP/WSDL/Types.pm
|
lib/SOAP/WSDL/Types.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Annotation.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Attribute.pm
|
||||||
|
lib/SOAP/WSDL/XSD/AttributeGroup.pm
|
||||||
lib/SOAP/WSDL/XSD/Builtin.pm
|
lib/SOAP/WSDL/XSD/Builtin.pm
|
||||||
lib/SOAP/WSDL/XSD/ComplexType.pm
|
lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||||
lib/SOAP/WSDL/XSD/Element.pm
|
lib/SOAP/WSDL/XSD/Element.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Enumeration.pm
|
||||||
|
lib/SOAP/WSDL/XSD/FractionDigits.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Group.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Length.pm
|
||||||
|
lib/SOAP/WSDL/XSD/MaxExclusive.pm
|
||||||
|
lib/SOAP/WSDL/XSD/MaxInclusive.pm
|
||||||
|
lib/SOAP/WSDL/XSD/MaxLength.pm
|
||||||
|
lib/SOAP/WSDL/XSD/MinExclusive.pm
|
||||||
|
lib/SOAP/WSDL/XSD/MinInclusive.pm
|
||||||
|
lib/SOAP/WSDL/XSD/MinLength.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Pattern.pm
|
||||||
lib/SOAP/WSDL/XSD/Schema.pm
|
lib/SOAP/WSDL/XSD/Schema.pm
|
||||||
lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
||||||
lib/SOAP/WSDL/XSD/SimpleType.pm
|
lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||||
|
lib/SOAP/WSDL/XSD/TotalDigits.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||||
@@ -172,17 +263,15 @@ lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
|||||||
lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||||
|
lib/SOAP/WSDL/XSD/WhiteSpace.pm
|
||||||
LICENSE
|
LICENSE
|
||||||
MAINFEST
|
|
||||||
Makefile.PL
|
Makefile.PL
|
||||||
MANIFEST
|
MANIFEST This list of files
|
||||||
META.yml
|
META.yml
|
||||||
|
MIGRATING
|
||||||
README
|
README
|
||||||
t/001_use.t
|
|
||||||
t/002_parse_wsdl.t
|
t/002_parse_wsdl.t
|
||||||
t/003_wsdl_based_serializer.t
|
t/003_wsdl_based_serializer.t
|
||||||
t/004_parse_wsdl.t
|
|
||||||
t/005_parse_contributed.t
|
|
||||||
t/006_client.t
|
t/006_client.t
|
||||||
t/007_envelope.t
|
t/007_envelope.t
|
||||||
t/008_client_wsdl_complexType.t
|
t/008_client_wsdl_complexType.t
|
||||||
@@ -191,9 +280,9 @@ t/011_simpleType.t
|
|||||||
t/012_element.t
|
t/012_element.t
|
||||||
t/013_complexType.t
|
t/013_complexType.t
|
||||||
t/016_client_object.t
|
t/016_client_object.t
|
||||||
t/017_generator.t
|
|
||||||
t/018_compat_2_00_15-generator.t
|
|
||||||
t/020_storable.t
|
t/020_storable.t
|
||||||
|
t/095_copying.t
|
||||||
|
t/096_characters.t
|
||||||
t/097_kwalitee.t
|
t/097_kwalitee.t
|
||||||
t/098_pod.t
|
t/098_pod.t
|
||||||
t/099_pod_coverage.t
|
t/099_pod_coverage.t
|
||||||
@@ -220,28 +309,42 @@ t/acceptance/wsdl/10_helloworld.asmx.xml
|
|||||||
t/acceptance/wsdl/11_helloworld.wsdl
|
t/acceptance/wsdl/11_helloworld.wsdl
|
||||||
t/acceptance/wsdl/contributed/Axis.wsdl
|
t/acceptance/wsdl/contributed/Axis.wsdl
|
||||||
t/acceptance/wsdl/contributed/ETest.wsdl
|
t/acceptance/wsdl/contributed/ETest.wsdl
|
||||||
|
t/acceptance/wsdl/contributed/gasquery.wsdl
|
||||||
t/acceptance/wsdl/contributed/OITest.wsdl
|
t/acceptance/wsdl/contributed/OITest.wsdl
|
||||||
t/acceptance/wsdl/contributed/tools.wsdl
|
t/acceptance/wsdl/contributed/tools.wsdl
|
||||||
t/acceptance/wsdl/elementAtomicComplexType.xml
|
t/acceptance/wsdl/elementAtomicComplexType.xml
|
||||||
t/acceptance/wsdl/email_account.wsdl
|
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_unsupported_test.wsdl
|
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
||||||
|
t/acceptance/wsdl/helloWorld_header.wsdl
|
||||||
|
t/acceptance/wsdl/import.xsd
|
||||||
|
t/acceptance/wsdl/import_loop.xsd
|
||||||
t/acceptance/wsdl/message_gateway.wsdl
|
t/acceptance/wsdl/message_gateway.wsdl
|
||||||
|
t/acceptance/wsdl/nested_complextype.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser-import.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser-imported.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser/import_cascade.xsd
|
||||||
|
t/acceptance/wsdl/WSDLParser/import_no_location.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser/import_xsd_cascade.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser/imported.xsd
|
||||||
|
t/acceptance/wsdl/WSDLParser/xsd_import_no_location.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser_import_loop.wsdl
|
||||||
t/contributed.wsdl
|
t/contributed.wsdl
|
||||||
t/Expat/01_expat.t
|
|
||||||
t/Expat/03_wsdl.t
|
t/Expat/03_wsdl.t
|
||||||
|
t/lib/Mod_Perl2Test.pm
|
||||||
t/lib/MyComplexType.pm
|
t/lib/MyComplexType.pm
|
||||||
t/lib/MyElement.pm
|
t/lib/MyElement.pm
|
||||||
t/lib/MyElements/GetWeather.pm
|
|
||||||
t/lib/MyElements/GetWeatherResponse.pm
|
|
||||||
t/lib/MyInterfaces/GlobalWeather.pm
|
|
||||||
t/lib/MySimpleType.pm
|
t/lib/MySimpleType.pm
|
||||||
t/lib/MyTypemaps/GlobalWeather.pm
|
t/lib/Test/SOAP/WSDL/Expat/WSDLParser.pm
|
||||||
t/lib/Test/SOAPMessage.pm
|
t/lib/Test/SOAP/WSDL/Generator/Iterator/WSDL11.pm
|
||||||
|
t/lib/Test/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
||||||
|
t/lib/Test/SOAP/WSDL/Tester.pm
|
||||||
t/lib/Typelib/Base.pm
|
t/lib/Typelib/Base.pm
|
||||||
t/lib/Typelib/TEnqueueMessage.pm
|
t/lib/Typelib/TEnqueueMessage.pm
|
||||||
t/lib/Typelib/TMessage.pm
|
t/lib/Typelib/TMessage.pm
|
||||||
t/SOAP/WSDL/01_use.t
|
t/SOAP/WSDL.t
|
||||||
t/SOAP/WSDL/02_port.t
|
t/SOAP/WSDL/02_port.t
|
||||||
t/SOAP/WSDL/03_complexType-all.t
|
t/SOAP/WSDL/03_complexType-all.t
|
||||||
t/SOAP/WSDL/03_complexType-choice.t
|
t/SOAP/WSDL/03_complexType-choice.t
|
||||||
@@ -259,23 +362,47 @@ t/SOAP/WSDL/05_simpleType-union.t
|
|||||||
t/SOAP/WSDL/06_keep_alive.t
|
t/SOAP/WSDL/06_keep_alive.t
|
||||||
t/SOAP/WSDL/11_helloworld.NET.t
|
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/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
|
||||||
|
t/SOAP/WSDL/Expat/Base.t
|
||||||
|
t/SOAP/WSDL/Expat/MessageParser.t
|
||||||
|
t/SOAP/WSDL/Expat/WSDLParser.t
|
||||||
t/SOAP/WSDL/Factory/Deserializer.t
|
t/SOAP/WSDL/Factory/Deserializer.t
|
||||||
t/SOAP/WSDL/Factory/Serializer.t
|
t/SOAP/WSDL/Factory/Serializer.t
|
||||||
t/SOAP/WSDL/Factory/Transport.t
|
t/SOAP/WSDL/Factory/Transport.t
|
||||||
t/SOAP/WSDL/Generator/Template.t
|
t/SOAP/WSDL/Generator/Template.t
|
||||||
t/SOAP/WSDL/Generator/Visitor.t
|
t/SOAP/WSDL/Generator/Visitor.t
|
||||||
t/SOAP/WSDL/Generator/Visitor/Typemap.t
|
t/SOAP/WSDL/Generator/Visitor/Typemap.t
|
||||||
t/SOAP/WSDL/Generator/XCS.t
|
|
||||||
t/SOAP/WSDL/Generator/XSD.t
|
t/SOAP/WSDL/Generator/XSD.t
|
||||||
|
t/SOAP/WSDL/Generator/XSD_custom_resolver.t
|
||||||
|
t/SOAP/WSDL/Generator/XSD_dot_names.t
|
||||||
|
t/SOAP/WSDL/Generator/XSD_nested_complextype.t
|
||||||
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
||||||
|
t/SOAP/WSDL/Part.t
|
||||||
|
t/SOAP/WSDL/PortType.t
|
||||||
|
t/SOAP/WSDL/Serializer/XSD.t
|
||||||
|
t/SOAP/WSDL/Server.t
|
||||||
|
t/SOAP/WSDL/Server/CGI.t
|
||||||
|
t/SOAP/WSDL/Server/Mod_Perl2.t
|
||||||
t/SOAP/WSDL/Transport/01_Test.t
|
t/SOAP/WSDL/Transport/01_Test.t
|
||||||
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/Transport/HTTP.t
|
||||||
t/SOAP/WSDL/Typelib/Fault11.t
|
t/SOAP/WSDL/Typelib/Fault11.t
|
||||||
|
t/SOAP/WSDL/Types.t
|
||||||
|
t/SOAP/WSDL/XSD/Attribute.t
|
||||||
|
t/SOAP/WSDL/XSD/AttributeGroup.t
|
||||||
|
t/SOAP/WSDL/XSD/Builtin.t
|
||||||
|
t/SOAP/WSDL/XSD/ComplexType.t
|
||||||
|
t/SOAP/WSDL/XSD/Element.t
|
||||||
|
t/SOAP/WSDL/XSD/Enumeration.t
|
||||||
|
t/SOAP/WSDL/XSD/Schema.t
|
||||||
|
t/SOAP/WSDL/XSD/SimpleType.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
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
||||||
@@ -296,6 +423,7 @@ t/SOAP/WSDL/XSD/Typelib/Builtin/IDREFS.t
|
|||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/int.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/int.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/integer.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/integer.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/language.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/language.t
|
||||||
|
t/SOAP/WSDL/XSD/Typelib/Builtin/list.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/long.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/long.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/Name.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/Name.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/NCName.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/NCName.t
|
||||||
@@ -317,6 +445,11 @@ t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedLong.t
|
|||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/ComplexType.t
|
t/SOAP/WSDL/XSD/Typelib/ComplexType.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Element.t
|
t/SOAP/WSDL/XSD/Typelib/Element.t
|
||||||
|
t/SOAP/WSDL_1.wsdl
|
||||||
|
t/SOAP/WSDL_EMPTY_DEFINITIONS.wsdl
|
||||||
|
t/SOAP/WSDL_NO_BINDING.wsdl
|
||||||
|
t/SOAP/WSDL_NO_MESSAGE.wsdl
|
||||||
|
t/SOAP/WSDL_NO_PORTTYPE.wsdl
|
||||||
t/test.wsdl
|
t/test.wsdl
|
||||||
TEST_COVERAGE
|
TEST_COVERAGE
|
||||||
TODO
|
TODO
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: SOAP-WSDL
|
name: SOAP-WSDL
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
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
|
||||||
@@ -8,8 +8,7 @@ license: artistic
|
|||||||
resources:
|
resources:
|
||||||
license: http://opensource.org/licenses/artistic-license.php
|
license: http://opensource.org/licenses/artistic-license.php
|
||||||
requires:
|
requires:
|
||||||
Class::Std: v0.0.8
|
Class::Std::Fast: 0.0.5
|
||||||
Class::Std::Storable: 0
|
|
||||||
Data::Dumper: 0
|
Data::Dumper: 0
|
||||||
Date::Format: 0
|
Date::Format: 0
|
||||||
Date::Parse: 0
|
Date::Parse: 0
|
||||||
@@ -18,134 +17,244 @@ requires:
|
|||||||
Getopt::Long: 0
|
Getopt::Long: 0
|
||||||
LWP::UserAgent: 0
|
LWP::UserAgent: 0
|
||||||
List::Util: 0
|
List::Util: 0
|
||||||
Template: 0
|
Template: 2.18
|
||||||
Term::ReadKey: 0
|
Term::ReadKey: 0
|
||||||
|
URI: 0
|
||||||
XML::Parser::Expat: 0
|
XML::Parser::Expat: 0
|
||||||
perl: 5.8.0
|
perl: 5.8.0
|
||||||
|
build_requires:
|
||||||
|
Class::Std::Fast: 0.0.5
|
||||||
|
Cwd: 0
|
||||||
|
Date::Format: 0
|
||||||
|
Date::Parse: 0
|
||||||
|
File::Basename: 0
|
||||||
|
File::Path: 0
|
||||||
|
File::Spec: 0
|
||||||
|
Getopt::Long: 0
|
||||||
|
LWP::UserAgent: 0
|
||||||
|
List::Util: 0
|
||||||
|
Module::Build: 0
|
||||||
|
Storable: 0
|
||||||
|
Template: 2.18
|
||||||
|
Test::More: 0
|
||||||
|
XML::Parser::Expat: 0
|
||||||
provides:
|
provides:
|
||||||
SOAP::WSDL:
|
SOAP::WSDL:
|
||||||
file: lib/SOAP/WSDL.pm
|
file: lib/SOAP/WSDL.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Base:
|
SOAP::WSDL::Base:
|
||||||
file: lib/SOAP/WSDL/Base.pm
|
file: lib/SOAP/WSDL/Base.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Binding:
|
SOAP::WSDL::Binding:
|
||||||
file: lib/SOAP/WSDL/Binding.pm
|
file: lib/SOAP/WSDL/Binding.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Client:
|
SOAP::WSDL::Client:
|
||||||
file: lib/SOAP/WSDL/Client.pm
|
file: lib/SOAP/WSDL/Client.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Client::Base:
|
SOAP::WSDL::Client::Base:
|
||||||
file: lib/SOAP/WSDL/Client/Base.pm
|
file: lib/SOAP/WSDL/Client/Base.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Definitions:
|
SOAP::WSDL::Definitions:
|
||||||
file: lib/SOAP/WSDL/Definitions.pm
|
file: lib/SOAP/WSDL/Definitions.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Deserializer::Hash:
|
SOAP::WSDL::Deserializer::Hash:
|
||||||
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Deserializer::SOM:
|
SOAP::WSDL::Deserializer::SOM:
|
||||||
file: lib/SOAP/WSDL/Deserializer/SOM.pm
|
file: lib/SOAP/WSDL/Deserializer/SOM.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Deserializer::XSD:
|
SOAP::WSDL::Deserializer::XSD:
|
||||||
file: lib/SOAP/WSDL/Deserializer/XSD.pm
|
file: lib/SOAP/WSDL/Deserializer/XSD.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Expat::Base:
|
SOAP::WSDL::Expat::Base:
|
||||||
file: lib/SOAP/WSDL/Expat/Base.pm
|
file: lib/SOAP/WSDL/Expat/Base.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Expat::Message2Hash:
|
SOAP::WSDL::Expat::Message2Hash:
|
||||||
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Expat::MessageParser:
|
SOAP::WSDL::Expat::MessageParser:
|
||||||
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Expat::MessageStreamParser:
|
SOAP::WSDL::Expat::MessageStreamParser:
|
||||||
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Expat::WSDLParser:
|
||||||
|
file: lib/SOAP/WSDL/Expat/WSDLParser.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Factory::Deserializer:
|
SOAP::WSDL::Factory::Deserializer:
|
||||||
file: lib/SOAP/WSDL/Factory/Deserializer.pm
|
file: lib/SOAP/WSDL/Factory/Deserializer.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Factory::Generator:
|
SOAP::WSDL::Factory::Generator:
|
||||||
file: lib/SOAP/WSDL/Factory/Generator.pm
|
file: lib/SOAP/WSDL/Factory/Generator.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::Factory::Serializer:
|
SOAP::WSDL::Factory::Serializer:
|
||||||
file: lib/SOAP/WSDL/Factory/Serializer.pm
|
file: lib/SOAP/WSDL/Factory/Serializer.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
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_17
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Generator::Iterator::WSDL11:
|
||||||
|
file: lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Generator::PrefixResolver:
|
||||||
|
file: lib/SOAP/WSDL/Generator/PrefixResolver.pm
|
||||||
|
version: 2.00.02
|
||||||
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_17
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Generator::Template::Plugin::XSD:
|
||||||
|
file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Generator::Template::XSD:
|
SOAP::WSDL::Generator::Template::XSD:
|
||||||
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Generator::Visitor:
|
SOAP::WSDL::Generator::Visitor:
|
||||||
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Generator::Visitor::Typelib:
|
SOAP::WSDL::Generator::Visitor::Typelib:
|
||||||
file: lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
|
file: lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Generator::Visitor::Typemap:
|
SOAP::WSDL::Generator::Visitor::Typemap:
|
||||||
file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Message:
|
SOAP::WSDL::Message:
|
||||||
file: lib/SOAP/WSDL/Message.pm
|
file: lib/SOAP/WSDL/Message.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::OpMessage:
|
SOAP::WSDL::OpMessage:
|
||||||
file: lib/SOAP/WSDL/OpMessage.pm
|
file: lib/SOAP/WSDL/OpMessage.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Operation:
|
SOAP::WSDL::Operation:
|
||||||
file: lib/SOAP/WSDL/Operation.pm
|
file: lib/SOAP/WSDL/Operation.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Part:
|
SOAP::WSDL::Part:
|
||||||
file: lib/SOAP/WSDL/Part.pm
|
file: lib/SOAP/WSDL/Part.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Port:
|
SOAP::WSDL::Port:
|
||||||
file: lib/SOAP/WSDL/Port.pm
|
file: lib/SOAP/WSDL/Port.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::PortType:
|
SOAP::WSDL::PortType:
|
||||||
file: lib/SOAP/WSDL/PortType.pm
|
file: lib/SOAP/WSDL/PortType.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::SOAP::Address:
|
SOAP::WSDL::SOAP::Address:
|
||||||
file: lib/SOAP/WSDL/SOAP/Address.pm
|
file: lib/SOAP/WSDL/SOAP/Address.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::SOAP::Body:
|
SOAP::WSDL::SOAP::Body:
|
||||||
file: lib/SOAP/WSDL/SOAP/Body.pm
|
file: lib/SOAP/WSDL/SOAP/Body.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::SOAP::Header:
|
SOAP::WSDL::SOAP::Header:
|
||||||
file: lib/SOAP/WSDL/SOAP/Header.pm
|
file: lib/SOAP/WSDL/SOAP/Header.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::SOAP::HeaderFault:
|
SOAP::WSDL::SOAP::HeaderFault:
|
||||||
file: lib/SOAP/WSDL/SOAP/HeaderFault.pm
|
file: lib/SOAP/WSDL/SOAP/HeaderFault.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::SOAP::Operation:
|
SOAP::WSDL::SOAP::Operation:
|
||||||
file: lib/SOAP/WSDL/SOAP/Operation.pm
|
file: lib/SOAP/WSDL/SOAP/Operation.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::SOAP::Typelib::Fault11:
|
SOAP::WSDL::SOAP::Typelib::Fault11:
|
||||||
file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
|
file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Serializer::XSD:
|
SOAP::WSDL::Serializer::XSD:
|
||||||
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
||||||
version: 2.00_24
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Server:
|
||||||
|
file: lib/SOAP/WSDL/Server.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Server::CGI:
|
||||||
|
file: lib/SOAP/WSDL/Server/CGI.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::Server::Mod_Perl2:
|
||||||
|
file: lib/SOAP/WSDL/Server/Mod_Perl2.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Service:
|
SOAP::WSDL::Service:
|
||||||
file: lib/SOAP/WSDL/Service.pm
|
file: lib/SOAP/WSDL/Service.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Transport::HTTP:
|
SOAP::WSDL::Transport::HTTP:
|
||||||
file: lib/SOAP/WSDL/Transport/HTTP.pm
|
file: lib/SOAP/WSDL/Transport/HTTP.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Transport::Loopback:
|
SOAP::WSDL::Transport::Loopback:
|
||||||
file: lib/SOAP/WSDL/Transport/Loopback.pm
|
file: lib/SOAP/WSDL/Transport/Loopback.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::Transport::Test:
|
SOAP::WSDL::Transport::Test:
|
||||||
file: lib/SOAP/WSDL/Transport/Test.pm
|
file: lib/SOAP/WSDL/Transport/Test.pm
|
||||||
version: 2.00_14
|
version: 2.00.02
|
||||||
SOAP::WSDL::TypeLookup:
|
SOAP::WSDL::TypeLookup:
|
||||||
file: lib/SOAP/WSDL/TypeLookup.pm
|
file: lib/SOAP/WSDL/TypeLookup.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::Types:
|
SOAP::WSDL::Types:
|
||||||
file: lib/SOAP/WSDL/Types.pm
|
file: lib/SOAP/WSDL/Types.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Annotation:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Annotation.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Attribute:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Attribute.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::AttributeGroup:
|
||||||
|
file: lib/SOAP/WSDL/XSD/AttributeGroup.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Builtin:
|
SOAP::WSDL::XSD::Builtin:
|
||||||
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
||||||
|
version: 2.00.02
|
||||||
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_17
|
version: 2.00.02
|
||||||
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_22
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Enumeration:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Enumeration.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::FractionDigits:
|
||||||
|
file: lib/SOAP/WSDL/XSD/FractionDigits.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Group:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Group.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Length:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Length.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::MaxExclusive:
|
||||||
|
file: lib/SOAP/WSDL/XSD/MaxExclusive.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::MaxInclusive:
|
||||||
|
file: lib/SOAP/WSDL/XSD/MaxInclusive.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::MaxLength:
|
||||||
|
file: lib/SOAP/WSDL/XSD/MaxLength.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::MinExclusive:
|
||||||
|
file: lib/SOAP/WSDL/XSD/MinExclusive.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::MinInclusive:
|
||||||
|
file: lib/SOAP/WSDL/XSD/MinInclusive.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::MinLength:
|
||||||
|
file: lib/SOAP/WSDL/XSD/MinLength.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Pattern:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Pattern.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Schema:
|
SOAP::WSDL::XSD::Schema:
|
||||||
file: lib/SOAP/WSDL/XSD/Schema.pm
|
file: lib/SOAP/WSDL/XSD/Schema.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Schema::Builtin:
|
SOAP::WSDL::XSD::Schema::Builtin:
|
||||||
file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::SimpleType:
|
SOAP::WSDL::XSD::SimpleType:
|
||||||
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::TotalDigits:
|
||||||
|
file: lib/SOAP/WSDL/XSD/TotalDigits.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Typelib::Attribute:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||||
|
version: 2.00.02
|
||||||
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_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::ENTITY:
|
SOAP::WSDL::XSD::Typelib::Builtin::ENTITY:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::ID:
|
SOAP::WSDL::XSD::Typelib::Builtin::ID:
|
||||||
@@ -170,13 +279,14 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::anyType:
|
SOAP::WSDL::XSD::Typelib::Builtin::anyType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::boolean:
|
SOAP::WSDL::XSD::Typelib::Builtin::boolean:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm
|
||||||
version: 2.00_17
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::byte:
|
SOAP::WSDL::XSD::Typelib::Builtin::byte:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::date:
|
SOAP::WSDL::XSD::Typelib::Builtin::date:
|
||||||
@@ -229,7 +339,7 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::time:
|
SOAP::WSDL::XSD::Typelib::Builtin::time:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm
|
||||||
version: 2.00_18
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::token:
|
SOAP::WSDL::XSD::Typelib::Builtin::token:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte:
|
SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte:
|
||||||
@@ -242,14 +352,19 @@ 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_24
|
version: 2.1.0
|
||||||
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_24
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||||
|
version: 2.00.02
|
||||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||||
|
version: 2.00.02
|
||||||
|
SOAP::WSDL::XSD::WhiteSpace:
|
||||||
|
file: lib/SOAP/WSDL/XSD/WhiteSpace.pm
|
||||||
|
version: 2.00.02
|
||||||
generated_by: Module::Build version 0.2808
|
generated_by: Module::Build version 0.2808
|
||||||
meta-spec:
|
meta-spec:
|
||||||
url: http://module-build.sourceforge.net/META-spec-v1.2.html
|
url: http://module-build.sourceforge.net/META-spec-v1.2.html
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
MIGRATING
|
||||||
|
---------
|
||||||
|
MIGRATING FROM PRE-2.00_33
|
||||||
|
--------------------------
|
||||||
|
The handling of stringification of SOAP::WSDL::XSD simpleType objects with
|
||||||
|
undef values changed in 2.00_33.
|
||||||
|
|
||||||
|
While 2.00_32 and before returned undef on stringification of a undef value,
|
||||||
|
>=2.00_33 now returns an empty string.
|
||||||
|
|
||||||
|
This is due to common usage in templates or the like, where undef is likely
|
||||||
|
to produce a warning, and the unreliable behavior of
|
||||||
|
$obj eq undef
|
||||||
|
which behaves differently in different versions of perl.
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Migrating from 2.00_xx
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Background
|
||||||
|
|
||||||
|
SOAP::WSDL 2.00_xx has used Class::Std as base for its inside out objects
|
||||||
|
up to 2.00_24. For performance reasons, now Class::Std::Fast is used.
|
||||||
|
As Class::Std::Fast is a drop-in replacement for Class::Std, there should be
|
||||||
|
no need to change anything in your (handwritten) code.
|
||||||
|
|
||||||
|
Generated interfaces
|
||||||
|
|
||||||
|
SOAP::WSDL's internal structure has changed, and this change needs to
|
||||||
|
be reflected in all generated classes.
|
||||||
|
|
||||||
|
This means you have to re-generate your interfaces (in case you use generated
|
||||||
|
interfaces)
|
||||||
|
|
||||||
|
Typemaps
|
||||||
|
|
||||||
|
SOAP::WSDL now tries to load all typemap classes at once from 2.00_25 on.
|
||||||
|
|
||||||
|
If you use __SKIP__ in your typemaps, you'll have to comment out all
|
||||||
|
paths deeper than the path marked with __SKIP__ - if you don't, SOAP::WSDL
|
||||||
|
will try to load all correspondent classes.
|
||||||
|
|
||||||
|
Migrating from 1.xx
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Background
|
||||||
|
|
||||||
|
SOAP::WSDL uses a custom WSDL parser and serializer. It does not rely on XPath
|
||||||
|
for on the fly WSDL processing, nor does it use SOAP::Data objects for
|
||||||
|
encoding any more.
|
||||||
|
|
||||||
|
You should be able to use your existing code under most circumstances.
|
||||||
|
SOAP::WSDL is the compatibility module for old interfaces.
|
||||||
|
|
||||||
|
Overloading
|
||||||
|
|
||||||
|
Message overloading (as introduced in 1.23) is not supported any more.
|
||||||
|
|
||||||
|
Message overloading is prohibited by the WS-I basic profile, therefore
|
||||||
|
SOAP::WSDL does not implement it any more.
|
||||||
+1
-26
@@ -1,30 +1,5 @@
|
|||||||
# Note: this file was auto-generated by Module::Build::Compat version 0.03
|
# Note: this file was auto-generated by Module::Build::Compat version 0.03
|
||||||
|
use Module::Build::Compat 0.02;
|
||||||
unless (eval "use Module::Build::Compat 0.02; 1" ) {
|
|
||||||
print "This module requires Module::Build to install itself.\n";
|
|
||||||
|
|
||||||
require ExtUtils::MakeMaker;
|
|
||||||
my $yn = ExtUtils::MakeMaker::prompt
|
|
||||||
(' Install Module::Build now from CPAN?', 'y');
|
|
||||||
|
|
||||||
unless ($yn =~ /^y/i) {
|
|
||||||
die " *** Cannot install without Module::Build. Exiting ...\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
require Cwd;
|
|
||||||
require File::Spec;
|
|
||||||
require CPAN;
|
|
||||||
|
|
||||||
# Save this 'cause CPAN will chdir all over the place.
|
|
||||||
my $cwd = Cwd::cwd();
|
|
||||||
|
|
||||||
CPAN::Shell->install('Module::Build::Compat');
|
|
||||||
CPAN::Shell->expand("Module", "Module::Build::Compat")->uptodate
|
|
||||||
or die "Couldn't install Module::Build, giving up.\n";
|
|
||||||
|
|
||||||
chdir $cwd or die "Cannot chdir() back to $cwd: $!";
|
|
||||||
}
|
|
||||||
eval "use Module::Build::Compat 0.02; 1" or die $@;
|
|
||||||
|
|
||||||
Module::Build::Compat->run_build_pl(args => \@ARGV);
|
Module::Build::Compat->run_build_pl(args => \@ARGV);
|
||||||
require Module::Build;
|
require Module::Build;
|
||||||
|
|||||||
@@ -3,7 +3,25 @@ INTRO
|
|||||||
|
|
||||||
SOAP-WSDL provides a SOAP client with WSDL support.
|
SOAP-WSDL provides a SOAP client with WSDL support.
|
||||||
|
|
||||||
This is a developer release - everything may (and most things will) change.
|
SUBCLASSING
|
||||||
|
-----------
|
||||||
|
|
||||||
|
SOAP-WSDL is still under very active development. Please don't build
|
||||||
|
applications using the following modules directly:
|
||||||
|
|
||||||
|
- SOAP::WSDL::Definitions
|
||||||
|
- SOAP::WSDL::Port
|
||||||
|
- SOAP::WSDL::PortType
|
||||||
|
- SOAP::WSDL::Binding
|
||||||
|
- SOAP::WSDL::Message
|
||||||
|
- SOAP::WSDL::Operation
|
||||||
|
- SOAP::WSDL::OpMessage
|
||||||
|
- SOAP::WSDL::Part
|
||||||
|
- SOAP::WSDL::Service
|
||||||
|
- SOAP::WSDL::Types
|
||||||
|
- SOAP::WSDL::XSD::Schema
|
||||||
|
|
||||||
|
Those will be replaced some time in the future.
|
||||||
|
|
||||||
INSTALLING
|
INSTALLING
|
||||||
----------
|
----------
|
||||||
|
|||||||
+8
-2
@@ -2,10 +2,16 @@
|
|||||||
#
|
#
|
||||||
# To get a complete coverage report, just run this file as a shell script
|
# To get a complete coverage report, just run this file as a shell script
|
||||||
# on a linux box (or execute the equivalent commands on another OS):
|
# on a linux box (or execute the equivalent commands on another OS):
|
||||||
|
#
|
||||||
|
# Note that this shell script requires Devel::CoverX::Covered - if you
|
||||||
|
# don't have it, comment out the line noted below
|
||||||
|
#
|
||||||
cd t/
|
cd t/
|
||||||
|
cover -delete
|
||||||
|
find . -type f -name '*.t' | xargs -n 1 /usr/bin/perl -MDevel::Cover=-silent,1,-summary,0 -I../lib > /dev/null
|
||||||
|
|
||||||
find . -type f -name '*.t' | xargs -n 1 /usr/bin/perl -MDevel::Cover=-silent,1,-summary,0 -I../lib
|
# Devel::CoverX::Covered
|
||||||
|
covered runs
|
||||||
|
|
||||||
cover -ignore_re \.t$ -ignore_re ^lib -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch"
|
cover -ignore_re \.t$ -ignore_re ^lib -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch"
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,19 @@
|
|||||||
TODO list for SOAP::WSDL
|
TODO list for SOAP::WSDL
|
||||||
|
|
||||||
2.00 Pre-releases
|
|
||||||
--------
|
|
||||||
|
|
||||||
2.1 release
|
2.1 release
|
||||||
--------
|
--------
|
||||||
* Support namespaces in SOAP message payload(#1809057)
|
* Support namespaces in SOAP message payload [ 1809057 ]
|
||||||
|
|
||||||
* Support the xsi:type attribute on derived types on the wire(#1809059)
|
* Support the xsi:type attribute on derived types on the wire [ 1809059 ]
|
||||||
|
|
||||||
* SOAP1.2 support (#1803331)
|
* SOAP1.2 support [ 1803331 ]
|
||||||
|
|
||||||
2.2 release
|
2.2 release
|
||||||
--------
|
--------
|
||||||
* XML schema support ("minimal conformant") (#1764845)
|
* XML schema support ("minimal conformant") [ 1764845 ]
|
||||||
|
|
||||||
* Support SOAP attachments
|
* Support SOAP attachments
|
||||||
|
|
||||||
* Act as SOAP Server
|
|
||||||
|
|
||||||
3.0 release
|
3.0 release
|
||||||
--------
|
--------
|
||||||
We're not thinking that far ahead right now.
|
We're not thinking that far ahead right now.
|
||||||
|
|||||||
+69
-20
@@ -1,16 +1,18 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
%DB::packages=(SOAP::WSDL::Expat::MessageParser => 1);
|
|
||||||
%DB::packages=(SOAP::WSDL::Expat::MessageParser => 1);
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
use lib 'lib';
|
use lib '../../Class-Std-Fast/lib';
|
||||||
|
use lib '/home/martin/workspace/SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '/home/martin/workspace/SOAP-WSDL_XS/blib/arch';
|
||||||
use lib '../t/lib';
|
use lib '../t/lib';
|
||||||
# use SOAP::WSDL::SAX::MessageHandler;
|
# use SOAP::WSDL::SAX::MessageHandler;
|
||||||
|
|
||||||
use Benchmark qw(cmpthese timethese);
|
use Benchmark qw(cmpthese timethese);
|
||||||
use SOAP::WSDL::Expat::MessageParser;
|
use SOAP::WSDL::Expat::MessageParser;
|
||||||
use SOAP::WSDL::Expat::Message2Hash;
|
use SOAP::WSDL::Expat::Message2Hash;
|
||||||
|
use SOAP::WSDL::Expat::MessageParser_XS;
|
||||||
|
use SOAP::Lite;
|
||||||
use XML::Simple;
|
use XML::Simple;
|
||||||
use XML::LibXML;
|
use XML::LibXML;
|
||||||
use MyComplexType;
|
use MyComplexType;
|
||||||
@@ -22,19 +24,45 @@ my $xml = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta
|
|||||||
<SOAP-ENV:Body>
|
<SOAP-ENV:Body>
|
||||||
<MyAtomicComplexTypeElement xmlns="urn:Test" >
|
<MyAtomicComplexTypeElement xmlns="urn:Test" >
|
||||||
<test>
|
<test>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test2</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test3</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test4</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test5</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test6</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test7</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test8</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test9</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test10</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test11</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test12</test2>
|
||||||
<test2 >Test2</test2>
|
<test2 >Test13</test2>
|
||||||
<test2 >Test55</test2>
|
<test2 >Test55</test2>
|
||||||
|
<test2 >Test14</test2>
|
||||||
|
<test2 >Test15</test2>
|
||||||
|
<test2 >Test16</test2>
|
||||||
|
<test2 >Test17</test2>
|
||||||
|
<test2 >Test18</test2>
|
||||||
|
<test2 >Test19</test2>
|
||||||
|
<test2 >Test20</test2>
|
||||||
|
<test2 >Test21</test2>
|
||||||
|
<test2 >Test22</test2>
|
||||||
|
<test2 >Test23</test2>
|
||||||
|
<test2 >Test24</test2>
|
||||||
|
<test2 >Test25</test2>
|
||||||
|
<test2 >Test565</test2>
|
||||||
|
<test2 >Test27</test2>
|
||||||
|
<test2 >Test28</test2>
|
||||||
|
<test2 >Test29</test2>
|
||||||
|
<test2 >Test30</test2>
|
||||||
|
<test2 >Test31</test2>
|
||||||
|
<test2 >Test32</test2>
|
||||||
|
<test2 >Test33</test2>
|
||||||
|
<test2 >Test34</test2>
|
||||||
|
<test2 >Test35</test2>
|
||||||
|
<test2 >Test36</test2>
|
||||||
|
<test2 >Test37</test2>
|
||||||
|
<test2 >Test38</test2>
|
||||||
|
<test2 >Test55</test2>
|
||||||
</test>
|
</test>
|
||||||
</MyAtomicComplexTypeElement>
|
</MyAtomicComplexTypeElement>
|
||||||
</SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
</SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||||
@@ -55,6 +83,12 @@ my $libxml = XML::LibXML->new();
|
|||||||
$libxml->keep_blanks(0);
|
$libxml->keep_blanks(0);
|
||||||
my @data;
|
my @data;
|
||||||
|
|
||||||
|
my $deserializer = SOAP::Deserializer->new();
|
||||||
|
|
||||||
|
my $parser_xs = SOAP::WSDL::Expat::MessageParser_XS->new({
|
||||||
|
class_resolver => 'FakeResolver'
|
||||||
|
});
|
||||||
|
|
||||||
sub libxml_test {
|
sub libxml_test {
|
||||||
my $dom = $libxml->parse_string( $xml );
|
my $dom = $libxml->parse_string( $xml );
|
||||||
push @data, dom2hash( $dom->firstChild );
|
push @data, dom2hash( $dom->firstChild );
|
||||||
@@ -92,19 +126,17 @@ sub dom2hash {
|
|||||||
}
|
}
|
||||||
return $_[1];
|
return $_[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
cmpthese 5000,
|
cmpthese 5000,
|
||||||
{
|
{
|
||||||
'SOAP::WSDL (Hash)' => sub { push @data, $hash_parser->parse( $xml ) },
|
'SOAP::WSDL (Hash)' => sub { push @data, $hash_parser->parse( $xml ) },
|
||||||
'SOAP::WSDL (XSD)' => sub { push @data, $parser->parse( $xml ) },
|
'SOAP::WSDL (XSD)' => sub { push @data, $parser->parse( $xml ) },
|
||||||
|
'SOAP::WSDL_XS (XSD)' => sub { push @data, $parser_xs->parse_string( $xml ) },
|
||||||
'XML::Simple (Hash)' => sub { push @data, XMLin $xml },
|
'XML::Simple (Hash)' => sub { push @data, XMLin $xml },
|
||||||
'XML::LibXML (DOM)' => sub { push @data, $libxml->parse_string( $xml ) },
|
'XML::LibXML (DOM)' => sub { push @data, $libxml->parse_string( $xml ) },
|
||||||
'XML::LibXML (Hash)' => \&libxml_test,
|
'XML::LibXML (Hash)' => \&libxml_test,
|
||||||
|
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( $xml ) },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# for (1..10000) { push @data, $parser->parse( $xml ) };
|
|
||||||
|
|
||||||
# data classes reside in t/lib/Typelib/
|
# data classes reside in t/lib/Typelib/
|
||||||
BEGIN {
|
BEGIN {
|
||||||
package FakeResolver;
|
package FakeResolver;
|
||||||
@@ -115,6 +147,8 @@ BEGIN {
|
|||||||
'MyAtomicComplexTypeElement/test/test2' => 'MyTestElement2',
|
'MyAtomicComplexTypeElement/test/test2' => 'MyTestElement2',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sub get_typemap { return \%class_list; };
|
||||||
|
|
||||||
sub get_map { return \%class_list };
|
sub get_map { return \%class_list };
|
||||||
|
|
||||||
sub new { return bless {}, 'FakeResolver' };
|
sub new { return bless {}, 'FakeResolver' };
|
||||||
@@ -126,3 +160,18 @@ BEGIN {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
Output on my machine:
|
||||||
|
|
||||||
|
xml length: 641 bytes
|
||||||
|
Rate SOAP::Lite XML::Simple (Hash) SOAP::WSDL (XSD) XML::LibXML (Hash) SOAP::WSDL (Hash) SOAP::WSDL_XS (XSD) XML::LibXML (DOM)
|
||||||
|
SOAP::Lite 446/s -- -54% -72% -73% -80% -95% -96%
|
||||||
|
XML::Simple (Hash) 963/s 116% -- -39% -41% -57% -89% -91%
|
||||||
|
SOAP::WSDL (XSD) 1587/s 256% 65% -- -3% -29% -81% -86%
|
||||||
|
XML::LibXML (Hash) 1629/s 265% 69% 3% -- -27% -81% -85%
|
||||||
|
SOAP::WSDL (Hash) 2222/s 398% 131% 40% 36% -- -74% -80%
|
||||||
|
SOAP::WSDL_XS (XSD) 8475/s 1798% 780% 434% 420% 281% -- -24%
|
||||||
|
XML::LibXML (DOM) 11111/s 2389% 1053% 600% 582% 400% 31% --
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
Memory footprints for example/ scripts comparing SOAP::WSDL, SOAP::Lite and
|
||||||
|
XML::Compile::SOAP
|
||||||
|
|
||||||
|
Results with perl-5.8.8 on Ubuntu 8.04 (x86):
|
||||||
|
|
||||||
|
PID %CPU %MEM VSZ RSS COMMAND
|
||||||
|
10183 12.0 1.1 14292 11492 perl -I../lib hello.pl
|
||||||
|
10554 7.2 0.9 12636 9828 perl hello_lite.pl
|
||||||
|
10224 17.5 1.6 20780 17012 perl hello_compile.pl
|
||||||
|
10287 25.0 1.1 14680 11776 perl -I../lib person.pl
|
||||||
|
10313 24.0 1.6 21068 17312 perl person_compile.pl
|
||||||
|
|
||||||
|
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
|
||||||
|
Platform:
|
||||||
|
osname=linux, osvers=2.6.15.7, archname=i486-linux-gnu-thread-multi
|
||||||
|
uname='linux palmer 2.6.15.7 #1 smp thu sep 7 19:42:20 utc 2006 i686 gnulinux '
|
||||||
|
config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des'
|
||||||
|
hint=recommended, useposix=true, d_sigaction=define
|
||||||
|
usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
|
||||||
|
useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
|
||||||
|
use64bitint=undef use64bitall=undef uselongdouble=undef
|
||||||
|
usemymalloc=n, bincompat5005=undef
|
||||||
|
Compiler:
|
||||||
|
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
|
||||||
|
optimize='-O2',
|
||||||
|
cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
|
||||||
|
ccversion='', gccversion='4.2.3 20071123 (prerelease) (Ubuntu 4.2.2-3ubuntu4)', gccosandvers=''
|
||||||
|
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
|
||||||
|
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
|
||||||
|
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
|
||||||
|
alignbytes=4, prototype=define
|
||||||
|
Linker and Libraries:
|
||||||
|
ld='cc', ldflags =' -L/usr/local/lib'
|
||||||
|
libpth=/usr/local/lib /lib /usr/lib
|
||||||
|
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
|
||||||
|
perllibs=-ldl -lm -lpthread -lc -lcrypt
|
||||||
|
libc=/lib/libc-2.6.1.so, so=so, useshrplib=true, libperl=libperl.so.5.8.8
|
||||||
|
gnulibc_version='2.6.1'
|
||||||
|
Dynamic Linking:
|
||||||
|
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
|
||||||
|
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
|
||||||
|
|
||||||
|
|
||||||
|
Characteristics of this binary (from libperl):
|
||||||
|
Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT
|
||||||
|
PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS
|
||||||
|
USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
|
||||||
|
Built under linux
|
||||||
|
Compiled at Nov 27 2007 10:44:36
|
||||||
|
@INC:
|
||||||
|
/etc/perl
|
||||||
|
/usr/local/lib/perl/5.8.8
|
||||||
|
/usr/local/share/perl/5.8.8
|
||||||
|
/usr/lib/perl5
|
||||||
|
/usr/share/perl5
|
||||||
|
/usr/lib/perl/5.8
|
||||||
|
/usr/share/perl/5.8
|
||||||
|
/usr/local/lib/site_perl
|
||||||
|
.
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
The benchmark directory includes a bunch of benchmarks. The most notable
|
||||||
|
ones are listed below.
|
||||||
|
|
||||||
|
Comparison benchmarks for SOAP::Lite, SOAP::WSDL, SOAP::WSDL_XS, and
|
||||||
|
XML::Compile::WSDP need all of these installed for the benchmark to
|
||||||
|
work (building and adding to the lib path suffices). All comparison benchmarks
|
||||||
|
only account for the client part of the respective modules - the server part
|
||||||
|
is not benchmarked.
|
||||||
|
|
||||||
|
SOAP::WSDL_XS can be obtained from the project's subversion repository at
|
||||||
|
|
||||||
|
https://soap-wsdl.svn.sourceforge.net/svnroot/SOAP-WSDL/SOAP-WSDL_XS/trunk
|
||||||
|
|
||||||
|
Some benchmarks expect to find the SOAP servers "cgi-bin/person.pl" and
|
||||||
|
"cgi-bin/hello.pl" from the examples directory at
|
||||||
|
http://localhost:81/soap-wsdl-test/person.pl and
|
||||||
|
http://localhost:81/soap-wsdl-test/hello.pl
|
||||||
|
|
||||||
|
If the web services are not set up properly, you're benchmarking error
|
||||||
|
creation times.
|
||||||
|
|
||||||
|
To set up a SOAP server using apache, add the following to your apache config:
|
||||||
|
|
||||||
|
# usually in main config
|
||||||
|
Listen 127.0.0.1:81
|
||||||
|
|
||||||
|
# maybe in a
|
||||||
|
#<VirtualHost 127.0.0.1:81> container
|
||||||
|
#
|
||||||
|
ScriptAlias /soap-wsdl-test/ /PATH_TO/SOAP-WSDL/example/cgi-bin/
|
||||||
|
<Directory "/PATH_TO/SOAP-WSDL/example/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
Using mod_perl is highly recommended to cut down benchmarking time.
|
||||||
|
|
||||||
|
COMPARISON BENCHMARKS
|
||||||
|
=====================
|
||||||
|
|
||||||
|
01_expat.t
|
||||||
|
----------
|
||||||
|
Benchmarks XML parsing speed between XML::Simple with XML::Parser as backend,
|
||||||
|
SOAP::Lite, SOAP::WSDL outputting objects, SOAP::WSDL outputting hash refs,
|
||||||
|
XML::LibXML with a simple DOM walker outputting hash refs, XML::LibXML
|
||||||
|
outputting the DOM and SOAP::WSDL_XS.
|
||||||
|
|
||||||
|
No web server required.
|
||||||
|
|
||||||
|
This benchmark sheds light on how much performance is - in theory - reachable
|
||||||
|
by each approach: The XML::LibXML (Hash) benchmark converts the DOM into
|
||||||
|
a nested hash using a recursive function. This is - basically - how
|
||||||
|
XML::Compile works. XML::Simple uses XML::Parser's streaming
|
||||||
|
API. SOAP::WSDL uses XML::Parser::Expat, XML::Parser's low-level backend,
|
||||||
|
to create objects or - in the (Hash) variant - nested hashes similar to
|
||||||
|
those created by XML::Simple.
|
||||||
|
SOAP::WSDL_XS uses a libexpat-based XS parser to create perl objects, and
|
||||||
|
XML::LibXML (DOM) creates a C level libxml2 DOM accessible from perl.
|
||||||
|
|
||||||
|
person.pl:
|
||||||
|
----------
|
||||||
|
Sends a empty requests and receives a response of ca. 10kB.
|
||||||
|
Modeled after a common enterprise setup: "Give me a list of person data sets".
|
||||||
|
|
||||||
|
For this benchmark, XML parsing speed is important. XML generation speed is
|
||||||
|
only weighted in the last two runs, and weights around 1/10 of parsing speed.
|
||||||
|
|
||||||
|
hello.pl:
|
||||||
|
---------
|
||||||
|
Sends a request containing name and given name and politely replies
|
||||||
|
"Hello <given name> <name>".
|
||||||
|
An example for very short requests and responses.
|
||||||
|
|
||||||
|
For this example, handling and generating small requests/responses, and
|
||||||
|
transport speed is important. As the XML transmitted is relatively small, the
|
||||||
|
transport layer's overhead is important.
|
||||||
@@ -2,6 +2,8 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Benchmark;
|
use Benchmark;
|
||||||
use lib '../../lib';
|
use lib '../../lib';
|
||||||
|
use lib '../../../Class-Std-Fast/lib';
|
||||||
|
|
||||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||||
|
|
||||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
||||||
@@ -9,7 +11,7 @@ my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
|||||||
timethese 10000, {
|
timethese 10000, {
|
||||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new() },
|
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new() },
|
||||||
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({
|
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({
|
||||||
value => 'Teststring'
|
value => 'Teststring',
|
||||||
}) },
|
}) },
|
||||||
'set_FOO' => sub { $obj->set_value('Test') },
|
'set_FOO' => sub { $obj->set_value('Test') },
|
||||||
};
|
};
|
||||||
@@ -19,3 +21,37 @@ timethese 1000000, {
|
|||||||
'set_FOO' => sub { $obj->set_value('Test') },
|
'set_FOO' => sub { $obj->set_value('Test') },
|
||||||
'get_FOO' => sub { $data = $obj->get_value() },
|
'get_FOO' => sub { $data = $obj->get_value() },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
Benchmark: timing 10000 iterations of new, new + params, set_FOO...
|
||||||
|
new: 0 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 12048.19/s (n=10000)
|
||||||
|
new + params: 1 wallclock secs ( 0.58 usr + 0.00 sys = 0.58 CPU) @ 17241.38/s (n=10000)
|
||||||
|
set_FOO: 0 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) @ 1000000.00/s (n=10000)
|
||||||
|
(warning: too few iterations for a reliable count)
|
||||||
|
Benchmark: timing 1000000 iterations of get_FOO, set_FOO...
|
||||||
|
get_FOO: 1 wallclock secs ( 1.79 usr + 0.01 sys = 1.80 CPU) @ 555555.56/s (n=1000000)
|
||||||
|
set_FOO: 2 wallclock secs ( 1.44 usr + 0.03 sys = 1.47 CPU) @ 680272.11/s (n=1000000)
|
||||||
|
|
||||||
|
## Fast:
|
||||||
|
Benchmark: timing 10000 iterations of new, new + params, set_FOO...
|
||||||
|
new: 1 wallclock secs ( 0.67 usr + 0.01 sys = 0.68 CPU) @ 14705.88/s (n=10000)
|
||||||
|
new + params: 1 wallclock secs ( 0.54 usr + 0.00 sys = 0.54 CPU) @ 18518.52/s (n=10000)
|
||||||
|
set_FOO: 0 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) @ 1000000.00/s (n=10000)
|
||||||
|
(warning: too few iterations for a reliable count)
|
||||||
|
Benchmark: timing 1000000 iterations of get_FOO, set_FOO...
|
||||||
|
get_FOO: 2 wallclock secs ( 1.11 usr + 0.00 sys = 1.11 CPU) @ 900900.90/s (n=1000000)
|
||||||
|
set_FOO: 2 wallclock secs ( 0.80 usr + 0.00 sys = 0.80 CPU) @ 1250000.00/s (n=1000000)
|
||||||
|
|
||||||
|
## Fast qw(2);
|
||||||
|
Benchmark: timing 10000 iterations of new, new + params, set_FOO...
|
||||||
|
new: 1 wallclock secs ( 0.17 usr + 0.00 sys = 0.17 CPU) @ 58823.53/s (n=10000)
|
||||||
|
(warning: too few iterations for a reliable count)
|
||||||
|
new + params: 0 wallclock secs ( 0.19 usr + 0.00 sys = 0.19 CPU) @ 52631.58/s (n=10000)
|
||||||
|
(warning: too few iterations for a reliable count)
|
||||||
|
set_FOO: 0 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU) @ 1000000.00/s (n=10000)
|
||||||
|
(warning: too few iterations for a reliable count)
|
||||||
|
Benchmark: timing 1000000 iterations of get_FOO, set_FOO...
|
||||||
|
get_FOO: 1 wallclock secs ( 1.12 usr + 0.00 sys = 1.12 CPU) @ 892857.14/s (n=1000000)
|
||||||
|
set_FOO: 0 wallclock secs ( 0.80 usr + 0.01 sys = 0.81 CPU) @ 1234567.90/s (n=1000000)
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Benchmark;
|
use Benchmark;
|
||||||
use lib '../../lib';
|
use lib '../../lib';
|
||||||
|
use lib '../../../Class-Std-Fast/lib';
|
||||||
|
|
||||||
use SOAP::WSDL::XSD::Typelib::Builtin::string;
|
use SOAP::WSDL::XSD::Typelib::Builtin::string;
|
||||||
|
|
||||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
||||||
@@ -9,8 +11,9 @@ my $obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
|||||||
timethese 20000, {
|
timethese 20000, {
|
||||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new() },
|
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new() },
|
||||||
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||||
value => 'Teststring'
|
value => 'Teststring',
|
||||||
}) },
|
})
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
$obj->set_value('Foobar');
|
$obj->set_value('Foobar');
|
||||||
@@ -23,3 +26,32 @@ timethese 1000000, {
|
|||||||
'set_FOO' => sub { $obj->set_value('Test') },
|
'set_FOO' => sub { $obj->set_value('Test') },
|
||||||
'get_FOO' => sub { $data = $obj->get_value() },
|
'get_FOO' => sub { $data = $obj->get_value() },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
Benchmark: timing 20000 iterations of new, new + params...
|
||||||
|
new: 1 wallclock secs ( 0.41 usr + 0.00 sys = 0.41 CPU) @ 48780.49/s (n=20000)
|
||||||
|
new + params: 1 wallclock secs ( 0.53 usr + 0.01 sys = 0.54 CPU) @ 37037.04/s (n=20000)
|
||||||
|
Benchmark: timing 1000000 iterations of get_FOO, set_FOO...
|
||||||
|
get_FOO: 2 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 694444.44/s (n=1000000)
|
||||||
|
set_FOO: 0 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 694444.44/s (n=1000000)
|
||||||
|
|
||||||
|
|
||||||
|
::Fast
|
||||||
|
---
|
||||||
|
Benchmark: timing 20000 iterations of new, new + params...
|
||||||
|
new: 0 wallclock secs ( 0.44 usr + 0.01 sys = 0.45 CPU) @ 44444.44/s (n=20000)
|
||||||
|
new + params: 1 wallclock secs ( 0.55 usr + 0.00 sys = 0.55 CPU) @ 36363.64/s (n=20000)
|
||||||
|
Benchmark: timing 1000000 iterations of get_FOO, set_FOO...
|
||||||
|
get_FOO: 0 wallclock secs ( 0.81 usr + 0.00 sys = 0.81 CPU) @ 1234567.90/s (n=1000000)
|
||||||
|
set_FOO: 2 wallclock secs ( 0.87 usr + 0.01 sys = 0.88 CPU) @ 1136363.64/s (n=1000000)
|
||||||
|
|
||||||
|
::Fast with inlined ID
|
||||||
|
Benchmark: timing 20000 iterations of new, new + params...
|
||||||
|
new: 0 wallclock secs ( 0.41 usr + 0.00 sys = 0.41 CPU) @ 48780.49/s (n=20000)
|
||||||
|
new + params: 1 wallclock secs ( 0.52 usr + 0.00 sys = 0.52 CPU) @ 38461.54/s (n=20000)
|
||||||
|
Benchmark: timing 1000000 iterations of get_FOO, set_FOO...
|
||||||
|
get_FOO: 2 wallclock secs ( 0.80 usr + 0.00 sys = 0.80 CPU) @ 1250000.00/s (n=1000000)
|
||||||
|
set_FOO: 2 wallclock secs ( 0.89 usr + -0.01 sys = 0.88 CPU) @ 1136363.64/s (n=1000000)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
use Benchmark qw(cmpthese);
|
||||||
|
use POSIX ();
|
||||||
|
use Date::Format ();
|
||||||
|
|
||||||
|
my @time_from = localtime;
|
||||||
|
|
||||||
|
print "Comparing POSIX::strftime and Date::Format::strftime '%Y-%m-%dT%H:%M:%S%z'\n\n";
|
||||||
|
print 'POSIX: ', POSIX::strftime('%Y-%m-%dT%H:%M:%S%z', @time_from), "\n";
|
||||||
|
print 'Date::Format: ', Date::Format::strftime('%Y-%m-%dT%H:%M:%S%z', @time_from), "\n";
|
||||||
|
|
||||||
|
|
||||||
|
cmpthese 100000, {
|
||||||
|
POSIX => sub { POSIX::strftime('%Y-%m-%dT%H:%M:%S%z', @time_from) },
|
||||||
|
'Date::Format' => sub { Date::Format::strftime('%Y-%m-%dT%H:%M:%S%z', @time_from) },
|
||||||
|
};
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
results with perl-5.8.8 on Ubuntu 8.04 on a Thinkpad T42 (1.7GHz Dothan):
|
||||||
|
|
||||||
|
Rate Date::Format POSIX
|
||||||
|
Date::Format 10684/s -- -93%
|
||||||
|
POSIX 153846/s 1340% --
|
||||||
|
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use diagnostics;
|
||||||
|
use lib '../example/lib';
|
||||||
|
use lib '../../SOAP-Lite-0.71/lib';
|
||||||
|
use lib '/home/martin/workspace/SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '/home/martin/workspace/SOAP-WSDL_XS/blib/arch';
|
||||||
|
use Data::Dumper;
|
||||||
|
use SOAP::Lite;
|
||||||
|
use XML::Compile::WSDL11;
|
||||||
|
use XML::Compile::Transport::SOAPHTTP;
|
||||||
|
use MyInterfaces::HelloWorld::HelloWorldSoap;
|
||||||
|
use SOAP::WSDL::Deserializer::XSD_XS;
|
||||||
|
use Benchmark qw(cmpthese timethese);
|
||||||
|
|
||||||
|
use SOAP::WSDL::Transport::HTTP;
|
||||||
|
use SOAP::WSDL::Factory::Transport;
|
||||||
|
SOAP::WSDL::Factory::Transport->register('http', 'SOAP::WSDL::Transport::HTTP');
|
||||||
|
|
||||||
|
#my $proxy = 'http://localhost:81/soap-wsdl-test/helloworld.pl';
|
||||||
|
my $proxy = 'http://localhost:81/soap-wsdl-test/helloworld';
|
||||||
|
|
||||||
|
my $lite = SOAP::Lite->new(
|
||||||
|
proxy => $proxy
|
||||||
|
);
|
||||||
|
|
||||||
|
$lite->on_action( sub { "urn:HelloWorld#sayHello" });
|
||||||
|
$lite->autotype(0);
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new({
|
||||||
|
proxy => $proxy,
|
||||||
|
});
|
||||||
|
|
||||||
|
my $soap_xs = MyInterfaces::HelloWorld::HelloWorldSoap->new({
|
||||||
|
proxy => $proxy,
|
||||||
|
});
|
||||||
|
$soap_xs->set_deserializer( SOAP::WSDL::Deserializer::XSD_XS->new() );
|
||||||
|
|
||||||
|
my @result = ();;
|
||||||
|
|
||||||
|
sub wsdl_bench {
|
||||||
|
push @result, $soap->sayHello({
|
||||||
|
name => $ARGV[1] || '"Your name"',
|
||||||
|
givenName => $ARGV[0] || '"Your given name"',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
sub wsdl_xs_bench {
|
||||||
|
push @result, $soap_xs->sayHello({
|
||||||
|
name => $ARGV[1] || '"Your name"',
|
||||||
|
givenName => $ARGV[0] || '"Your given name"',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
my $wsdl = XML::Compile::WSDL11->new('../example/wsdl/11_helloworld.wsdl');
|
||||||
|
my $call = $wsdl->compileClient('sayHello',
|
||||||
|
sloppy_integers => 1,
|
||||||
|
check_values => 0,
|
||||||
|
check_values => 0,
|
||||||
|
validation => 0,
|
||||||
|
);
|
||||||
|
|
||||||
|
sub compile_bench {
|
||||||
|
push @result, $call->(
|
||||||
|
name => $ARGV[1] || '"Your name"',
|
||||||
|
givenName => $ARGV[0] || '"Your given name"',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lite_bench {
|
||||||
|
push @result, $lite->call(
|
||||||
|
SOAP::Data->name("sayHello")
|
||||||
|
->attr({ xmlns => 'urn:HelloWorld' }),
|
||||||
|
SOAP::Data->name('name')->value( $ARGV[1] || '"Your name"'),
|
||||||
|
SOAP::Data->name('givenName')->value( $ARGV[0] || '"Your given name"'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
# give all a chance to perform first-run initializations
|
||||||
|
compile_bench();
|
||||||
|
lite_bench();
|
||||||
|
wsdl_bench();
|
||||||
|
wsdl_xs_bench();
|
||||||
|
|
||||||
|
timethese 150, {
|
||||||
|
'SOAP::WSDL' => \&wsdl_bench,
|
||||||
|
'SOAP::WSDL_XS' => \&wsdl_xs_bench,
|
||||||
|
'XML::Compile' => \&compile_bench,
|
||||||
|
'SOAP::Lite' => \&lite_bench,
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
use lib '../lib';
|
||||||
|
use lib '../example/lib';
|
||||||
|
use lib '../../Class-Std-Fast/lib';
|
||||||
|
use lib '../../SOAP-Lite-0.71/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Benchmark qw(cmpthese);
|
||||||
|
|
||||||
|
use XML::Compile::Transport::SOAPHTTP();
|
||||||
|
use XML::Compile::Util;
|
||||||
|
use XML::Compile::WSDL11;
|
||||||
|
use XML::Simple;
|
||||||
|
|
||||||
|
use SOAP::Lite;
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
use SOAP::WSDL::Deserializer::XSD_XS;
|
||||||
|
use SOAP::WSDL::Factory::Deserializer;
|
||||||
|
|
||||||
|
#
|
||||||
|
# register SOAP::WSDL's transport as default for SOAP::WSDL and SOAP::WSDL_XS
|
||||||
|
# - they use SOAP::Lite's SOAP::Transport::* if available
|
||||||
|
#
|
||||||
|
use SOAP::WSDL::Transport::HTTP;
|
||||||
|
use SOAP::WSDL::Factory::Transport;
|
||||||
|
SOAP::WSDL::Factory::Transport->register('http', 'SOAP::WSDL::Transport::HTTP');
|
||||||
|
|
||||||
|
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
|
||||||
|
|
||||||
|
my $person = {
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => 1, # int
|
||||||
|
},
|
||||||
|
Salutation => 'Salutation0', # string
|
||||||
|
Name => 'Name0', # string
|
||||||
|
GivenName => 'Martin', # string
|
||||||
|
DateOfBirth => '1970-01-01', # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => 'Street 0', # string
|
||||||
|
ZIP => '00000', # string
|
||||||
|
City => 'City0', # string
|
||||||
|
Country => 'Country0', # string
|
||||||
|
PhoneNumber => '++499131123456', # PhoneNumber
|
||||||
|
MobilePhoneNumber => '++49150123456', # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => 'Somestreet 23', # string
|
||||||
|
ZIP => '12345', # string
|
||||||
|
City => 'SomeCity', # string
|
||||||
|
Country => 'Germany', # string
|
||||||
|
PhoneNumber => '++499131123456', # PhoneNumber
|
||||||
|
MobilePhoneNumber => '++49150123456', # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => [
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100000, # long
|
||||||
|
ContractName => 'SomeContract0', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100001, # long
|
||||||
|
ContractName => 'SomeContract1', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100002, # long
|
||||||
|
ContractName => 'SomeContract2', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100003, # long
|
||||||
|
ContractName => 'SomeContract3', # string
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
;
|
||||||
|
#
|
||||||
|
# compile XML::Compile client with the options suggested by Mark Overmeer
|
||||||
|
# for maximum speedup
|
||||||
|
#
|
||||||
|
my $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl',
|
||||||
|
sloppy_integers => 1,
|
||||||
|
check_values => 0,
|
||||||
|
check_values => 0,
|
||||||
|
validation => 0,
|
||||||
|
ignore_facets => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
my $call = $compile->compileClient('ListPerson');
|
||||||
|
$call->({ in => undef});
|
||||||
|
|
||||||
|
# Initialize SOAP::Lite
|
||||||
|
my $deserializer = SOAP::Deserializer->new();
|
||||||
|
|
||||||
|
# Initialize SOAP::WSDL interface
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
# Load all classes - XML::Compile has created everything before, too
|
||||||
|
$soap->ListPerson({});
|
||||||
|
|
||||||
|
my $lite = SOAP::Lite->new()->default_ns('http://www.example.org/benchmark/')
|
||||||
|
->proxy('http://localhost:81/soap-wsdl-test/person.pl');
|
||||||
|
$lite->on_action( sub { 'http://www.example.org/benchmark/ListPerson' } );
|
||||||
|
|
||||||
|
# # register for SOAP 1.1
|
||||||
|
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
|
||||||
|
my $wsdl_xs = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
my $count = 70;
|
||||||
|
my @data = ();
|
||||||
|
my $n = 0;
|
||||||
|
print "Benchmark conducted with
|
||||||
|
SOAP::Lite - $SOAP::Lite::VERSION
|
||||||
|
SOAP::WSDL - $SOAP::WSDL::Client::VERSION
|
||||||
|
SOAP::WSDL_XS - $SOAP::WSDL::Deserializer::XSD_XS::VERSION;
|
||||||
|
XML::Compile::SOAP - $XML::Compile::SOAP::VERSION
|
||||||
|
|
||||||
|
Benchmark $n: Store result in private variable and destroy it
|
||||||
|
";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
|
||||||
|
'XML::Compile' => sub { my $result = $call->() },
|
||||||
|
'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) },
|
||||||
|
'SOAP::Lite' => sub { my $som = $lite->call('ListPerson') },
|
||||||
|
};
|
||||||
|
|
||||||
|
print "\nBenchmark $n: Push result on list\n";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||||
|
'XML::Compile' => sub { push @data, $call->() },
|
||||||
|
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||||
|
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||||
|
};
|
||||||
|
|
||||||
|
@data = ();
|
||||||
|
print "\nBenchmark $n: Play it again, Sam\n";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||||
|
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||||
|
'XML::Compile' => sub { push @data, $call->() },
|
||||||
|
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||||
|
};
|
||||||
|
|
||||||
|
print "\nBenchmark $n: ca. 1kB request - result destroyed immediately\n";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({ in => $person }) },
|
||||||
|
'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({ in => $person }) },
|
||||||
|
'XML::Compile' => sub { my $result = $call->({ in => $person }) },
|
||||||
|
};
|
||||||
|
|
||||||
|
print "\nBenchmark $n: ca. 1kB request - push result on list\n";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({ in => $person }) },
|
||||||
|
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({ in => $person }) },
|
||||||
|
'XML::Compile' => sub { push @data, $call->({ in => $person }) },
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,437 @@
|
|||||||
|
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body>
|
||||||
|
<ListPersonResponse xmlns="http://www.example.org/benchmark/">
|
||||||
|
<out>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100000</ContractID>
|
||||||
|
<ContractName>SomeContract0</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100001</ContractID>
|
||||||
|
<ContractName>SomeContract1</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100002</ContractID>
|
||||||
|
<ContractName>SomeContract2</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100003</ContractID>
|
||||||
|
<ContractName>SomeContract3</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>2</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation2</Salutation>
|
||||||
|
<Name>Name2</Name>
|
||||||
|
<GivenName>Martin2</GivenName>
|
||||||
|
<DateOfBirth>1970-01-02</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 2</Street>
|
||||||
|
<ZIP>00002</ZIP>
|
||||||
|
<City>City2</City>
|
||||||
|
<Country>Country2</Country>
|
||||||
|
<PhoneNumber>++4900000002</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000002</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 2</Street>
|
||||||
|
<ZIP>222222</ZIP>
|
||||||
|
<City>SomeCity2</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4920000002</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4920000002</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100002</ContractID>
|
||||||
|
<ContractName>SomeContract2</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100021</ContractID>
|
||||||
|
<ContractName>SomeContract21</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100022</ContractID>
|
||||||
|
<ContractName>SomeContract22</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000023</ContractID>
|
||||||
|
<ContractName>SomeContract23</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>3</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation3</Salutation>
|
||||||
|
<Name>Name3</Name>
|
||||||
|
<GivenName>Martin3</GivenName>
|
||||||
|
<DateOfBirth>1970-01-03</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 3</Street>
|
||||||
|
<ZIP>00003</ZIP>
|
||||||
|
<City>City3</City>
|
||||||
|
<Country>Country3</Country>
|
||||||
|
<PhoneNumber>++4900000003</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000003</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 3</Street>
|
||||||
|
<ZIP>333333</ZIP>
|
||||||
|
<City>SomeCity3</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4930000003</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4930000003</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100003</ContractID>
|
||||||
|
<ContractName>SomeContract3</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100031</ContractID>
|
||||||
|
<ContractName>SomeContract31</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100033</ContractID>
|
||||||
|
<ContractName>SomeContract33</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000033</ContractID>
|
||||||
|
<ContractName>SomeContract33</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>4</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation4</Salutation>
|
||||||
|
<Name>Name4</Name>
|
||||||
|
<GivenName>Martin4</GivenName>
|
||||||
|
<DateOfBirth>1970-01-04</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 4</Street>
|
||||||
|
<ZIP>00004</ZIP>
|
||||||
|
<City>City4</City>
|
||||||
|
<Country>Country4</Country>
|
||||||
|
<PhoneNumber>++4900000004</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000004</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 4</Street>
|
||||||
|
<ZIP>444444</ZIP>
|
||||||
|
<City>SomeCity4</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4940000004</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4940000004</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100004</ContractID>
|
||||||
|
<ContractName>SomeContract4</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100041</ContractID>
|
||||||
|
<ContractName>SomeContract41</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100044</ContractID>
|
||||||
|
<ContractName>SomeContract44</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000044</ContractID>
|
||||||
|
<ContractName>SomeContract44</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>5</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation5</Salutation>
|
||||||
|
<Name>Name5</Name>
|
||||||
|
<GivenName>Martin5</GivenName>
|
||||||
|
<DateOfBirth>1970-01-05</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 5</Street>
|
||||||
|
<ZIP>00005</ZIP>
|
||||||
|
<City>City5</City>
|
||||||
|
<Country>Country5</Country>
|
||||||
|
<PhoneNumber>++4900000005</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000005</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 5</Street>
|
||||||
|
<ZIP>555555</ZIP>
|
||||||
|
<City>SomeCity5</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4950000005</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4950000005</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100005</ContractID>
|
||||||
|
<ContractName>SomeContract5</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100051</ContractID>
|
||||||
|
<ContractName>SomeContract51</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100055</ContractID>
|
||||||
|
<ContractName>SomeContract55</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000053</ContractID>
|
||||||
|
<ContractName>SomeContract53</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>6</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation6</Salutation>
|
||||||
|
<Name>Name6</Name>
|
||||||
|
<GivenName>Martin6</GivenName>
|
||||||
|
<DateOfBirth>1970-01-06</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 6</Street>
|
||||||
|
<ZIP>00006</ZIP>
|
||||||
|
<City>City6</City>
|
||||||
|
<Country>Country6</Country>
|
||||||
|
<PhoneNumber>++4900000006</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000006</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 6</Street>
|
||||||
|
<ZIP>666666</ZIP>
|
||||||
|
<City>SomeCity6</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4960000006</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4960000006</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100006</ContractID>
|
||||||
|
<ContractName>SomeContract6</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100061</ContractID>
|
||||||
|
<ContractName>SomeContract61</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100066</ContractID>
|
||||||
|
<ContractName>SomeContract66</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000063</ContractID>
|
||||||
|
<ContractName>SomeContract63</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>7</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation7</Salutation>
|
||||||
|
<Name>Name7</Name>
|
||||||
|
<GivenName>Martin7</GivenName>
|
||||||
|
<DateOfBirth>1970-01-07</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 7</Street>
|
||||||
|
<ZIP>00007</ZIP>
|
||||||
|
<City>City7</City>
|
||||||
|
<Country>Country7</Country>
|
||||||
|
<PhoneNumber>++4900000007</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000007</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 7</Street>
|
||||||
|
<ZIP>777777</ZIP>
|
||||||
|
<City>SomeCity7</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4970000007</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4970000007</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100007</ContractID>
|
||||||
|
<ContractName>SomeContract7</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100071</ContractID>
|
||||||
|
<ContractName>SomeContract71</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100077</ContractID>
|
||||||
|
<ContractName>SomeContract77</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000073</ContractID>
|
||||||
|
<ContractName>SomeContract73</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>8</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation8</Salutation>
|
||||||
|
<Name>Name8</Name>
|
||||||
|
<GivenName>Martin8</GivenName>
|
||||||
|
<DateOfBirth>1970-01-08</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 8</Street>
|
||||||
|
<ZIP>00008</ZIP>
|
||||||
|
<City>City8</City>
|
||||||
|
<Country>Country8</Country>
|
||||||
|
<PhoneNumber>++4900000008</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000008</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 8</Street>
|
||||||
|
<ZIP>888888</ZIP>
|
||||||
|
<City>SomeCity8</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4980000008</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4980000008</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100008</ContractID>
|
||||||
|
<ContractName>SomeContract8</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100081</ContractID>
|
||||||
|
<ContractName>SomeContract81</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100088</ContractID>
|
||||||
|
<ContractName>SomeContract88</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000083</ContractID>
|
||||||
|
<ContractName>SomeContract83</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>9</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation9</Salutation>
|
||||||
|
<Name>Name9</Name>
|
||||||
|
<GivenName>Martin9</GivenName>
|
||||||
|
<DateOfBirth>1970-01-09</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 9</Street>
|
||||||
|
<ZIP>00009</ZIP>
|
||||||
|
<City>City9</City>
|
||||||
|
<Country>Country9</Country>
|
||||||
|
<PhoneNumber>++4900000009</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000009</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 9</Street>
|
||||||
|
<ZIP>999999</ZIP>
|
||||||
|
<City>SomeCity9</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4990000009</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4990000009</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100009</ContractID>
|
||||||
|
<ContractName>SomeContract9</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100091</ContractID>
|
||||||
|
<ContractName>SomeContract91</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100099</ContractID>
|
||||||
|
<ContractName>SomeContract99</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000093</ContractID>
|
||||||
|
<ContractName>SomeContract93</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>10</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation10</Salutation>
|
||||||
|
<Name>Name10</Name>
|
||||||
|
<GivenName>Martin10</GivenName>
|
||||||
|
<DateOfBirth>1970-01-010</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 10</Street>
|
||||||
|
<ZIP>000010</ZIP>
|
||||||
|
<City>City10</City>
|
||||||
|
<Country>Country10</Country>
|
||||||
|
<PhoneNumber>++49000000010</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4917000000010</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 10</Street>
|
||||||
|
<ZIP>101010101010</ZIP>
|
||||||
|
<City>SomeCity10</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++491000000010</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491000000010</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000010</ContractID>
|
||||||
|
<ContractName>SomeContract10</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000101</ContractID>
|
||||||
|
<ContractName>SomeContract101</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>10001010</ContractID>
|
||||||
|
<ContractName>SomeContract1010</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>10000103</ContractID>
|
||||||
|
<ContractName>SomeContract103</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
</out>
|
||||||
|
</ListPersonResponse>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
use lib '../lib';
|
||||||
|
use lib '../example/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||||
|
use strict;
|
||||||
|
# use Benchmark;
|
||||||
|
use SOAP::WSDL::Deserializer::XSD_XS;
|
||||||
|
use SOAP::WSDL::Factory::Deserializer;
|
||||||
|
# # register for SOAP 1.1
|
||||||
|
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
# Load all classes - XML::Compile has created everything before, too
|
||||||
|
if (@ARGV) { print $soap->ListPerson({}) }
|
||||||
|
else {
|
||||||
|
$soap->ListPerson({})
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
+47
-16
@@ -11,13 +11,17 @@ use Term::ReadKey;
|
|||||||
my %opt = (
|
my %opt = (
|
||||||
url => '',
|
url => '',
|
||||||
prefix => undef,
|
prefix => undef,
|
||||||
|
attribute_prefix => 'MyAttributes',
|
||||||
type_prefix => 'MyTypes',
|
type_prefix => 'MyTypes',
|
||||||
element_prefix => 'MyElements',
|
element_prefix => 'MyElements',
|
||||||
typemap_prefix => 'MyTypemaps',
|
typemap_prefix => 'MyTypemaps',
|
||||||
interface_prefix => 'MyInterfaces',
|
interface_prefix => 'MyInterfaces',
|
||||||
|
server_prefix => 'MyServer',
|
||||||
base_path => 'lib/',
|
base_path => 'lib/',
|
||||||
proxy => undef,
|
proxy => undef,
|
||||||
generator => 'XSD',
|
generator => 'XSD',
|
||||||
|
server => 0,
|
||||||
|
namespace => 0,
|
||||||
);
|
);
|
||||||
|
|
||||||
{ # a block just to scope "no warnings"
|
{ # a block just to scope "no warnings"
|
||||||
@@ -33,12 +37,14 @@ my %opt = (
|
|||||||
ReadMode 1;
|
ReadMode 1;
|
||||||
$user = ReadLine();
|
$user = ReadLine();
|
||||||
ReadMode 0;
|
ReadMode 0;
|
||||||
|
chomp $user;
|
||||||
};
|
};
|
||||||
if (not $password = delete $opt{password}) {
|
if (not $password = delete $opt{password}) {
|
||||||
print 'Password:';
|
print 'Password:';
|
||||||
ReadMode 2;
|
ReadMode 2;
|
||||||
$user = ReadLine;
|
$password = ReadLine;
|
||||||
ReadMode 0;
|
ReadMode 0;
|
||||||
|
chomp $password;
|
||||||
};
|
};
|
||||||
return ($user, $password);
|
return ($user, $password);
|
||||||
};
|
};
|
||||||
@@ -47,10 +53,12 @@ my %opt = (
|
|||||||
GetOptions(\%opt,
|
GetOptions(\%opt,
|
||||||
qw(
|
qw(
|
||||||
prefix|p=s
|
prefix|p=s
|
||||||
|
attribute_prefix|a=s
|
||||||
type_prefix|t=s
|
type_prefix|t=s
|
||||||
element_prefix|e=s
|
element_prefix|e=s
|
||||||
typemap_prefix|m=s
|
typemap_prefix|m=s
|
||||||
interface_prefix|i=s
|
interface_prefix|i=s
|
||||||
|
server_prefix|sp=s
|
||||||
base_path|b=s
|
base_path|b=s
|
||||||
typemap_include|mi=s
|
typemap_include|mi=s
|
||||||
help|h
|
help|h
|
||||||
@@ -59,6 +67,8 @@ GetOptions(\%opt,
|
|||||||
user=s
|
user=s
|
||||||
password=s
|
password=s
|
||||||
generator=s
|
generator=s
|
||||||
|
server|s
|
||||||
|
namespaces|n
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -67,8 +77,6 @@ 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};
|
||||||
|
|
||||||
@@ -79,12 +87,11 @@ my $lwp = LWP::UserAgent->new(
|
|||||||
);
|
);
|
||||||
$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 = ();
|
||||||
|
|
||||||
@@ -104,17 +111,28 @@ if (%typemap) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$generator->set_type_prefix( $opt{ type_prefix }) if $generator->can('set_type_prefix');
|
$generator->set_attribute_prefix( $opt{ attribute_prefix })
|
||||||
$generator->set_typemap_prefix( $opt{ typemap_prefix }) if $generator->can('set_typemap_prefix');
|
if $generator->can('set_attribute_prefix');
|
||||||
$generator->set_element_prefix($opt{ element_prefix }) if $generator->can('set_element_prefix');
|
$generator->set_type_prefix( $opt{ type_prefix })
|
||||||
$generator->set_interface_prefix($opt{ interface_prefix }) if $generator->can('set_interface_prefix');
|
if $generator->can('set_type_prefix');
|
||||||
$generator->set_OUTPUT_PATH($opt{ base_path }) if $generator->can('set_OUTPUT_PATH');
|
$generator->set_typemap_prefix( $opt{ typemap_prefix })
|
||||||
$generator->set_definitions($definitions) if $generator->can('set_definitions');
|
if $generator->can('set_typemap_prefix');
|
||||||
$generator->set_wsdl($xml) if $generator->can('set_wsdl');
|
$generator->set_element_prefix($opt{ element_prefix })
|
||||||
|
if $generator->can('set_element_prefix');
|
||||||
|
$generator->set_interface_prefix($opt{ interface_prefix })
|
||||||
|
if $generator->can('set_interface_prefix');
|
||||||
|
$generator->set_server_prefix($opt{ server_prefix })
|
||||||
|
if $generator->can('set_server_prefix');
|
||||||
|
$generator->set_OUTPUT_PATH($opt{ base_path })
|
||||||
|
if $generator->can('set_OUTPUT_PATH');
|
||||||
|
$generator->set_definitions($definitions)
|
||||||
|
if $generator->can('set_definitions');
|
||||||
|
# $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();
|
||||||
|
$generator->generate_interface() if ! $opt{server};
|
||||||
|
$generator->generate_server() if $opt{server};
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
@@ -133,6 +151,8 @@ 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.
|
||||||
|
attribute_prefix a Prefix for XML attribute classes.
|
||||||
|
Default: MyAttributes
|
||||||
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.
|
||||||
@@ -141,6 +161,8 @@ wsdl2perl.pl - create perl bindings for SOAP webservices.
|
|||||||
Default: MyTypemaps
|
Default: MyTypemaps
|
||||||
interface_prefix i Prefix for interface classes.
|
interface_prefix i Prefix for interface classes.
|
||||||
Default: MyInterfaces
|
Default: MyInterfaces
|
||||||
|
server_prefix sp Prefix for server classes.
|
||||||
|
Default: MyServer
|
||||||
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
|
||||||
@@ -153,6 +175,8 @@ wsdl2perl.pl - create perl bindings for SOAP webservices.
|
|||||||
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
|
||||||
|
supported)
|
||||||
help h Show help content
|
help h Show help content
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
@@ -169,6 +193,13 @@ The following classes are created:
|
|||||||
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
|
||||||
|
every Web service.
|
||||||
|
|
||||||
|
You'll have to implement a method for each of the implemented methods. You
|
||||||
|
may implement these methods in the CGI script / handler, or in any class
|
||||||
|
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
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
package main;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use lib '../../lib';
|
||||||
|
use lib '../lib';
|
||||||
|
use MyServer::HelloWorld::HelloWorldSoap;
|
||||||
|
|
||||||
|
my $soap = MyServer::HelloWorld::HelloWorldSoap->new({
|
||||||
|
dispatch_to => 'main',
|
||||||
|
});
|
||||||
|
|
||||||
|
$soap->handle();
|
||||||
|
|
||||||
|
sub sayHello {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
my $name = $body->get_name();
|
||||||
|
my $givenName = $body->get_givenName();
|
||||||
|
|
||||||
|
return MyElements::sayHelloResponse->new({
|
||||||
|
sayHelloResult => "Hello $givenName $name"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
helloworld.pl - a simple CGI-based SOAP server implementing the service from
|
||||||
|
in examples/wsdl/helloworld.wsdl
|
||||||
|
|
||||||
|
=head1 USAGE
|
||||||
|
|
||||||
|
Before using this script, you should secure your webserver. The easiest way
|
||||||
|
to do so is to let it listen to 127.0.0.1 only.
|
||||||
|
|
||||||
|
Then make a ScriptAlias named /soap-wsdl-test/ pointing at the directory
|
||||||
|
this file lies in.
|
||||||
|
|
||||||
|
For my apache, it looks like this:
|
||||||
|
|
||||||
|
ScriptAlias /soap-wsdl-test/ /home/martin/workspace/SOAP-WSDL/example/cgi-bin/
|
||||||
|
<Directory "/home/martin/workspace/SOAP-WSDL/example/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options +ExecCGI -MultiViews
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
Then run the helloworld.pl from the examples directory. It should print
|
||||||
|
|
||||||
|
Hello World
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
package main;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use lib qw(../lib ../../lib);
|
||||||
|
use MyElements::ListPersonResponse;
|
||||||
|
use MyServer::TestService::TestPort;
|
||||||
|
my $server = MyServer::TestService::TestPort->new({
|
||||||
|
dispatch_to => 'main',
|
||||||
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
|
});
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|
||||||
|
# do something with body and header...
|
||||||
|
|
||||||
|
my %person = (
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => 1, # int
|
||||||
|
},
|
||||||
|
Salutation => 'Salutation0', # string
|
||||||
|
Name => 'Name0', # string
|
||||||
|
GivenName => 'Martin', # string
|
||||||
|
DateOfBirth => '1970-01-01', # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => 'Street 0', # string
|
||||||
|
ZIP => '00000', # string
|
||||||
|
City => 'City0', # string
|
||||||
|
Country => 'Country0', # string
|
||||||
|
PhoneNumber => '++499131123456', # PhoneNumber
|
||||||
|
MobilePhoneNumber => '++49150123456', # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => 'Somestreet 23', # string
|
||||||
|
ZIP => '12345', # string
|
||||||
|
City => 'SomeCity', # string
|
||||||
|
Country => 'Germany', # string
|
||||||
|
PhoneNumber => '++499131123456', # PhoneNumber
|
||||||
|
MobilePhoneNumber => '++49150123456', # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => [
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100000, # long
|
||||||
|
ContractName => 'SomeContract0', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100001, # long
|
||||||
|
ContractName => 'SomeContract1', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100002, # long
|
||||||
|
ContractName => 'SomeContract2', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100003, # long
|
||||||
|
ContractName => 'SomeContract3', # string
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return MyElements::ListPersonResponse->new( {
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => [
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
use lib 'lib';
|
||||||
|
use lib '../lib';
|
||||||
|
use MyInterfaces::BarCode::BarCodeSoap;
|
||||||
|
my $interface = MyInterfaces::BarCode::BarCodeSoap->new();
|
||||||
|
my $barcode = $interface->GenerateBarCode( {
|
||||||
|
BarCodeParam => { # MyTypes::BarCodeData
|
||||||
|
Height => 42, # int
|
||||||
|
Width => 120, # int
|
||||||
|
Angle => 90, # int
|
||||||
|
Ratio => 1, # int
|
||||||
|
Module => 1, # int
|
||||||
|
Left => 10, # int
|
||||||
|
Top => 10, # int
|
||||||
|
CheckSum => 0, # boolean
|
||||||
|
FontName => 'Arial', # string
|
||||||
|
BarColor => 'black', # string
|
||||||
|
BGColor => 'white', # string
|
||||||
|
FontSize => 6.25, # float
|
||||||
|
barcodeOption => 'Both', # BarcodeOption
|
||||||
|
barcodeType => 'CodeMSI', # BarcodeType
|
||||||
|
checkSumMethod => 'None', # CheckSumMethod
|
||||||
|
showTextPosition => 'TopLeft', # ShowTextPosition
|
||||||
|
BarCodeImageFormat => 'PNG', # ImageFormats
|
||||||
|
},
|
||||||
|
BarCodeText => 'JustSomeText', # string
|
||||||
|
},
|
||||||
|
);
|
||||||
|
die $barcode if not ($barcode);
|
||||||
|
print $barcode;
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use lib 'lib'; # just needed because interface lies here
|
||||||
|
|
||||||
|
# I have to generate the interface using wsdl2perl.pl before
|
||||||
|
use MyInterfaces::HelloWorld::HelloWorldSoap;
|
||||||
|
|
||||||
|
# I instantiate a interface class.
|
||||||
|
my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new();
|
||||||
|
|
||||||
|
# I have to lookup the method and synopsis from the interface's pod
|
||||||
|
my $result = $soap->sayHello({
|
||||||
|
name => $ARGV[1] || '"Your name"',
|
||||||
|
givenName => $ARGV[0] || '"Your given name"',
|
||||||
|
});
|
||||||
|
|
||||||
|
# SOAP::WSDL::SOAP::Typelib::Fault11 objects are false, but serialize to XML
|
||||||
|
die $result if not $result;
|
||||||
|
|
||||||
|
# I have to lookup the output parameter from the interface's POD - or try:
|
||||||
|
# Will die on bad method names with a list of available methods
|
||||||
|
print $result->get_sayHelloResult(), "\n";
|
||||||
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use XML::Compile::WSDL11;
|
||||||
|
use XML::Compile::Transport::SOAPHTTP;
|
||||||
|
|
||||||
|
# I need access to the WSDL around - or use Data::Dumper::Streamer
|
||||||
|
# for serializing the generated closures into (big) perl files
|
||||||
|
my $wsdl = XML::Compile::WSDL11->new('wsdl/11_helloworld.wsdl');
|
||||||
|
|
||||||
|
# I compile a interface method for a single SOAP method from the WSDL
|
||||||
|
# I have to lookup the method names from the WSDL
|
||||||
|
my $call = $wsdl->compileClient('sayHello');
|
||||||
|
|
||||||
|
# I have to lookup the parameters from the WSDL - can be quite tricky
|
||||||
|
my $result = $call->(
|
||||||
|
name => $ARGV[1] || '"Your name"',
|
||||||
|
givenName => $ARGV[0] || '"Your given name"',
|
||||||
|
);
|
||||||
|
|
||||||
|
# XML::Compile::SOAP's client just returns undef in case of failure
|
||||||
|
die "Error calling soap method" if not defined $result;
|
||||||
|
|
||||||
|
# I have to lookup the output parameters from the WSDL - or try Data::Dumper
|
||||||
|
print $result->{ parameters }->{ sayHelloResult }, "\n";
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
#use strict;
|
||||||
|
use warnings;
|
||||||
|
use SOAP::Lite +trace;
|
||||||
|
|
||||||
|
# I have to lookup the URL from the WSDL
|
||||||
|
my $soap = SOAP::Lite->new(
|
||||||
|
proxy => 'http://localhost:81/soap-wsdl-test/helloworld.pl'
|
||||||
|
);
|
||||||
|
|
||||||
|
# I have to lookup the SOAPAction from the WSDL
|
||||||
|
$soap->on_action( sub { "urn:HelloWorld#sayHello" });
|
||||||
|
$soap->autotype(0);
|
||||||
|
|
||||||
|
# I have to lookup the top level element's namespace from the WSDL
|
||||||
|
$soap->default_ns('urn:HelloWorld');
|
||||||
|
|
||||||
|
# I have to encode all parameters as SOAP::Data objects
|
||||||
|
# I have to know the order of parameters
|
||||||
|
my $som = $soap->call(
|
||||||
|
"sayHello",
|
||||||
|
SOAP::Data->name('name')->value( $ARGV[1] || '"Your name"'),
|
||||||
|
SOAP::Data->name('givenName')->value( $ARGV[0] || '"Your given name"'),
|
||||||
|
);
|
||||||
|
|
||||||
|
die $som->fault->{ faultstring } if ($som->fault);
|
||||||
|
|
||||||
|
print $som->result, "\n";
|
||||||
|
|
||||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ CountCookies from the namespace http://www.fullerdata.com/FortuneCookie/FortuneC
|
|||||||
|
|
||||||
Constructor. The following data structure may be passed to new():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
|
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
CountCookiesResult
|
CountCookiesResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
CountCookiesResult => \%CountCookiesResult_of,
|
CountCookiesResult => \%CountCookiesResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CountCookiesResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
CountCookiesResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
CountCookiesResult => $some_value, # int
|
CountCookiesResult => $some_value, # int
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %BarCodeParam_of :ATTR(:get<BarCodeParam>);
|
my %BarCodeParam_of :ATTR(:get<BarCodeParam>);
|
||||||
@@ -30,8 +32,8 @@ __PACKAGE__->_factory(
|
|||||||
BarCodeText
|
BarCodeText
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
BarCodeParam => \%BarCodeParam_of,
|
BarCodeParam => \%BarCodeParam_of,
|
||||||
BarCodeText => \%BarCodeText_of,
|
BarCodeText => \%BarCodeText_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
BarCodeParam => 'MyTypes::BarCodeData',
|
BarCodeParam => 'MyTypes::BarCodeData',
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GenerateBarCodeResult_of :ATTR(:get<GenerateBarCodeResult>);
|
my %GenerateBarCodeResult_of :ATTR(:get<GenerateBarCodeResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GenerateBarCodeResult
|
GenerateBarCodeResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GenerateBarCodeResult => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
GenerateBarCodeResult => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %CountryName_of :ATTR(:get<CountryName>);
|
my %CountryName_of :ATTR(:get<CountryName>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
CountryName
|
CountryName
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
CountryName => \%CountryName_of,
|
CountryName => \%CountryName_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CountryName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
CountryName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetCitiesByCountryResult_of :ATTR(:get<GetCitiesByCountryResult>);
|
my %GetCitiesByCountryResult_of :ATTR(:get<GetCitiesByCountryResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetCitiesByCountryResult
|
GetCitiesByCountryResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetCitiesByCountryResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
GetCitiesByCountryResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
GetCitiesByCountryResult => $some_value, # string
|
GetCitiesByCountryResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ GetFortuneCookie from the namespace http://www.fullerdata.com/FortuneCookie/Fort
|
|||||||
|
|
||||||
Constructor. The following data structure may be passed to new():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
|
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetFortuneCookieResult
|
GetFortuneCookieResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetFortuneCookieResult => \%GetFortuneCookieResult_of,
|
GetFortuneCookieResult => \%GetFortuneCookieResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetFortuneCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
GetFortuneCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
GetFortuneCookieResult => $some_value, # string
|
GetFortuneCookieResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %index_of :ATTR(:get<index>);
|
my %index_of :ATTR(:get<index>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
index
|
index
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
index => \%index_of,
|
index => \%index_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
index => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
index => $some_value, # int
|
index => $some_value, # int
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
|
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetSpecificCookieResult
|
GetSpecificCookieResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetSpecificCookieResult => \%GetSpecificCookieResult_of,
|
GetSpecificCookieResult => \%GetSpecificCookieResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetSpecificCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
GetSpecificCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
GetSpecificCookieResult => $some_value, # string
|
GetSpecificCookieResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %CityName_of :ATTR(:get<CityName>);
|
my %CityName_of :ATTR(:get<CityName>);
|
||||||
@@ -30,8 +32,8 @@ __PACKAGE__->_factory(
|
|||||||
CountryName
|
CountryName
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
CityName => \%CityName_of,
|
CityName => \%CityName_of,
|
||||||
CountryName => \%CountryName_of,
|
CountryName => \%CountryName_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CityName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
CityName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -74,7 +76,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
{
|
{
|
||||||
CityName => $some_value, # string
|
CityName => $some_value, # string
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetWeatherResult_of :ATTR(:get<GetWeatherResult>);
|
my %GetWeatherResult_of :ATTR(:get<GetWeatherResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetWeatherResult
|
GetWeatherResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetWeatherResult => \%GetWeatherResult_of,
|
GetWeatherResult => \%GetWeatherResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetWeatherResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
GetWeatherResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
GetWeatherResult => $some_value, # string
|
GetWeatherResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
package MyElements::ListPerson;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('ListPerson');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %in_of :ATTR(:get<in>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
in
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
in => \%in_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
in => 'MyTypes::Person',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::ListPerson
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
ListPerson from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::ListPerson->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
in => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
package MyElements::ListPersonResponse;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('ListPersonResponse');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %out_of :ATTR(:get<out>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
out
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
out => \%out_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
out => 'MyTypes::ArrayOfPerson',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::ListPersonResponse
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
ListPersonResponse from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::ListPersonResponse->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -12,8 +12,8 @@ __PACKAGE__->__set_minOccurs();
|
|||||||
__PACKAGE__->__set_maxOccurs();
|
__PACKAGE__->__set_maxOccurs();
|
||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::int
|
SOAP::WSDL::XSD::Typelib::Builtin::int
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ readNodeCount from the namespace http://www.fullerdata.com/FortuneCookie/Fortune
|
|||||||
|
|
||||||
Constructor. The following data structure may be passed to new():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
|
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
readNodeCountResult
|
readNodeCountResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
readNodeCountResult => \%readNodeCountResult_of,
|
readNodeCountResult => \%readNodeCountResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
readNodeCountResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
readNodeCountResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
|||||||
|
|
||||||
{
|
{
|
||||||
readNodeCountResult => $some_value, # int
|
readNodeCountResult => $some_value, # int
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package MyElements::sayHello;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'urn:HelloWorld' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('sayHello');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %name_of :ATTR(:get<name>);
|
||||||
|
my %givenName_of :ATTR(:get<givenName>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
name
|
||||||
|
givenName
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
name => \%name_of,
|
||||||
|
givenName => \%givenName_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
givenName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::sayHello
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
sayHello from the namespace urn:HelloWorld.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::sayHello->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
name => $some_value, # string
|
||||||
|
givenName => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package MyElements::sayHelloResponse;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'urn:HelloWorld' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('sayHelloResponse');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %sayHelloResult_of :ATTR(:get<sayHelloResult>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
sayHelloResult
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
sayHelloResult => \%sayHelloResult_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
sayHelloResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::sayHelloResponse
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
sayHelloResponse from the namespace urn:HelloWorld.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::sayHelloResponse->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
sayHelloResult => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -12,8 +12,8 @@ __PACKAGE__->__set_minOccurs();
|
|||||||
__PACKAGE__->__set_maxOccurs();
|
__PACKAGE__->__set_maxOccurs();
|
||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,135 @@
|
|||||||
|
package MyInterfaces::BarCode::BarCodeSoap;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::BarCode
|
||||||
|
if not MyTypemaps::BarCode->can('get_class');
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
$_[0]->set_proxy('http://www.webservicex.net/genericbarcode.asmx') if not $_[2]->{proxy};
|
||||||
|
$_[0]->set_class_resolver('MyTypemaps::BarCode')
|
||||||
|
if not $_[2]->{class_resolver};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub GenerateBarCode {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GenerateBarCode must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
|
return $self->SUPER::call({
|
||||||
|
operation => 'GenerateBarCode',
|
||||||
|
soap_action => 'http://www.webservicex.net/GenerateBarCode',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( MyElements::GenerateBarCode )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
}, $body, $header);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
|
||||||
|
MyInterfaces::BarCode::BarCodeSoap - SOAP Interface for the BarCode Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::BarCode::BarCodeSoap;
|
||||||
|
my $interface = MyInterfaces::BarCode::BarCodeSoap->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->GenerateBarCode();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Interface for the BarCode web service
|
||||||
|
located at http://www.webservicex.net/genericbarcode.asmx.
|
||||||
|
|
||||||
|
=head1 SERVICE BarCode
|
||||||
|
|
||||||
|
Barcode generator
|
||||||
|
|
||||||
|
=head2 Port BarCodeSoap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Method synopsis is displayed with hash refs as parameters.
|
||||||
|
|
||||||
|
The commented class names in the method's parameters denote that objects
|
||||||
|
of the corresponding class can be passed instead of the marked hash ref.
|
||||||
|
|
||||||
|
You may pass any combination of objects, hash and list refs to these
|
||||||
|
methods, as long as you meet the structure.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head3 GenerateBarCode
|
||||||
|
|
||||||
|
WebserviceX.NET barcode library that provides the means to create barcodes for printing and display in any internet enabled applications. This web service supports Code 128, Industrial 2 of 5, Interleaved 2 of 5, Code 2 5 Matrix, Code 39, Code 39 Extended, Code 93, Code 93 Extended, Codabar, EAN13, EAN8, MSI, Postnet, Supp2, Supp5, UPC A, UPC E0 and UPC E1 barcode formats. This Barcodes returns byte image. It supports following image format JPEG, GIF, PNG, BMP, EMF, EXIF, ICON, MEMORY BMP, TIFF and WMF.
|
||||||
|
|
||||||
|
$interface->GenerateBarCode( {
|
||||||
|
BarCodeParam => { # MyTypes::BarCodeData
|
||||||
|
Height => $some_value, # int
|
||||||
|
Width => $some_value, # int
|
||||||
|
Angle => $some_value, # int
|
||||||
|
Ratio => $some_value, # int
|
||||||
|
Module => $some_value, # int
|
||||||
|
Left => $some_value, # int
|
||||||
|
Top => $some_value, # int
|
||||||
|
CheckSum => $some_value, # boolean
|
||||||
|
FontName => $some_value, # string
|
||||||
|
BarColor => $some_value, # string
|
||||||
|
BGColor => $some_value, # string
|
||||||
|
FontSize => $some_value, # float
|
||||||
|
barcodeOption => $some_value, # BarcodeOption
|
||||||
|
barcodeType => $some_value, # BarcodeType
|
||||||
|
checkSumMethod => $some_value, # CheckSumMethod
|
||||||
|
showTextPosition => $some_value, # ShowTextPosition
|
||||||
|
BarCodeImageFormat => $some_value, # ImageFormats
|
||||||
|
},
|
||||||
|
BarCodeText => $some_value, # string
|
||||||
|
},,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Sun Dec 16 20:10:20 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
+29
-11
@@ -1,12 +1,13 @@
|
|||||||
package MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
package MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
use base qw(SOAP::WSDL::Client::Base);
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
# only load if it hasn't been loaded before
|
# only load if it hasn't been loaded before
|
||||||
require MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie
|
require MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie
|
||||||
if not MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie->can('get_class');
|
if not MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie->can('get_class');
|
||||||
|
|
||||||
sub START {
|
sub START {
|
||||||
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
|
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
|
||||||
@@ -16,8 +17,9 @@ sub START {
|
|||||||
|
|
||||||
sub readNodeCount {
|
sub readNodeCount {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "readNodeCount must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'readNodeCount',
|
operation => 'readNodeCount',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -38,8 +40,9 @@ sub readNodeCount {
|
|||||||
|
|
||||||
sub GetFortuneCookie {
|
sub GetFortuneCookie {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetFortuneCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetFortuneCookie',
|
operation => 'GetFortuneCookie',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -60,8 +63,9 @@ sub GetFortuneCookie {
|
|||||||
|
|
||||||
sub CountCookies {
|
sub CountCookies {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "CountCookies must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'CountCookies',
|
operation => 'CountCookies',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -82,8 +86,9 @@ sub CountCookies {
|
|||||||
|
|
||||||
sub GetSpecificCookie {
|
sub GetSpecificCookie {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetSpecificCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetSpecificCookie',
|
operation => 'GetSpecificCookie',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -117,6 +122,19 @@ __END__
|
|||||||
|
|
||||||
MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap - SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie Web Service
|
MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap - SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||||
|
my $interface = MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->readNodeCount();
|
||||||
|
$response = $interface->GetFortuneCookie();
|
||||||
|
$response = $interface->CountCookies();
|
||||||
|
$response = $interface->GetSpecificCookie();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
||||||
@@ -156,21 +174,21 @@ methods, as long as you meet the structure.
|
|||||||
|
|
||||||
Display the number of nodes specified in fortune XML document
|
Display the number of nodes specified in fortune XML document
|
||||||
|
|
||||||
$interface->readNodeCount(,
|
$interface->readNodeCount(,,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 GetFortuneCookie
|
=head3 GetFortuneCookie
|
||||||
|
|
||||||
Get a random fortune cookie from the XML document
|
Get a random fortune cookie from the XML document
|
||||||
|
|
||||||
$interface->GetFortuneCookie(,
|
$interface->GetFortuneCookie(,,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 CountCookies
|
=head3 CountCookies
|
||||||
|
|
||||||
Count the actual number of nodes in the XML document of fortunes
|
Count the actual number of nodes in the XML document of fortunes
|
||||||
|
|
||||||
$interface->CountCookies(,
|
$interface->CountCookies(,,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 GetSpecificCookie
|
=head3 GetSpecificCookie
|
||||||
@@ -179,13 +197,13 @@ Get a specific cookie by the XML node number
|
|||||||
|
|
||||||
$interface->GetSpecificCookie( {
|
$interface->GetSpecificCookie( {
|
||||||
index => $some_value, # int
|
index => $some_value, # int
|
||||||
},
|
},,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Generated by SOAP::WSDL on Tue Nov 6 20:56:46 2007
|
Generated by SOAP::WSDL on Sun Dec 16 19:58:30 2007
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
package MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
package MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
use base qw(SOAP::WSDL::Client::Base);
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
# only load if it hasn't been loaded before
|
# only load if it hasn't been loaded before
|
||||||
require MyTypemaps::GlobalWeather
|
require MyTypemaps::GlobalWeather
|
||||||
if not MyTypemaps::GlobalWeather->can('get_class');
|
if not MyTypemaps::GlobalWeather->can('get_class');
|
||||||
|
|
||||||
sub START {
|
sub START {
|
||||||
$_[0]->set_proxy('http://www.webservicex.net/globalweather.asmx') if not $_[2]->{proxy};
|
$_[0]->set_proxy('http://www.webservicex.net/globalweather.asmx') if not $_[2]->{proxy};
|
||||||
@@ -16,8 +17,9 @@ sub START {
|
|||||||
|
|
||||||
sub GetWeather {
|
sub GetWeather {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetWeather must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetWeather',
|
operation => 'GetWeather',
|
||||||
soap_action => 'http://www.webserviceX.NET/GetWeather',
|
soap_action => 'http://www.webserviceX.NET/GetWeather',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -38,8 +40,9 @@ sub GetWeather {
|
|||||||
|
|
||||||
sub GetCitiesByCountry {
|
sub GetCitiesByCountry {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetCitiesByCountry must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetCitiesByCountry',
|
operation => 'GetCitiesByCountry',
|
||||||
soap_action => 'http://www.webserviceX.NET/GetCitiesByCountry',
|
soap_action => 'http://www.webserviceX.NET/GetCitiesByCountry',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -73,6 +76,17 @@ __END__
|
|||||||
|
|
||||||
MyInterfaces::GlobalWeather::GlobalWeatherSoap - SOAP Interface for the GlobalWeather Web Service
|
MyInterfaces::GlobalWeather::GlobalWeatherSoap - SOAP Interface for the GlobalWeather Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||||
|
my $interface = MyInterfaces::GlobalWeather::GlobalWeatherSoap->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->GetWeather();
|
||||||
|
$response = $interface->GetCitiesByCountry();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SOAP Interface for the GlobalWeather web service
|
SOAP Interface for the GlobalWeather web service
|
||||||
@@ -115,7 +129,7 @@ Get weather report for all major cities around the world.
|
|||||||
$interface->GetWeather( {
|
$interface->GetWeather( {
|
||||||
CityName => $some_value, # string
|
CityName => $some_value, # string
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
},
|
},,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 GetCitiesByCountry
|
=head3 GetCitiesByCountry
|
||||||
@@ -124,13 +138,13 @@ Get all major cities by country name(full / part).
|
|||||||
|
|
||||||
$interface->GetCitiesByCountry( {
|
$interface->GetCitiesByCountry( {
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
},
|
},,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Generated by SOAP::WSDL on Tue Nov 6 21:00:30 2007
|
Generated by SOAP::WSDL on Sun Dec 16 20:05:01 2007
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
package MyInterfaces::HelloWorld::HelloWorldSoap;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::HelloWorld
|
||||||
|
if not MyTypemaps::HelloWorld->can('get_class');
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
$_[0]->set_proxy('http://localhost:81/soap-wsdl-test/helloworld.pl') if not $_[2]->{proxy};
|
||||||
|
$_[0]->set_class_resolver('MyTypemaps::HelloWorld')
|
||||||
|
if not $_[2]->{class_resolver};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub sayHello {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
die "sayHello must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
|
return $self->SUPER::call({
|
||||||
|
operation => 'sayHello',
|
||||||
|
soap_action => 'urn:HelloWorld#sayHello',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( MyElements::sayHello )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
}, $body, $header);
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
|
||||||
|
MyInterfaces::HelloWorld::HelloWorldSoap - SOAP Interface for the HelloWorld Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::HelloWorld::HelloWorldSoap;
|
||||||
|
my $interface = MyInterfaces::HelloWorld::HelloWorldSoap->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->sayHello();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Interface for the HelloWorld web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/helloworld.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE HelloWorld
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port HelloWorldSoap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Method synopsis is displayed with hash refs as parameters.
|
||||||
|
|
||||||
|
The commented class names in the method's parameters denote that objects
|
||||||
|
of the corresponding class can be passed instead of the marked hash ref.
|
||||||
|
|
||||||
|
You may pass any combination of objects, hash and list refs to these
|
||||||
|
methods, as long as you meet the structure.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head3 sayHello
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$interface->sayHello( {
|
||||||
|
name => $some_value, # string
|
||||||
|
givenName => $some_value, # string
|
||||||
|
},,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Sat Dec 1 19:51:31 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package MyInterfaces::TestService::TestPort;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::TestService
|
||||||
|
if not MyTypemaps::TestService->can('get_class');
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
$_[0]->set_proxy('http://localhost:81/soap-wsdl-test/person.pl') if not $_[2]->{proxy};
|
||||||
|
$_[0]->set_class_resolver('MyTypemaps::TestService')
|
||||||
|
if not $_[2]->{class_resolver};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
die "ListPerson must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
|
return $self->SUPER::call({
|
||||||
|
operation => 'ListPerson',
|
||||||
|
soap_action => 'http://www.example.org/benchmark/ListPerson',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( MyElements::ListPerson )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
}, $body, $header);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
|
||||||
|
MyInterfaces::TestService::TestPort - SOAP Interface for the TestService Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
my $interface = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->ListPerson();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Interface for the TestService web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/person.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE TestService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port TestPort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Method synopsis is displayed with hash refs as parameters.
|
||||||
|
|
||||||
|
The commented class names in the method's parameters denote that objects
|
||||||
|
of the corresponding class can be passed instead of the marked hash ref.
|
||||||
|
|
||||||
|
You may pass any combination of objects, hash and list refs to these
|
||||||
|
methods, as long as you meet the structure.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head3 ListPerson
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$interface->ListPerson( {
|
||||||
|
in => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Mon Dec 3 22:20:49 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
package MyServer::HelloWorld::HelloWorldSoap;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::HelloWorld
|
||||||
|
if not MyTypemaps::HelloWorld->can('get_class');
|
||||||
|
|
||||||
|
my %transport_class_of :ATTR(:name<transport_class> :default<SOAP::WSDL::Server::CGI>);
|
||||||
|
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||||
|
my %dispatch_to :ATTR(:name<dispatch_to>);
|
||||||
|
|
||||||
|
my $action_map_ref = {
|
||||||
|
'urn:HelloWorld#sayHello' => 'sayHello',
|
||||||
|
};
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
my ($self, $ident, $arg_ref) = @_;
|
||||||
|
eval "require $transport_class_of{ $ident }"
|
||||||
|
or die "Cannot load transport class $transport_class_of{ $ident }: $@";
|
||||||
|
$transport_of{ $ident } = $transport_class_of{ $ident }->new({
|
||||||
|
action_map_ref => $action_map_ref,
|
||||||
|
class_resolver => 'MyTypemaps::HelloWorld',
|
||||||
|
dispatch_to => $dispatch_to{ $ident },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
sub handle {
|
||||||
|
$transport_of{ ${ $_[0] } }->handle(@_[1..$#_]);
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyInterfaces::HelloWorld::HelloWorldSoap - SOAP Server Class for the HelloWorld Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyServer::HelloWorld::HelloWorldSoap;
|
||||||
|
my $server = MyServer::HelloWorld::HelloWorldSoap->new({
|
||||||
|
dispatch_to => 'My::Handler::Class',
|
||||||
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
|
});
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Server handler for the HelloWorld web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/helloworld.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE HelloWorld
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port HelloWorldSoap
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
The C<dispatch_to> argument is mandatory. It must be a class or object
|
||||||
|
implementing the SOAP Service methods listed below.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Your dispatch_to class has to implement the following methods:
|
||||||
|
|
||||||
|
The examples below serve as copy-and-paste prototypes to use in your
|
||||||
|
class.
|
||||||
|
|
||||||
|
=head3 sayHello
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub sayHello(
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|
||||||
|
# do something with body and header...
|
||||||
|
|
||||||
|
return MyElements::sayHelloResponse->new( {
|
||||||
|
sayHelloResult => $some_value, # string
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Sun Dec 2 01:20:36 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
package MyServer::TestService::TestPort;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::TestService
|
||||||
|
if not MyTypemaps::TestService->can('get_class');
|
||||||
|
|
||||||
|
my %transport_class_of :ATTR(:name<transport_class> :default<SOAP::WSDL::Server::CGI>);
|
||||||
|
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||||
|
my %dispatch_to :ATTR(:name<dispatch_to>);
|
||||||
|
|
||||||
|
my $action_map_ref = {
|
||||||
|
'http://www.example.org/benchmark/ListPerson' => 'ListPerson',
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
my ($self, $ident, $arg_ref) = @_;
|
||||||
|
eval "require $transport_class_of{ $ident }"
|
||||||
|
or die "Cannot load transport class $transport_class_of{ $ident }: $@";
|
||||||
|
$transport_of{ $ident } = $transport_class_of{ $ident }->new({
|
||||||
|
action_map_ref => $action_map_ref,
|
||||||
|
class_resolver => 'MyTypemaps::TestService',
|
||||||
|
dispatch_to => $dispatch_to{ $ident },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
sub handle {
|
||||||
|
$transport_of{ ${ $_[0] } }->handle();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyInterfaces::TestService::TestPort - SOAP Server Class for the TestService Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyServer::TestService::TestPort;
|
||||||
|
my $server = MyServer::TestService::TestPort->new({
|
||||||
|
dispatch_to => 'My::Handler::Class',
|
||||||
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
|
});
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Server handler for the TestService web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/person.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE TestService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port TestPort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
The C<dispatch_to> argument is mandatory. It must be a class or object
|
||||||
|
implementing the SOAP Service methods listed below.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Your dispatch_to class has to implement the following methods:
|
||||||
|
|
||||||
|
The examples below serve as copy-and-paste prototypes to use in your
|
||||||
|
class.
|
||||||
|
|
||||||
|
=head3 ListPerson
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|
||||||
|
# do something with body and header...
|
||||||
|
|
||||||
|
return MyElements::ListPersonResponse->new( {
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Mon Dec 3 22:20:32 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package MyTypemaps::BarCode;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
our $typemap_1 = {
|
||||||
|
'GenerateBarCode/BarCodeText' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'GenerateBarCode/BarCodeParam/BarColor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'GenerateBarCode/BarCodeParam/barcodeOption' => 'MyTypes::BarcodeOption',
|
||||||
|
'GenerateBarCode/BarCodeParam/Left' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
|
'GenerateBarCode' => 'MyElements::GenerateBarCode',
|
||||||
|
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'GenerateBarCode/BarCodeParam/Angle' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'GenerateBarCode/BarCodeParam/Width' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
|
'GenerateBarCode/BarCodeParam/BarCodeImageFormat' => 'MyTypes::ImageFormats',
|
||||||
|
'GenerateBarCode/BarCodeParam/BGColor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'GenerateBarCode/BarCodeParam/Ratio' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
|
'GenerateBarCode/BarCodeParam/Height' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'GenerateBarCode/BarCodeParam/CheckSum' => 'SOAP::WSDL::XSD::Typelib::Builtin::boolean',
|
||||||
|
'GenerateBarCode/BarCodeParam/checkSumMethod' => 'MyTypes::CheckSumMethod',
|
||||||
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'GenerateBarCode/BarCodeParam/barcodeType' => 'MyTypes::BarcodeType',
|
||||||
|
'GenerateBarCode/BarCodeParam/FontSize' => 'SOAP::WSDL::XSD::Typelib::Builtin::float',
|
||||||
|
'GenerateBarCode/BarCodeParam/Top' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'GenerateBarCodeResponse/GenerateBarCodeResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||||
|
'GenerateBarCodeResponse' => 'MyElements::GenerateBarCodeResponse',
|
||||||
|
'GenerateBarCode/BarCodeParam/Module' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'GenerateBarCode/BarCodeParam/showTextPosition' => 'MyTypes::ShowTextPosition',
|
||||||
|
'GenerateBarCode/BarCodeParam' => 'MyTypes::BarCodeData',
|
||||||
|
'GenerateBarCode/BarCodeParam/FontName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string'
|
||||||
|
};
|
||||||
|
;
|
||||||
|
|
||||||
|
sub get_class {
|
||||||
|
my $name = join '/', @{ $_[1] };
|
||||||
|
exists $typemap_1->{ $name } or die "Cannot resolve $name via " . __PACKAGE__;
|
||||||
|
return $typemap_1->{ $name };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypemaps::BarCode; - typemap for ::BarCode;
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ our $typemap_1 = {
|
|||||||
'GetFortuneCookieResponse' => 'MyElements::GetFortuneCookieResponse',
|
'GetFortuneCookieResponse' => 'MyElements::GetFortuneCookieResponse',
|
||||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
'GetSpecificCookie' => 'MyElements::GetSpecificCookie',
|
'GetSpecificCookie' => 'MyElements::GetSpecificCookie',
|
||||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::TOKEN',
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
'CountCookies' => 'MyElements::CountCookies',
|
'CountCookies' => 'MyElements::CountCookies',
|
||||||
'GetSpecificCookie/index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
'GetSpecificCookie/index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -30,6 +30,10 @@ sub get_class {
|
|||||||
return $typemap_1->{ $name };
|
return $typemap_1->{ $name };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ our $typemap_1 = {
|
|||||||
'GetWeatherResponse/GetWeatherResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'GetWeatherResponse/GetWeatherResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'GetWeather' => 'MyElements::GetWeather',
|
'GetWeather' => 'MyElements::GetWeather',
|
||||||
'GetCitiesByCountryResponse/GetCitiesByCountryResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'GetCitiesByCountryResponse/GetCitiesByCountryResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::TOKEN',
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
'GetWeatherResponse' => 'MyElements::GetWeatherResponse',
|
'GetWeatherResponse' => 'MyElements::GetWeatherResponse',
|
||||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
@@ -26,6 +26,10 @@ sub get_class {
|
|||||||
return $typemap_1->{ $name };
|
return $typemap_1->{ $name };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package MyTypemaps::HelloWorld;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
our $typemap_1 = {
|
||||||
|
'sayHello/givenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'sayHelloResponse' => 'MyElements::sayHelloResponse',
|
||||||
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'sayHelloResponse/sayHelloResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
|
'sayHello' => 'MyElements::sayHello',
|
||||||
|
'sayHello/name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11'
|
||||||
|
};
|
||||||
|
;
|
||||||
|
|
||||||
|
sub get_class {
|
||||||
|
my $name = join '/', @{ $_[1] };
|
||||||
|
exists $typemap_1->{ $name } or die "Cannot resolve $name via " . __PACKAGE__;
|
||||||
|
return $typemap_1->{ $name };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypemaps::HelloWorld; - typemap for ::HelloWorld;
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package MyTypemaps::TestService;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
our $typemap_1 = {
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/Contracts' => 'MyTypes::ArrayOfContract',
|
||||||
|
'ListPerson/in/HomeAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress' => 'MyTypes::Address',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract' => 'MyTypes::Contract',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/HomeAddress' => 'MyTypes::Address',
|
||||||
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
|
'ListPerson/in/HomeAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPerson/in/WorkAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts' => 'MyTypes::ArrayOfContract',
|
||||||
|
'ListPerson/in/WorkAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in' => 'MyTypes::Person',
|
||||||
|
'ListPersonResponse/out/NewElement/GivenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement' => 'MyTypes::Person',
|
||||||
|
'ListPerson/in/PersonID/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'ListPerson/in/HomeAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/PersonID/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'ListPerson/in/HomeAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/GivenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/HomeAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPerson/in/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/PersonID' => 'MyTypes::PersonID',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out' => 'MyTypes::ArrayOfPerson',
|
||||||
|
'ListPerson/in/Contracts/Contract' => 'MyTypes::Contract',
|
||||||
|
'ListPersonResponse/out/NewElement/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/DateOfBirth' => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract/ContractName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
|
'ListPerson/in/Contracts/Contract/ContractName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse' => 'MyElements::ListPersonResponse',
|
||||||
|
'ListPersonResponse/out/NewElement/Salutation' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
|
'ListPerson' => 'MyElements::ListPerson',
|
||||||
|
'ListPerson/in/Salutation' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/PersonID' => 'MyTypes::PersonID',
|
||||||
|
'ListPerson/in/HomeAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress' => 'MyTypes::Address',
|
||||||
|
'ListPersonResponse/out/NewElement/DateOfBirth' => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
'ListPerson/in/WorkAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract/ContractID' => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
'ListPerson/in/Contracts/Contract/ContractID' => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
'ListPerson/in/WorkAddress' => 'MyTypes::Address'
|
||||||
|
};
|
||||||
|
;
|
||||||
|
|
||||||
|
sub get_class {
|
||||||
|
my $name = join '/', @{ $_[1] };
|
||||||
|
exists $typemap_1->{ $name } or die "Cannot resolve $name via " . __PACKAGE__;
|
||||||
|
return $typemap_1->{ $name };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypemaps::TestService; - typemap for ::TestService;
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package MyTypes::Address;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Street_of :ATTR(:get<Street>);
|
||||||
|
my %ZIP_of :ATTR(:get<ZIP>);
|
||||||
|
my %City_of :ATTR(:get<City>);
|
||||||
|
my %Country_of :ATTR(:get<Country>);
|
||||||
|
my %PhoneNumber_of :ATTR(:get<PhoneNumber>);
|
||||||
|
my %MobilePhoneNumber_of :ATTR(:get<MobilePhoneNumber>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Street
|
||||||
|
ZIP
|
||||||
|
City
|
||||||
|
Country
|
||||||
|
PhoneNumber
|
||||||
|
MobilePhoneNumber
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Street => \%Street_of,
|
||||||
|
ZIP => \%ZIP_of,
|
||||||
|
City => \%City_of,
|
||||||
|
Country => \%Country_of,
|
||||||
|
PhoneNumber => \%PhoneNumber_of,
|
||||||
|
MobilePhoneNumber => \%MobilePhoneNumber_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Street => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
ZIP => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
City => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
Country => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
PhoneNumber => 'MyTypes::PhoneNumber',
|
||||||
|
MobilePhoneNumber => 'MyTypes::PhoneNumber',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Address
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Address from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Street
|
||||||
|
ZIP
|
||||||
|
City
|
||||||
|
Country
|
||||||
|
PhoneNumber
|
||||||
|
MobilePhoneNumber
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
package MyTypes::ArrayOfContract;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Contract_of :ATTR(:get<Contract>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Contract
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Contract => \%Contract_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Contract => 'MyTypes::Contract',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::ArrayOfContract
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
ArrayOfContract from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Contract
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package MyTypes::ArrayOfPerson;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %NewElement_of :ATTR(:get<NewElement>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
NewElement
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
NewElement => \%NewElement_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewElement => 'MyTypes::Person',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::ArrayOfPerson
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
ArrayOfPerson from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
NewElement
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
package MyTypes::BarCodeData;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Height_of :ATTR(:get<Height>);
|
||||||
|
my %Width_of :ATTR(:get<Width>);
|
||||||
|
my %Angle_of :ATTR(:get<Angle>);
|
||||||
|
my %Ratio_of :ATTR(:get<Ratio>);
|
||||||
|
my %Module_of :ATTR(:get<Module>);
|
||||||
|
my %Left_of :ATTR(:get<Left>);
|
||||||
|
my %Top_of :ATTR(:get<Top>);
|
||||||
|
my %CheckSum_of :ATTR(:get<CheckSum>);
|
||||||
|
my %FontName_of :ATTR(:get<FontName>);
|
||||||
|
my %BarColor_of :ATTR(:get<BarColor>);
|
||||||
|
my %BGColor_of :ATTR(:get<BGColor>);
|
||||||
|
my %FontSize_of :ATTR(:get<FontSize>);
|
||||||
|
my %barcodeOption_of :ATTR(:get<barcodeOption>);
|
||||||
|
my %barcodeType_of :ATTR(:get<barcodeType>);
|
||||||
|
my %checkSumMethod_of :ATTR(:get<checkSumMethod>);
|
||||||
|
my %showTextPosition_of :ATTR(:get<showTextPosition>);
|
||||||
|
my %BarCodeImageFormat_of :ATTR(:get<BarCodeImageFormat>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Height
|
||||||
|
Width
|
||||||
|
Angle
|
||||||
|
Ratio
|
||||||
|
Module
|
||||||
|
Left
|
||||||
|
Top
|
||||||
|
CheckSum
|
||||||
|
FontName
|
||||||
|
BarColor
|
||||||
|
BGColor
|
||||||
|
FontSize
|
||||||
|
barcodeOption
|
||||||
|
barcodeType
|
||||||
|
checkSumMethod
|
||||||
|
showTextPosition
|
||||||
|
BarCodeImageFormat
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Height => \%Height_of,
|
||||||
|
Width => \%Width_of,
|
||||||
|
Angle => \%Angle_of,
|
||||||
|
Ratio => \%Ratio_of,
|
||||||
|
Module => \%Module_of,
|
||||||
|
Left => \%Left_of,
|
||||||
|
Top => \%Top_of,
|
||||||
|
CheckSum => \%CheckSum_of,
|
||||||
|
FontName => \%FontName_of,
|
||||||
|
BarColor => \%BarColor_of,
|
||||||
|
BGColor => \%BGColor_of,
|
||||||
|
FontSize => \%FontSize_of,
|
||||||
|
barcodeOption => \%barcodeOption_of,
|
||||||
|
barcodeType => \%barcodeType_of,
|
||||||
|
checkSumMethod => \%checkSumMethod_of,
|
||||||
|
showTextPosition => \%showTextPosition_of,
|
||||||
|
BarCodeImageFormat => \%BarCodeImageFormat_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Height => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
Width => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
Angle => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
Ratio => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
Module => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
Left => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
Top => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
CheckSum => 'SOAP::WSDL::XSD::Typelib::Builtin::boolean',
|
||||||
|
FontName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
BarColor => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
BGColor => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
FontSize => 'SOAP::WSDL::XSD::Typelib::Builtin::float',
|
||||||
|
barcodeOption => 'MyTypes::BarcodeOption',
|
||||||
|
barcodeType => 'MyTypes::BarcodeType',
|
||||||
|
checkSumMethod => 'MyTypes::CheckSumMethod',
|
||||||
|
showTextPosition => 'MyTypes::ShowTextPosition',
|
||||||
|
BarCodeImageFormat => 'MyTypes::ImageFormats',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::BarCodeData
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
BarCodeData from the namespace http://www.webservicex.net/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Height
|
||||||
|
Width
|
||||||
|
Angle
|
||||||
|
Ratio
|
||||||
|
Module
|
||||||
|
Left
|
||||||
|
Top
|
||||||
|
CheckSum
|
||||||
|
FontName
|
||||||
|
BarColor
|
||||||
|
BGColor
|
||||||
|
FontSize
|
||||||
|
barcodeOption
|
||||||
|
barcodeType
|
||||||
|
checkSumMethod
|
||||||
|
showTextPosition
|
||||||
|
BarCodeImageFormat
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::BarCodeData
|
||||||
|
Height => $some_value, # int
|
||||||
|
Width => $some_value, # int
|
||||||
|
Angle => $some_value, # int
|
||||||
|
Ratio => $some_value, # int
|
||||||
|
Module => $some_value, # int
|
||||||
|
Left => $some_value, # int
|
||||||
|
Top => $some_value, # int
|
||||||
|
CheckSum => $some_value, # boolean
|
||||||
|
FontName => $some_value, # string
|
||||||
|
BarColor => $some_value, # string
|
||||||
|
BGColor => $some_value, # string
|
||||||
|
FontSize => $some_value, # float
|
||||||
|
barcodeOption => $some_value, # BarcodeOption
|
||||||
|
barcodeType => $some_value, # BarcodeType
|
||||||
|
checkSumMethod => $some_value, # CheckSumMethod
|
||||||
|
showTextPosition => $some_value, # ShowTextPosition
|
||||||
|
BarCodeImageFormat => $some_value, # ImageFormats
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::BarcodeOption;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::BarcodeOption
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
BarcodeOption from the namespace http://www.webservicex.net/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::BarcodeType;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::BarcodeType
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
BarcodeType from the namespace http://www.webservicex.net/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::CheckSumMethod;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::CheckSumMethod
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
CheckSumMethod from the namespace http://www.webservicex.net/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package MyTypes::Contract;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %ContractID_of :ATTR(:get<ContractID>);
|
||||||
|
my %ContractName_of :ATTR(:get<ContractName>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
ContractID
|
||||||
|
ContractName
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
ContractID => \%ContractID_of,
|
||||||
|
ContractName => \%ContractName_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ContractID => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
ContractName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Contract
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Contract from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
ContractID
|
||||||
|
ContractName
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::ImageFormats;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::ImageFormats
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
ImageFormats from the namespace http://www.webservicex.net/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package MyTypes::Person;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %PersonID_of :ATTR(:get<PersonID>);
|
||||||
|
my %Salutation_of :ATTR(:get<Salutation>);
|
||||||
|
my %Name_of :ATTR(:get<Name>);
|
||||||
|
my %GivenName_of :ATTR(:get<GivenName>);
|
||||||
|
my %DateOfBirth_of :ATTR(:get<DateOfBirth>);
|
||||||
|
my %HomeAddress_of :ATTR(:get<HomeAddress>);
|
||||||
|
my %WorkAddress_of :ATTR(:get<WorkAddress>);
|
||||||
|
my %Contracts_of :ATTR(:get<Contracts>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
PersonID
|
||||||
|
Salutation
|
||||||
|
Name
|
||||||
|
GivenName
|
||||||
|
DateOfBirth
|
||||||
|
HomeAddress
|
||||||
|
WorkAddress
|
||||||
|
Contracts
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
PersonID => \%PersonID_of,
|
||||||
|
Salutation => \%Salutation_of,
|
||||||
|
Name => \%Name_of,
|
||||||
|
GivenName => \%GivenName_of,
|
||||||
|
DateOfBirth => \%DateOfBirth_of,
|
||||||
|
HomeAddress => \%HomeAddress_of,
|
||||||
|
WorkAddress => \%WorkAddress_of,
|
||||||
|
Contracts => \%Contracts_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PersonID => 'MyTypes::PersonID',
|
||||||
|
Salutation => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
Name => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
GivenName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
DateOfBirth => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
HomeAddress => 'MyTypes::Address',
|
||||||
|
WorkAddress => 'MyTypes::Address',
|
||||||
|
Contracts => 'MyTypes::ArrayOfContract',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Person
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Person from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
PersonID
|
||||||
|
Salutation
|
||||||
|
Name
|
||||||
|
GivenName
|
||||||
|
DateOfBirth
|
||||||
|
HomeAddress
|
||||||
|
WorkAddress
|
||||||
|
Contracts
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package MyTypes::PersonID;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %ID_of :ATTR(:get<ID>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
ID
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
ID => \%ID_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::PersonID
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
PersonID from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
ID
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::PhoneNumber;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::PhoneNumber
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
PhoneNumber from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::ShowTextPosition;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::ShowTextPosition
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
ShowTextPosition from the namespace http://www.webservicex.net/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package MyTypes::test2;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %name_of :ATTR(:get<name>);
|
||||||
|
my %givenName_of :ATTR(:get<givenName>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
name
|
||||||
|
givenName
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
name => \%name_of,
|
||||||
|
givenName => \%givenName_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
givenName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::test2
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
test2 from the namespace urn:HelloWorld.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
name
|
||||||
|
givenName
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::test2
|
||||||
|
name => $some_value, # string
|
||||||
|
givenName => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package MyTypes::testExtended;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %extend_of :ATTR(:get<extend>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
extend
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
extend => \%extend_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
extend => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::testExtended
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
testExtended from the namespace urn:HelloWorld.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
extend
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::testExtended
|
||||||
|
extend => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use lib 'lib';
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
my $result = $soap->ListPerson({})
|
||||||
|
or die "error calling SOAP method";
|
||||||
|
|
||||||
|
print "Found " . @{ $result->get_out()->get_NewElement } . " persons\n";
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use XML::Compile::WSDL11;
|
||||||
|
use XML::Compile::Transport::SOAPHTTP;
|
||||||
|
|
||||||
|
my $wsdl = XML::Compile::WSDL11->new('wsdl/Person.wsdl');
|
||||||
|
|
||||||
|
# I have to lookup the methods from the WSDL
|
||||||
|
my $call = $wsdl->compileClient('ListPerson');
|
||||||
|
|
||||||
|
# I have to lookup the parameters from the WSDL
|
||||||
|
my $result = $call->({ in => undef});
|
||||||
|
|
||||||
|
die "Error calling soap method" if not defined $result;
|
||||||
|
|
||||||
|
# I have to lookup the output parameters from the WSDL - or try Dumper
|
||||||
|
#use Data::Dumper;
|
||||||
|
#print Dumper $result;
|
||||||
|
|
||||||
|
print "Found ", scalar @{ $result->{ parameters }->{ out }->{ seq_NewElement }->[0]->{ NewElement } } , " persons\n";
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
|
||||||
|
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||||
|
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="urn:HelloWorld"
|
||||||
|
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
||||||
|
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
|
||||||
|
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
|
||||||
|
targetNamespace="urn:HelloWorld"
|
||||||
|
xmlns="http://schemas.xmlsoap.org/wsdl/">
|
||||||
|
<types>
|
||||||
|
<s:schema elementFormDefault="qualified"
|
||||||
|
targetNamespace="urn:HelloWorld">
|
||||||
|
<s:element name="sayHello">
|
||||||
|
<s:complexType>
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="0" maxOccurs="1"
|
||||||
|
name="name" type="s:string" />
|
||||||
|
<s:element minOccurs="0" maxOccurs="1"
|
||||||
|
name="givenName" type="s:string" nillable="1" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:complexType>
|
||||||
|
</s:element>
|
||||||
|
|
||||||
|
<s:element name="sayHelloResponse">
|
||||||
|
<s:complexType>
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="0" maxOccurs="1"
|
||||||
|
name="sayHelloResult" type="s:string" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:complexType>
|
||||||
|
</s:element>
|
||||||
|
|
||||||
|
<s:complexType name="test2">
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="0" maxOccurs="1" name="name"
|
||||||
|
type="s:string" />
|
||||||
|
|
||||||
|
<s:element minOccurs="0" maxOccurs="1"
|
||||||
|
name="givenName" type="s:string" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:complexType>
|
||||||
|
|
||||||
|
<s:complexType name="testExtended">
|
||||||
|
<s:extension base="s0:test2">
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="0" maxOccurs="1"
|
||||||
|
name="extend" type="s:string" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:extension>
|
||||||
|
</s:complexType>
|
||||||
|
</s:schema>
|
||||||
|
</types>
|
||||||
|
|
||||||
|
<message name="sayHelloSoapIn">
|
||||||
|
<part name="parameters" element="s0:sayHello" />
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="sayHelloSoapOut">
|
||||||
|
<part name="parameters" element="s0:sayHelloResponse" />
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<portType name="Service1Soap">
|
||||||
|
<operation name="sayHello">
|
||||||
|
<input message="s0:sayHelloSoapIn" />
|
||||||
|
|
||||||
|
<output message="s0:sayHelloSoapOut" />
|
||||||
|
</operation>
|
||||||
|
</portType>
|
||||||
|
|
||||||
|
<binding name="Service1Soap" type="s0:Service1Soap">
|
||||||
|
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
|
||||||
|
style="document" />
|
||||||
|
|
||||||
|
<operation name="sayHello">
|
||||||
|
<soap:operation soapAction="urn:HelloWorld#sayHello"
|
||||||
|
style="document" />
|
||||||
|
|
||||||
|
<input>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</input>
|
||||||
|
|
||||||
|
<output>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</output>
|
||||||
|
</operation>
|
||||||
|
</binding>
|
||||||
|
|
||||||
|
<service name="HelloWorld">
|
||||||
|
<port name="HelloWorldSoap" binding="s0:Service1Soap">
|
||||||
|
<soap:address
|
||||||
|
location="http://localhost:81/soap-wsdl-test/helloworld.pl" />
|
||||||
|
</port>
|
||||||
|
</service>
|
||||||
|
</definitions>
|
||||||
|
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<wsdl:definitions name="benchmark"
|
||||||
|
targetNamespace="http://www.example.org/benchmark/"
|
||||||
|
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||||
|
xmlns:tns="http://www.example.org/benchmark/"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||||
|
<wsdl:types>
|
||||||
|
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="http://www.example.org/benchmark/">
|
||||||
|
|
||||||
|
<xsd:element name="ListPerson">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="in" type="tns:Person"
|
||||||
|
maxOccurs="1" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
|
||||||
|
<xsd:element name="ListPersonResponse">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="out" type="tns:ArrayOfPerson" />
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:complexType name="Person">
|
||||||
|
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="PersonID" type="tns:PersonID" />
|
||||||
|
<xsd:element name="Salutation" type="xsd:string" />
|
||||||
|
<xsd:element name="Name" type="xsd:string" />
|
||||||
|
<xsd:element name="GivenName" type="xsd:string" />
|
||||||
|
<xsd:element name="DateOfBirth" type="xsd:date" />
|
||||||
|
<xsd:element name="HomeAddress" type="tns:Address"
|
||||||
|
maxOccurs="1" minOccurs="1" />
|
||||||
|
<xsd:element name="WorkAddress" type="tns:Address"
|
||||||
|
maxOccurs="1" minOccurs="0" />
|
||||||
|
<xsd:element name="Contracts"
|
||||||
|
type="tns:ArrayOfContract" />
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:simpleType name="PhoneNumber">
|
||||||
|
<xsd:restriction base="xsd:string"></xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
|
||||||
|
<xsd:complexType name="ArrayOfPerson">
|
||||||
|
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="NewElement" type="tns:Person"
|
||||||
|
maxOccurs="unbounded" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="PersonID">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="ID" type="xsd:int"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="Address">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Street" type="xsd:string" />
|
||||||
|
<xsd:element name="ZIP" type="xsd:string" />
|
||||||
|
<xsd:element name="City" type="xsd:string" />
|
||||||
|
<xsd:element name="Country" type="xsd:string" />
|
||||||
|
<xsd:element name="PhoneNumber" type="tns:PhoneNumber" />
|
||||||
|
<xsd:element name="MobilePhoneNumber" type="tns:PhoneNumber" />
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="ArrayOfContract">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Contract" type="tns:Contract"
|
||||||
|
maxOccurs="unbounded" minOccurs="0">
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="Contract">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="ContractID" type="xsd:long" />
|
||||||
|
<xsd:element name="ContractName" type="xsd:string" />
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema>
|
||||||
|
</wsdl:types>
|
||||||
|
<wsdl:message name="ListPersonRequest">
|
||||||
|
<wsdl:part name="parameters" element="tns:ListPerson" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:message name="ListPersonResponse">
|
||||||
|
<wsdl:part name="parameters" element="tns:ListPersonResponse" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:portType name="NewPortType">
|
||||||
|
<wsdl:operation name="ListPerson">
|
||||||
|
<wsdl:input message="tns:ListPersonRequest"></wsdl:input>
|
||||||
|
<wsdl:output message="tns:ListPersonResponse"></wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:portType>
|
||||||
|
<wsdl:binding name="NewBinding" type="tns:NewPortType">
|
||||||
|
<soap:binding style="document"
|
||||||
|
transport="http://schemas.xmlsoap.org/soap/http" />
|
||||||
|
<wsdl:operation name="ListPerson">
|
||||||
|
<soap:operation
|
||||||
|
soapAction="http://www.example.org/benchmark/ListPerson" />
|
||||||
|
<wsdl:input>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</wsdl:input>
|
||||||
|
<wsdl:output>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:binding>
|
||||||
|
<wsdl:service name="TestService">
|
||||||
|
<wsdl:port name="TestPort" binding="tns:NewBinding">
|
||||||
|
<soap:address
|
||||||
|
location="http://localhost:81/soap-wsdl-test/person.pl"></soap:address>
|
||||||
|
</wsdl:port>
|
||||||
|
</wsdl:service>
|
||||||
|
</wsdl:definitions>
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.webservicex.net/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.webservicex.net/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
||||||
|
<wsdl:types>
|
||||||
|
<s:schema elementFormDefault="qualified" targetNamespace="http://www.webservicex.net/">
|
||||||
|
<s:element name="GenerateBarCode">
|
||||||
|
<s:complexType>
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="BarCodeParam" type="tns:BarCodeData" />
|
||||||
|
<s:element minOccurs="0" maxOccurs="1" name="BarCodeText" type="s:string" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:complexType>
|
||||||
|
</s:element>
|
||||||
|
<s:complexType name="BarCodeData">
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Height" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Width" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Angle" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Ratio" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Module" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Left" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="Top" type="s:int" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="CheckSum" type="s:boolean" />
|
||||||
|
<s:element minOccurs="0" maxOccurs="1" name="FontName" type="s:string" />
|
||||||
|
<s:element minOccurs="0" maxOccurs="1" name="BarColor" type="s:string" />
|
||||||
|
<s:element minOccurs="0" maxOccurs="1" name="BGColor" type="s:string" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="FontSize" type="s:float" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="barcodeOption" type="tns:BarcodeOption" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="barcodeType" type="tns:BarcodeType" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="checkSumMethod" type="tns:CheckSumMethod" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="showTextPosition" type="tns:ShowTextPosition" />
|
||||||
|
<s:element minOccurs="1" maxOccurs="1" name="BarCodeImageFormat" type="tns:ImageFormats" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:complexType>
|
||||||
|
<s:simpleType name="BarcodeOption">
|
||||||
|
<s:restriction base="s:string">
|
||||||
|
<s:enumeration value="None" />
|
||||||
|
<s:enumeration value="Code" />
|
||||||
|
<s:enumeration value="Typ" />
|
||||||
|
<s:enumeration value="Both" />
|
||||||
|
</s:restriction>
|
||||||
|
</s:simpleType>
|
||||||
|
<s:simpleType name="BarcodeType">
|
||||||
|
<s:restriction base="s:string">
|
||||||
|
<s:enumeration value="Code_2_5_interleaved" />
|
||||||
|
<s:enumeration value="Code_2_5_industrial" />
|
||||||
|
<s:enumeration value="Code_2_5_matrix" />
|
||||||
|
<s:enumeration value="Code39" />
|
||||||
|
<s:enumeration value="Code39Extended" />
|
||||||
|
<s:enumeration value="Code128A" />
|
||||||
|
<s:enumeration value="Code128B" />
|
||||||
|
<s:enumeration value="Code128C" />
|
||||||
|
<s:enumeration value="Code93" />
|
||||||
|
<s:enumeration value="Code93Extended" />
|
||||||
|
<s:enumeration value="CodeMSI" />
|
||||||
|
<s:enumeration value="CodePostNet" />
|
||||||
|
<s:enumeration value="CodeCodabar" />
|
||||||
|
<s:enumeration value="CodeEAN8" />
|
||||||
|
<s:enumeration value="CodeEAN13" />
|
||||||
|
<s:enumeration value="CodeUPC_A" />
|
||||||
|
<s:enumeration value="CodeUPC_E0" />
|
||||||
|
<s:enumeration value="CodeUPC_E1" />
|
||||||
|
<s:enumeration value="CodeUPC_Supp2" />
|
||||||
|
<s:enumeration value="CodeUPC_Supp5" />
|
||||||
|
<s:enumeration value="CodeEAN128A" />
|
||||||
|
<s:enumeration value="CodeEAN128B" />
|
||||||
|
<s:enumeration value="CodeEAN128C" />
|
||||||
|
</s:restriction>
|
||||||
|
</s:simpleType>
|
||||||
|
<s:simpleType name="CheckSumMethod">
|
||||||
|
<s:restriction base="s:string">
|
||||||
|
<s:enumeration value="None" />
|
||||||
|
<s:enumeration value="Modulo10" />
|
||||||
|
</s:restriction>
|
||||||
|
</s:simpleType>
|
||||||
|
<s:simpleType name="ShowTextPosition">
|
||||||
|
<s:restriction base="s:string">
|
||||||
|
<s:enumeration value="TopLeft" />
|
||||||
|
<s:enumeration value="TopRight" />
|
||||||
|
<s:enumeration value="TopCenter" />
|
||||||
|
<s:enumeration value="BottomLeft" />
|
||||||
|
<s:enumeration value="BottomRight" />
|
||||||
|
<s:enumeration value="BottomCenter" />
|
||||||
|
</s:restriction>
|
||||||
|
</s:simpleType>
|
||||||
|
<s:simpleType name="ImageFormats">
|
||||||
|
<s:restriction base="s:string">
|
||||||
|
<s:enumeration value="BMP" />
|
||||||
|
<s:enumeration value="EMF" />
|
||||||
|
<s:enumeration value="EXIF" />
|
||||||
|
<s:enumeration value="GIF" />
|
||||||
|
<s:enumeration value="ICON" />
|
||||||
|
<s:enumeration value="JPEG" />
|
||||||
|
<s:enumeration value="MemoryBMP" />
|
||||||
|
<s:enumeration value="PNG" />
|
||||||
|
<s:enumeration value="TIFF" />
|
||||||
|
<s:enumeration value="WMF" />
|
||||||
|
</s:restriction>
|
||||||
|
</s:simpleType>
|
||||||
|
<s:element name="GenerateBarCodeResponse">
|
||||||
|
<s:complexType>
|
||||||
|
<s:sequence>
|
||||||
|
<s:element minOccurs="0" maxOccurs="1" name="GenerateBarCodeResult" type="s:base64Binary" />
|
||||||
|
</s:sequence>
|
||||||
|
</s:complexType>
|
||||||
|
</s:element>
|
||||||
|
</s:schema>
|
||||||
|
</wsdl:types>
|
||||||
|
<wsdl:message name="GenerateBarCodeSoapIn">
|
||||||
|
<wsdl:part name="parameters" element="tns:GenerateBarCode" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:message name="GenerateBarCodeSoapOut">
|
||||||
|
<wsdl:part name="parameters" element="tns:GenerateBarCodeResponse" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:portType name="BarCodeSoap">
|
||||||
|
<wsdl:operation name="GenerateBarCode">
|
||||||
|
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">WebserviceX.NET barcode library that provides the means to create barcodes for printing and display in any internet enabled applications. This web service supports Code 128, Industrial 2 of 5, Interleaved 2 of 5, Code 2 5 Matrix, Code 39, Code 39 Extended, Code 93, Code 93 Extended, Codabar, EAN13, EAN8, MSI, Postnet, Supp2, Supp5, UPC A, UPC E0 and UPC E1 barcode formats. This Barcodes returns byte image. It supports following image format JPEG, GIF, PNG, BMP, EMF, EXIF, ICON, MEMORY BMP, TIFF and WMF.</documentation>
|
||||||
|
<wsdl:input message="tns:GenerateBarCodeSoapIn" />
|
||||||
|
<wsdl:output message="tns:GenerateBarCodeSoapOut" />
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:portType>
|
||||||
|
<wsdl:portType name="BarCodeHttpGet" />
|
||||||
|
<wsdl:portType name="BarCodeHttpPost" />
|
||||||
|
<wsdl:binding name="BarCodeSoap" type="tns:BarCodeSoap">
|
||||||
|
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
|
||||||
|
<wsdl:operation name="GenerateBarCode">
|
||||||
|
<soap:operation soapAction="http://www.webservicex.net/GenerateBarCode" style="document" />
|
||||||
|
<wsdl:input>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</wsdl:input>
|
||||||
|
<wsdl:output>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:binding>
|
||||||
|
<wsdl:binding name="BarCodeHttpGet" type="tns:BarCodeHttpGet">
|
||||||
|
<http:binding verb="GET" />
|
||||||
|
</wsdl:binding>
|
||||||
|
<wsdl:binding name="BarCodeHttpPost" type="tns:BarCodeHttpPost">
|
||||||
|
<http:binding verb="POST" />
|
||||||
|
</wsdl:binding>
|
||||||
|
<wsdl:service name="BarCode">
|
||||||
|
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Barcode generator</documentation>
|
||||||
|
<wsdl:port name="BarCodeSoap" binding="tns:BarCodeSoap">
|
||||||
|
<soap:address location="http://www.webservicex.net/genericbarcode.asmx" />
|
||||||
|
</wsdl:port>
|
||||||
|
<wsdl:port name="BarCodeHttpGet" binding="tns:BarCodeHttpGet">
|
||||||
|
<http:address location="http://www.webservicex.net/genericbarcode.asmx" />
|
||||||
|
</wsdl:port>
|
||||||
|
<wsdl:port name="BarCodeHttpPost" binding="tns:BarCodeHttpPost">
|
||||||
|
<http:address location="http://www.webservicex.net/genericbarcode.asmx" />
|
||||||
|
</wsdl:port>
|
||||||
|
</wsdl:service>
|
||||||
|
</wsdl:definitions>
|
||||||
+119
-44
@@ -1,16 +1,20 @@
|
|||||||
package SOAP::WSDL;
|
package SOAP::WSDL;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
|
use 5.008; # require at least perl 5.8
|
||||||
|
|
||||||
use vars qw($AUTOLOAD);
|
use vars qw($AUTOLOAD);
|
||||||
|
|
||||||
use Carp;
|
use Carp;
|
||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
use SOAP::WSDL::Client;
|
use SOAP::WSDL::Client;
|
||||||
use SOAP::WSDL::Expat::WSDLParser;
|
use SOAP::WSDL::Expat::WSDLParser;
|
||||||
use Class::Std;
|
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_17';
|
use version; our $VERSION= qv('2.00.02');
|
||||||
|
|
||||||
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>);
|
||||||
@@ -81,7 +85,7 @@ for my $method (keys %LOOKUP ) {
|
|||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, %args_from) = @_;
|
my ($class, %args_from) = @_;
|
||||||
my $self = \do { my $foo = undef };
|
my $self = \do { my $foo = Class::Std::Fast::ID() };
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
for (keys %args_from) {
|
for (keys %args_from) {
|
||||||
my $method = $self->can("set_$_")
|
my $method = $self->can("set_$_")
|
||||||
@@ -116,9 +120,7 @@ sub wsdlinit {
|
|||||||
# sanity checks
|
# sanity checks
|
||||||
my $types = $wsdl_definitions->first_types()
|
my $types = $wsdl_definitions->first_types()
|
||||||
or croak "unable to extract schema from WSDL";
|
or croak "unable to extract schema from WSDL";
|
||||||
my $ns = $wsdl_definitions->get_xmlns()
|
my $ns = $wsdl_definitions->get_xmlns();
|
||||||
or croak "unable to extract XML Namespaces" . $wsdl_definitions->to_string;
|
|
||||||
( %{ $ns } ) or croak "unable to extract XML Namespaces";
|
|
||||||
|
|
||||||
# setup lookup variables
|
# setup lookup variables
|
||||||
$definitions_of{ $ident } = $wsdl_definitions;
|
$definitions_of{ $ident } = $wsdl_definitions;
|
||||||
@@ -153,7 +155,7 @@ sub _wsdl_get_binding :PRIVATE {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $ident = ident $self;
|
my $ident = ident $self;
|
||||||
my $wsdl = $definitions_of{ $ident };
|
my $wsdl = $definitions_of{ $ident };
|
||||||
my $port = $port_of{ $ident } || $self->_wsdl_get_port();
|
my $port = $self->_wsdl_get_port();
|
||||||
$binding_of{ $ident } = $wsdl->find_binding( $port->expand( $port->get_binding() ) )
|
$binding_of{ $ident } = $wsdl->find_binding( $port->expand( $port->get_binding() ) )
|
||||||
or croak "no binding found for ", $port->get_binding();
|
or croak "no binding found for ", $port->get_binding();
|
||||||
return $binding_of{ $ident };
|
return $binding_of{ $ident };
|
||||||
@@ -162,7 +164,7 @@ sub _wsdl_get_portType :PRIVATE {
|
|||||||
my $self = shift;
|
my $self = shift;
|
||||||
my $ident = ident $self;
|
my $ident = ident $self;
|
||||||
my $wsdl = $definitions_of{ $ident };
|
my $wsdl = $definitions_of{ $ident };
|
||||||
my $binding = $binding_of{ $ident } || $self->_wsdl_get_binding();
|
my $binding = $self->_wsdl_get_binding();
|
||||||
$porttype_of{ $ident } = $wsdl->find_portType( $binding->expand( $binding->get_type() ) )
|
$porttype_of{ $ident } = $wsdl->find_portType( $binding->expand( $binding->get_type() ) )
|
||||||
or croak "cannot find portType for " . $binding->get_type();
|
or croak "cannot find portType for " . $binding->get_type();
|
||||||
return $porttype_of{ $ident };
|
return $porttype_of{ $ident };
|
||||||
@@ -174,26 +176,25 @@ 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();
|
||||||
my $binding = $binding_of{ $ident } || $self->_wsdl_get_binding()
|
$self->_wsdl_get_portType();
|
||||||
|| croak "Can't find binding";
|
|
||||||
my $portType = $porttype_of{ $ident } || $self->_wsdl_get_portType();
|
|
||||||
|
|
||||||
$method_info_of{ $ident } = {};
|
$method_info_of{ $ident } = {};
|
||||||
|
|
||||||
foreach my $binding_operation (@{ $binding->get_operation() })
|
foreach my $binding_operation (@{ $binding_of{ $ident }->get_operation() })
|
||||||
{
|
{
|
||||||
my $method = {};
|
my $method = {};
|
||||||
|
|
||||||
# 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
|
||||||
my $operation = $portType->find_operation( $ns,
|
my $operation = $porttype_of{ $ident }->find_operation( $ns,
|
||||||
$binding_operation->get_name() );
|
$binding_operation->get_name() );
|
||||||
|
|
||||||
# 2. get input message name
|
# 2. get input message name
|
||||||
@@ -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.
|
||||||
@@ -234,9 +240,13 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
return $method_info_of{ $ident };
|
return $method_info_of{ $ident };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# on_action is a no-op and just here for compatibility reasons.
|
||||||
|
# It returns the first parameter to allow method chaining.
|
||||||
|
sub on_action { return shift };
|
||||||
|
|
||||||
sub call {
|
sub call {
|
||||||
my ($self, $method, @data_from) = @_;
|
my ($self, $method, @data_from) = @_;
|
||||||
my $ident = ident $self;
|
my $ident = ${ $self };
|
||||||
|
|
||||||
my ($data, $header) = ref $data_from[0]
|
my ($data, $header) = ref $data_from[0]
|
||||||
? ($data_from[0], $data_from[1] )
|
? ($data_from[0], $data_from[1] )
|
||||||
@@ -324,6 +334,17 @@ read L<SOAP::WSDL::Manual>.
|
|||||||
For using an interpreting (thus slow and somewhat troublesome) WSDL based
|
For using an interpreting (thus slow and somewhat troublesome) WSDL based
|
||||||
SOAP client, which mimics L<SOAP::Lite|SOAP::Lite>'s API, read on.
|
SOAP client, which mimics L<SOAP::Lite|SOAP::Lite>'s API, read on.
|
||||||
|
|
||||||
|
Creating Interface classes is the recommended usage.
|
||||||
|
|
||||||
|
Did I say you should create interface classes following the steps in
|
||||||
|
L<SOAP::WSDL::Manual>?
|
||||||
|
|
||||||
|
If you're migrating from earlier versions of SOAP::WSDL, you should read the
|
||||||
|
MIGRATING documentation.
|
||||||
|
|
||||||
|
The stuff below is for users of the 1.2x SOAP::WSDL series. All others,
|
||||||
|
please refer to L<SOAP::WSDL::Manual>
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
my $soap = SOAP::WSDL->new(
|
my $soap = SOAP::WSDL->new(
|
||||||
@@ -495,7 +516,7 @@ it's content.
|
|||||||
The object tree has two main functions: It knows how to serialize data passed
|
The object tree has two main functions: It knows how to serialize data passed
|
||||||
as hash ref, and how to render the WSDL elements found into perl classes.
|
as hash ref, and how to render the WSDL elements found into perl classes.
|
||||||
|
|
||||||
Yup your're right, there's a builting code generation facility. Read
|
Yup you're right; there's a builtin code generation facility. Read
|
||||||
L<SOAP::WSDL::Manual> for using it.
|
L<SOAP::WSDL::Manual> for using it.
|
||||||
|
|
||||||
=item * no_dispatch
|
=item * no_dispatch
|
||||||
@@ -516,6 +537,34 @@ You may pass the servicename and portname as attributes to wsdlinit, though.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head1 Differences to previous versions
|
||||||
|
|
||||||
|
The following functionality is no longer supported:
|
||||||
|
|
||||||
|
=head2 Operation overloading
|
||||||
|
|
||||||
|
The SOAP standard allows operation overloading - that is, you may specify
|
||||||
|
SOAP operations with more than one message. The client/server than can
|
||||||
|
choose which message to send. This SOAP feature is usually used similar
|
||||||
|
to the use of methods with different argument lists in C++.
|
||||||
|
|
||||||
|
Operation overloading is no longer supported. The WS-I Basic profile does
|
||||||
|
not operation overloading. The same functionality as operation overloading
|
||||||
|
can be obtained by using a choice declaration in the XML Schema.
|
||||||
|
|
||||||
|
=head2 readable
|
||||||
|
|
||||||
|
Readable has no effect any more. If you need readable debug output, copy the
|
||||||
|
SOAP message to your favorite XML editor and run the source format command.
|
||||||
|
Outputting readable XML requires lots of programming for little use: The
|
||||||
|
resulting XMl is still quite unreadable.
|
||||||
|
|
||||||
|
=head2 on_action
|
||||||
|
|
||||||
|
Setting on_action is not required any more, the appropriate value is
|
||||||
|
automatically taken from the WSDL. on_action is a no-op, and is just here
|
||||||
|
for compatibility issues.
|
||||||
|
|
||||||
=head1 Differences to SOAP::Lite
|
=head1 Differences to SOAP::Lite
|
||||||
|
|
||||||
=head2 readable
|
=head2 readable
|
||||||
@@ -556,7 +605,7 @@ See L<class_resolver|class_resolver> above.
|
|||||||
|
|
||||||
=item * Hash refs
|
=item * Hash refs
|
||||||
|
|
||||||
This is for convnience: A single hash ref containing the content of the
|
This is for convenience: A single hash ref containing the content of the
|
||||||
SOAP body.
|
SOAP body.
|
||||||
|
|
||||||
=item * xml
|
=item * xml
|
||||||
@@ -598,6 +647,18 @@ details.
|
|||||||
|
|
||||||
=over
|
=over
|
||||||
|
|
||||||
|
=item * $obj == undef does not work in perl 5.8.6 and perl 5.8.7
|
||||||
|
|
||||||
|
Due to some strange behaviour in perl 5.8.6 and perl 5.8.7, stringification
|
||||||
|
overloading is not triggered during comparison with undef.
|
||||||
|
|
||||||
|
While this is probably harmless in most cases, it's important to know that
|
||||||
|
you need to do
|
||||||
|
|
||||||
|
defined( $obj->get_value() )
|
||||||
|
|
||||||
|
to check for undef values in simpleType objects.
|
||||||
|
|
||||||
=item * perl 5.8.0 or higher required
|
=item * perl 5.8.0 or higher required
|
||||||
|
|
||||||
SOAP::WSDL needs perl 5.8.0 or higher. This is due to a bug in perls
|
SOAP::WSDL needs perl 5.8.0 or higher. This is due to a bug in perls
|
||||||
@@ -611,24 +672,26 @@ If you want this changed, email me a copy of the specs, please.
|
|||||||
|
|
||||||
=item * Incomplete XML Schema definitions support
|
=item * Incomplete XML Schema definitions support
|
||||||
|
|
||||||
XML Schema attribute definitions are not supported yet.
|
This section describes the limitations of SOAP::WSDL, that is the interpreting
|
||||||
|
SOAP client. For limitations of L<wsdl2perl.pl|wsdl2perl.pl> generated
|
||||||
|
SOAP clients, see L<SOAP::WSDL::Manual::XSD>.
|
||||||
|
|
||||||
Importing external definitions is not supported yet.
|
XML Schema attribute definitions are not supported in interpreting mode.
|
||||||
|
|
||||||
The following XML Schema definitions varieties are not supported:
|
The following XML Schema definitions varieties are not supported in
|
||||||
|
interpreting mod:
|
||||||
|
|
||||||
group
|
group
|
||||||
union
|
|
||||||
simpleContent
|
simpleContent
|
||||||
|
|
||||||
The following XML Schema definition content model is only partially
|
The following XML Schema definition content model is only partially
|
||||||
supported:
|
supported in interpreting mode:
|
||||||
|
|
||||||
complexContent - only restriction variety supported
|
complexContent - only restriction variety supported
|
||||||
|
|
||||||
See L<SOAP::WSDL::Manual::XSD> for details.
|
See L<SOAP::WSDL::Manual::XSD> for details.
|
||||||
|
|
||||||
=item * Serialization of hash refs dos not work for ambiguos values
|
=item * Serialization of hash refs does not work for ambiguous values
|
||||||
|
|
||||||
If you have list elements with multiple occurences allowed, SOAP::WSDL
|
If you have list elements with multiple occurences allowed, SOAP::WSDL
|
||||||
has no means of finding out which variant you meant.
|
has no means of finding out which variant you meant.
|
||||||
@@ -638,17 +701,17 @@ Passing in item => [1,2,3] could serialize to
|
|||||||
<item>1 2</item><item>3</item>
|
<item>1 2</item><item>3</item>
|
||||||
<item>1</item><item>2 3</item>
|
<item>1</item><item>2 3</item>
|
||||||
|
|
||||||
Ambiguos data can be avoided by providing data as objects.
|
Ambiguous data can be avoided by providing data as objects.
|
||||||
|
|
||||||
=item * XML Schema facets
|
=item * XML Schema facets
|
||||||
|
|
||||||
Almost no XML schema facets are implemented yet. The only facets
|
Almost no XML schema facets are implemented. The only facets
|
||||||
currently implemented are:
|
currently implemented are:
|
||||||
|
|
||||||
fixed
|
fixed
|
||||||
default
|
default
|
||||||
|
|
||||||
The following facets have no influence yet:
|
The following facets have no influence:
|
||||||
|
|
||||||
minLength
|
minLength
|
||||||
maxLength
|
maxLength
|
||||||
@@ -669,16 +732,16 @@ The following facets have no influence yet:
|
|||||||
|
|
||||||
=item * L<SOAP::Lite|SOAP::Lite>
|
=item * L<SOAP::Lite|SOAP::Lite>
|
||||||
|
|
||||||
Full featured SOAP-library, little WSDL support. Supports rpc-encoded style only. Many protocols supported.
|
Full featured SOAP-library, little WSDL support. Supports rpc-encoded style
|
||||||
|
only. Many protocols supported.
|
||||||
|
|
||||||
=item * L<XML::Compile::WSDL|XML::Compile::WSDL> / L<XML::Compile::SOAP|XML::Compile::SOAP>
|
=item * L<XML::Compile::SOAP|XML::Compile::SOAP>
|
||||||
|
|
||||||
A promising-looking approach derived from a cool functional DOM-based XML schema parser.
|
Creates parser/generator functions for SOAP messages. Includes SOAP Client
|
||||||
|
and Server implementations. Can validate XML messages.
|
||||||
|
|
||||||
Will support encoding/decoding of SOAP messages based on WSDL definitions.
|
You might want to give it a try, especially if you need to adhere very
|
||||||
|
closely to the XML Schema / WSDL specs.
|
||||||
Not yet finished at the time of writing - but you may wish to give it a try, especially
|
|
||||||
if you need to adhere very closely to the XML Schema / WSDL specs.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -706,20 +769,33 @@ became v1.23)
|
|||||||
|
|
||||||
David Bussenschutt, Damian A. Martinez Gelabert, Dennis S. Hennen, Dan Horne,
|
David Bussenschutt, Damian A. Martinez Gelabert, Dennis S. Hennen, Dan Horne,
|
||||||
Peter Orvos, Mark Overmeer, Jon Robens, Isidro Vila Verde and Glenn Wood
|
Peter Orvos, Mark Overmeer, Jon Robens, Isidro Vila Verde and Glenn Wood
|
||||||
spotted bugs and/or suggested improvements in the 1.2x releases.
|
(in alphabetical order) spotted bugs and/or suggested improvements in
|
||||||
|
the 1.2x releases.
|
||||||
|
|
||||||
|
Noah Robin contirbuted lots of documentation fixes, and the mod_perl server.
|
||||||
|
|
||||||
|
JT Justman and Noah Robin provided early feedback and bug reports for
|
||||||
|
the 2.xx pre-releases.
|
||||||
|
|
||||||
|
Adam Kennedy checked and suggested improvements on metadata and dependencies
|
||||||
|
in the 2.xx pre-releases.
|
||||||
|
|
||||||
Andreas 'ac0v' Specht constantly asked for better performance.
|
Andreas 'ac0v' Specht constantly asked for better performance.
|
||||||
|
|
||||||
JT Justman provided early feedback for the 2.xx pre-releases.
|
Matt S. Trout encouraged me "to get a non-dev-release out."
|
||||||
|
|
||||||
|
CPAN Testers provided most valuable (automated) feedback. Thanks a lot.
|
||||||
|
|
||||||
Numerous people sent me their real-world WSDL files for testing. Thank you.
|
Numerous people sent me their real-world WSDL files for testing. Thank you.
|
||||||
|
|
||||||
Paul Kulchenko and Byrne Reese wrote and maintained SOAP::Lite and
|
Paul Kulchenko and Byrne Reese wrote and maintained SOAP::Lite and
|
||||||
thus provided a base (and counterpart) for SOAP::WSDL.
|
thus provided a base (and counterpart) for SOAP::WSDL.
|
||||||
|
|
||||||
|
Mark Overmeer wrote XML::Compile::SOAP - competition is good for business.
|
||||||
|
|
||||||
=head1 LICENSE AND COPYRIGHT
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
Copyright 2004-2007 Martin Kutter.
|
Copyright 2004-2008 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
|
||||||
@@ -730,10 +806,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: WSDL.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: WSDL.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
+50
-26
@@ -1,23 +1,40 @@
|
|||||||
package SOAP::WSDL::Base;
|
package SOAP::WSDL::Base;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use List::Util qw(first);
|
use List::Util qw(first);
|
||||||
use Carp qw(croak carp confess);
|
use Carp qw(croak carp confess);
|
||||||
|
|
||||||
our $VERSION='2.00_17';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %id_of :ATTR(:name<id> :default<()>);
|
my %id_of :ATTR(:name<id> :default<()>);
|
||||||
my %name_of :ATTR(:name<name> :default<()>);
|
my %lang_of :ATTR(:name<lang> :default<()>);
|
||||||
my %documentation_of :ATTR(:name<documentation> :default<()>);
|
my %name_of :ATTR(:name<name> :default<()>);
|
||||||
my %targetNamespace_of :ATTR(:name<targetNamespace> :default<()>);
|
my %documentation_of :ATTR(:name<documentation> :default<()>);
|
||||||
my %xmlns_of :ATTR(:name<xmlns> :default<{}>);
|
my %annotation_of :ATTR(:name<annotation> :default<()>);
|
||||||
my %parent_of :ATTR(:name<parent> :default<()>);
|
my %targetNamespace_of :ATTR(:name<targetNamespace> :default<()>);
|
||||||
|
my %xmlns_of :ATTR(:name<xmlns> :default<{}>);
|
||||||
|
my %parent_of :ATTR(:name<parent> :default<()>);
|
||||||
|
|
||||||
|
my %namespaces_of :ATTR(:default<{}>);
|
||||||
|
|
||||||
|
sub namespaces {
|
||||||
|
return shift->get_xmlns();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
my ($self, $ident, $arg_ref) = @_;
|
||||||
|
#$xmlns_of{ $ident }->{ '#default' } = $self->get_xmlns()->{ '#default' };
|
||||||
|
$xmlns_of{ $ident }->{ 'xml' } = 'http://www.w3.org/XML/1998/namespace';
|
||||||
|
$namespaces_of{ $ident }->{ '#default' } = $self->get_xmlns()->{ '#default' };
|
||||||
|
$namespaces_of{ $ident }->{ 'xml' } = 'http://www.w3.org/XML/1998/namespace';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
sub DEMOLISH {
|
sub DEMOLISH {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# delete upward references
|
# delete upward references
|
||||||
delete $parent_of{ ident $self };
|
delete $parent_of{ ${ $self } };
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +99,12 @@ sub AUTOMETHOD {
|
|||||||
return $result_ref->[0];
|
return $result_ref->[0];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
confess "$subname not found in class " . (ref $self || $self) ;
|
|
||||||
|
# return if called from can();
|
||||||
|
my @caller = caller(2);
|
||||||
|
return if ($caller[3] eq 'Class::Std::Fast::__ANON__');
|
||||||
|
# confess "$subname not found in class " . ref $self;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub init {
|
sub init {
|
||||||
@@ -91,18 +113,8 @@ sub init {
|
|||||||
{
|
{
|
||||||
croak @args if (not defined ($value->{ Name }));
|
croak @args if (not defined ($value->{ Name }));
|
||||||
if ($value->{ Name } =~m{^xmlns\:}xms) {
|
if ($value->{ Name } =~m{^xmlns\:}xms) {
|
||||||
croak $xmlns_of{ ident $self }
|
|
||||||
if ref $xmlns_of{ ident $self } ne 'HASH';
|
|
||||||
|
|
||||||
# add namespaces
|
# add namespaces
|
||||||
$xmlns_of{ ident $self }->{ $value->{ Value } } =
|
$xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value };
|
||||||
$value->{ LocalName };
|
|
||||||
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
elsif ($value->{ Name } =~m{^xmlns$}xms) {
|
|
||||||
# just ignore xmlns = for now
|
|
||||||
# TODO handle xmlns correctly - maybe via setting a prefix ?
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,15 +126,27 @@ sub init {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub expand {
|
sub expand {
|
||||||
my ($self, , $qname) = @_;
|
my ($self, $qname) = @_;
|
||||||
my ($prefix, $localname) = split /:/x, $qname;
|
my $ns_of = $self->namespaces();
|
||||||
my %ns_map = reverse %{ $self->get_xmlns() };
|
if (not $qname=~m{:}xm) {
|
||||||
return ($ns_map{ $prefix }, $localname) if ($ns_map{ $prefix });
|
if (defined $ns_of->{ '#default' }) {
|
||||||
|
return $self->get_targetNamespace(), $qname;
|
||||||
|
# return $ns_of->{ '#default' }, $qname;
|
||||||
|
}
|
||||||
|
if (my $parent = $self->get_parent()) {
|
||||||
|
return $parent->expand($qname);
|
||||||
|
}
|
||||||
|
die "un-prefixed element name <$qname> found, but no default namespace set\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
my ($prefix, $localname) = split /:/x, $qname;
|
||||||
|
|
||||||
|
return ($ns_of->{ $prefix }, $localname) if ($ns_of->{ $prefix });
|
||||||
if (my $parent = $self->get_parent()) {
|
if (my $parent = $self->get_parent()) {
|
||||||
return $parent->expand($qname);
|
return $parent->expand($qname);
|
||||||
}
|
}
|
||||||
confess "unbound prefix $prefix found for $prefix:$localname";
|
croak "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are "
|
||||||
|
. join(', ', keys %{ $ns_of });
|
||||||
}
|
}
|
||||||
sub _expand;
|
sub _expand;
|
||||||
*_expand = \&expand;
|
*_expand = \&expand;
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package SOAP::WSDL::Binding;
|
package SOAP::WSDL::Binding;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use List::Util qw(first);
|
use List::Util qw(first);
|
||||||
use base qw(SOAP::WSDL::Base);
|
use base qw(SOAP::WSDL::Base);
|
||||||
|
|
||||||
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %operation_of :ATTR(:name<operation> :default<()>);
|
my %operation_of :ATTR(:name<operation> :default<()>);
|
||||||
my %type_of :ATTR(:name<type> :default<()>);
|
my %type_of :ATTR(:name<type> :default<()>);
|
||||||
my %transport_of :ATTR(:name<transport> :default<()>);
|
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||||
|
|||||||
+48
-24
@@ -3,7 +3,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Carp;
|
use Carp;
|
||||||
|
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
|
|
||||||
use SOAP::WSDL::Factory::Deserializer;
|
use SOAP::WSDL::Factory::Deserializer;
|
||||||
@@ -11,10 +11,11 @@ use SOAP::WSDL::Factory::Serializer;
|
|||||||
use SOAP::WSDL::Factory::Transport;
|
use SOAP::WSDL::Factory::Transport;
|
||||||
use SOAP::WSDL::Expat::MessageParser;
|
use SOAP::WSDL::Expat::MessageParser;
|
||||||
|
|
||||||
our $VERSION = '2.00_17';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
||||||
my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
|
my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
|
||||||
|
my %prefix_of :ATTR(:name<prefix> :default<()>);
|
||||||
my %outputxml_of :ATTR(:name<outputxml> :default<()>);
|
my %outputxml_of :ATTR(:name<outputxml> :default<()>);
|
||||||
my %transport_of :ATTR(:name<transport> :default<()>);
|
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||||
my %endpoint_of :ATTR(:name<endpoint> :default<()>);
|
my %endpoint_of :ATTR(:name<endpoint> :default<()>);
|
||||||
@@ -42,7 +43,7 @@ sub get_proxy { ## no critic RequireArgUnpacking
|
|||||||
|
|
||||||
sub set_proxy {
|
sub set_proxy {
|
||||||
my ($self, @args_from) = @_;
|
my ($self, @args_from) = @_;
|
||||||
my $ident = ident $self;
|
my $ident = ${ $self };
|
||||||
|
|
||||||
# remember old value to return it later - Class::Std does so, too
|
# remember old value to return it later - Class::Std does so, too
|
||||||
my $old_value = $transport_of{ $ident };
|
my $old_value = $transport_of{ $ident };
|
||||||
@@ -61,7 +62,7 @@ sub set_proxy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub set_soap_version {
|
sub set_soap_version {
|
||||||
my $ident = ident shift;
|
my $ident = ${ $_[0] };
|
||||||
|
|
||||||
# remember old value to return it later - Class::Std does so, too
|
# remember old value to return it later - Class::Std does so, too
|
||||||
my $soap_version = $soap_version_of{ $ident };
|
my $soap_version = $soap_version_of{ $ident };
|
||||||
@@ -71,14 +72,14 @@ sub set_soap_version {
|
|||||||
delete $serializer_of{ $ident };
|
delete $serializer_of{ $ident };
|
||||||
delete $deserializer_of{ $ident };
|
delete $deserializer_of{ $ident };
|
||||||
|
|
||||||
$soap_version_of{ $ident } = shift;
|
$soap_version_of{ $ident } = $_[1];
|
||||||
|
|
||||||
return $soap_version;
|
return $soap_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Mimic SOAP::Lite's behaviour for getter/setter routines
|
# Mimic SOAP::Lite's behaviour for getter/setter routines
|
||||||
SUBFACTORY: {
|
SUBFACTORY: {
|
||||||
for (qw(class_resolver no_dispatch outputxml proxy)) {
|
for (qw(class_resolver no_dispatch outputxml proxy prefix)) {
|
||||||
my $setter = "set_$_";
|
my $setter = "set_$_";
|
||||||
my $getter = "get_$_";
|
my $getter = "get_$_";
|
||||||
no strict qw(refs); ## no critic ProhibitNoStrict
|
no strict qw(refs); ## no critic ProhibitNoStrict
|
||||||
@@ -94,7 +95,7 @@ SUBFACTORY: {
|
|||||||
|
|
||||||
sub call {
|
sub call {
|
||||||
my ($self, $method, @data_from) = @_;
|
my ($self, $method, @data_from) = @_;
|
||||||
my $ident = ident $self;
|
my $ident = ${ $self };
|
||||||
|
|
||||||
# the only valid idiom for calling a method with both a header and a body
|
# the only valid idiom for calling a method with both a header and a body
|
||||||
# is
|
# is
|
||||||
@@ -124,6 +125,7 @@ sub call {
|
|||||||
method => $operation,
|
method => $operation,
|
||||||
body => $data,
|
body => $data,
|
||||||
header => $header,
|
header => $header,
|
||||||
|
options => {prefix => $prefix_of{ $ident }},
|
||||||
});
|
});
|
||||||
|
|
||||||
return $envelope if $self->no_dispatch();
|
return $envelope if $self->no_dispatch();
|
||||||
@@ -259,30 +261,52 @@ You probably should not use a character encoding different from utf8:
|
|||||||
SOAP::WSDL::Client will not convert the request into a different encoding
|
SOAP::WSDL::Client will not convert the request into a different encoding
|
||||||
(yet).
|
(yet).
|
||||||
|
|
||||||
To leave out the encoding, just set the content type without appendet charset
|
To leave out the encoding, just set the content type without appending charset
|
||||||
like in
|
like this:
|
||||||
|
|
||||||
text/xml
|
$soap->set_content_type('text/xml');
|
||||||
|
|
||||||
Default:
|
Default:
|
||||||
|
|
||||||
text/xml; charset: utf8
|
text/xml; charset: utf8
|
||||||
|
|
||||||
=head3 set_trace
|
=head3 set_prefix
|
||||||
|
|
||||||
$soap->set_trace(1);
|
$soap->set_prefix('ns2');
|
||||||
$soap->set_trace( sub { Log::Log4perl::get_logger()->debug( @_ ) } );
|
|
||||||
|
|
||||||
When set to a true value, tracing (via warn) is enabled.
|
If set, alters the serialization of the request XML such that the supplied value is used as a namespace prefix for SOAP method calls. By way of example, the default XML serialization returns something like this:
|
||||||
|
|
||||||
When set to a code reference, this function will be called on every
|
<?xml version="1.0"?>
|
||||||
trace call, making it really easy for you to set up log4perl logging
|
<SOAP-ENV:Envelope
|
||||||
or whatever you need.
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
|
||||||
|
<SOAP-ENV:Body>
|
||||||
|
<getElementId xmlns="http://services.exmaple.org/">
|
||||||
|
<elementId>12345</elementId>
|
||||||
|
</getElementId>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
||||||
|
|
||||||
|
If the sample set_prefix() call above is used prior to calling your SOAP method, the XML serialization returns this instead:
|
||||||
|
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<SOAP-ENV:Envelope
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
|
||||||
|
xmlns:ns2="http://services.example.org/">
|
||||||
|
<SOAP-ENV:Body>
|
||||||
|
<ns2:getElementId>
|
||||||
|
<elementId>12345</elementId>
|
||||||
|
</ns2:getElementId>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
||||||
|
|
||||||
|
This is useful in cases where, for instance, one is communicating with a JAX L<https://jax-ws.dev.java.net/> webservice, which tends to understand the latter but not the former. Note that this implementation is currently limited to a single additional namespace; if you require multiple custom namespaces, you should probably look into creating your own serializer.
|
||||||
|
|
||||||
=head2 Features different from SOAP::Lite
|
=head2 Features different from SOAP::Lite
|
||||||
|
|
||||||
SOAP::WSDL does not aim to be a complete replacement for SOAP::Lite - the
|
SOAP::WSDL does not aim to be a complete replacement for SOAP::Lite - the
|
||||||
SOAP::Lite module has it's strengths and weaknesses and SOAP::WSDL is
|
SOAP::Lite module has its strengths and weaknesses and SOAP::WSDL is
|
||||||
designed as a cure for the weakness of little WSDL support - nothing more,
|
designed as a cure for the weakness of little WSDL support - nothing more,
|
||||||
nothing less.
|
nothing less.
|
||||||
|
|
||||||
@@ -294,7 +318,7 @@ A few things are quite different from SOAP::Lite, though:
|
|||||||
|
|
||||||
=head3 SOAP request data
|
=head3 SOAP request data
|
||||||
|
|
||||||
SOAP request data may either be given as message object, or as hash ref (in
|
SOAP request data may either be given as message object, or as a hash ref (in
|
||||||
which case it will automatically be encoded into a message object).
|
which case it will automatically be encoded into a message object).
|
||||||
|
|
||||||
=head3 Return values
|
=head3 Return values
|
||||||
@@ -314,7 +338,7 @@ The fault object is a SOAP1.1 fault object of the following
|
|||||||
C<SOAP::WSDL::SOAP::Typelib::Fault11>.
|
C<SOAP::WSDL::SOAP::Typelib::Fault11>.
|
||||||
|
|
||||||
SOAP::WSDL::SOAP::Typelib::Fault11 objects are false in boolean context, so
|
SOAP::WSDL::SOAP::Typelib::Fault11 objects are false in boolean context, so
|
||||||
you can just do something like
|
you can just do something like:
|
||||||
|
|
||||||
my $result = $soap->call($method, $data);
|
my $result = $soap->call($method, $data);
|
||||||
|
|
||||||
@@ -332,7 +356,7 @@ to true. SOAP::WSDL::Client returns the complete XML response.
|
|||||||
|
|
||||||
=head3 Auto-Dispatching
|
=head3 Auto-Dispatching
|
||||||
|
|
||||||
SOAP::WSDL::Client does B<does not> support auto-dispatching.
|
SOAP::WSDL::Client B<does not> support auto-dispatching.
|
||||||
|
|
||||||
This is on purpose: You may easily create interface classes by using
|
This is on purpose: You may easily create interface classes by using
|
||||||
SOAP::WSDL::Client and implementing something like
|
SOAP::WSDL::Client and implementing something like
|
||||||
@@ -371,10 +395,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Client.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Client.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
@@ -4,19 +4,36 @@ use warnings;
|
|||||||
use base 'SOAP::WSDL::Client';
|
use base 'SOAP::WSDL::Client';
|
||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
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;
|
||||||
my $class = $method->{ body }->{ parts }->[0];
|
$body = ref $body eq 'ARRAY' ? $body : [ $body ];
|
||||||
eval "require $class" || die $@;
|
|
||||||
$body = $class->new($body);
|
my @body_from = @{ $body }; # make a copy
|
||||||
|
|
||||||
|
# build list of parts as objects initialized with
|
||||||
|
# parameters given
|
||||||
|
my @part_from = ();
|
||||||
|
foreach my $class (@{ $method->{ body }->{ parts } }) {
|
||||||
|
eval "require $class" || die $@;
|
||||||
|
push @part_from, $class->new(shift(@body_from) || {});
|
||||||
|
}
|
||||||
|
|
||||||
|
# it's either the first part or a list ref with all parts...
|
||||||
|
$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 $@;
|
||||||
@@ -26,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__
|
||||||
@@ -94,9 +78,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Base.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Base.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -6,25 +6,25 @@ use Carp;
|
|||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Path;
|
use File::Path;
|
||||||
use List::Util qw(first);
|
use List::Util qw(first);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use base qw(SOAP::WSDL::Base);
|
use base qw(SOAP::WSDL::Base);
|
||||||
|
|
||||||
our $VERSION='2.00_17';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %types_of :ATTR(:name<types> :default<[]>);
|
my %types_of :ATTR(:name<types> :default<[]>);
|
||||||
my %message_of :ATTR(:name<message> :default<()>);
|
my %message_of :ATTR(:name<message> :default<[]>);
|
||||||
my %portType_of :ATTR(:name<portType> :default<()>);
|
my %portType_of :ATTR(:name<portType> :default<[]>);
|
||||||
my %binding_of :ATTR(:name<binding> :default<()>);
|
my %binding_of :ATTR(:name<binding> :default<[]>);
|
||||||
my %service_of :ATTR(:name<service> :default<()>);
|
my %service_of :ATTR(:name<service> :default<[]>);
|
||||||
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
||||||
|
|
||||||
# must be attr for Class::Std::Storable
|
# must be attr for Class::Std::Fast::Storable
|
||||||
my %attributes_of :ATTR();
|
my %attributes_of :ATTR();
|
||||||
%attributes_of = (
|
%attributes_of = (
|
||||||
binding => \%binding_of,
|
binding => \%binding_of,
|
||||||
message => \%message_of,
|
message => \%message_of,
|
||||||
portType => \%portType_of,
|
portType => \%portType_of,
|
||||||
service => \%service_of,
|
service => \%service_of,
|
||||||
);
|
);
|
||||||
|
|
||||||
# Function factory - we could be writing this method for all %attribute
|
# Function factory - we could be writing this method for all %attribute
|
||||||
@@ -105,7 +105,7 @@ Returns the message matching the namespace/localname pair passed as arguments.
|
|||||||
Accessors/Mutators for accessing / setting the E<gt>typesE<lt> child
|
Accessors/Mutators for accessing / setting the E<gt>typesE<lt> child
|
||||||
element(s).
|
element(s).
|
||||||
|
|
||||||
=head1 LICENSE and COPYRIGHT
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
Copyright 2004-2007 Martin Kutter.
|
Copyright 2004-2007 Martin Kutter.
|
||||||
|
|
||||||
@@ -118,10 +118,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Definitions.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Definitions.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package SOAP::WSDL::Deserializer::Hash;
|
package SOAP::WSDL::Deserializer::Hash;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
||||||
use SOAP::WSDL::Expat::Message2Hash;
|
use SOAP::WSDL::Expat::Message2Hash;
|
||||||
|
|
||||||
use SOAP::WSDL::Factory::Deserializer;
|
use SOAP::WSDL::Factory::Deserializer;
|
||||||
SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ );
|
SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ );
|
||||||
|
|
||||||
our $VERSION='2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
sub BUILD {
|
sub BUILD {
|
||||||
my ($self, $ident, $args_of_ref) = @_;
|
my ($self, $ident, $args_of_ref) = @_;
|
||||||
@@ -152,9 +152,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Hash.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Hash.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/Hash.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/Hash.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Deserializer::SOM;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
our @ISA;
|
our @ISA;
|
||||||
|
|
||||||
eval {
|
eval {
|
||||||
@@ -68,7 +68,7 @@ from the L<SOAP::Lite|SOAP::Lite> package.
|
|||||||
|
|
||||||
=head1 USAGE
|
=head1 USAGE
|
||||||
|
|
||||||
SOAP::WSDL::Deserializer will not auroregister itself - to use it for a particular
|
SOAP::WSDL::Deserializer will not autoregister itself - to use it for a particular
|
||||||
SOAP version just use the following lines:
|
SOAP version just use the following lines:
|
||||||
|
|
||||||
my $soap_version = '1.1'; # or '1.2', further versions may appear.
|
my $soap_version = '1.1'; # or '1.2', further versions may appear.
|
||||||
@@ -114,9 +114,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: SOM.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: SOM.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/SOM.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/SOM.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
package SOAP::WSDL::Deserializer::XSD;
|
package SOAP::WSDL::Deserializer::XSD;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
||||||
use SOAP::WSDL::Expat::MessageParser;
|
use SOAP::WSDL::Expat::MessageParser;
|
||||||
|
|
||||||
our $VERSION='2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
||||||
|
|
||||||
|
my %parser_of :ATTR();
|
||||||
|
|
||||||
sub BUILD {
|
sub BUILD {
|
||||||
my ($self, $ident, $args_of_ref) = @_;
|
my ($self, $ident, $args_of_ref) = @_;
|
||||||
|
|
||||||
@@ -16,16 +18,15 @@ sub BUILD {
|
|||||||
for (keys %{ $args_of_ref }) {
|
for (keys %{ $args_of_ref }) {
|
||||||
delete $args_of_ref->{ $_ } if $_ ne 'class_resolver';
|
delete $args_of_ref->{ $_ } if $_ ne 'class_resolver';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub deserialize {
|
sub deserialize {
|
||||||
my ($self, $content) = @_;
|
my ($self, $content) = @_;
|
||||||
|
|
||||||
my $parser = SOAP::WSDL::Expat::MessageParser->new({
|
$parser_of{ ${ $self } } = SOAP::WSDL::Expat::MessageParser->new()
|
||||||
class_resolver => $class_resolver_of{ ident $self },
|
if not $parser_of{ ${ $self } };
|
||||||
});
|
$parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ${ $self } } );
|
||||||
eval { $parser->parse_string( $content ) };
|
eval { $parser_of{ ${ $self } }->parse_string( $content ) };
|
||||||
if ($@) {
|
if ($@) {
|
||||||
return $self->generate_fault({
|
return $self->generate_fault({
|
||||||
code => 'soap:Server',
|
code => 'soap:Server',
|
||||||
@@ -34,7 +35,7 @@ sub deserialize {
|
|||||||
. "Message was: \n$content"
|
. "Message was: \n$content"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return ( $parser->get_data(), $parser->get_header() );
|
return ( $parser_of{ ${ $self } }->get_data(), $parser_of{ ${ $self } }->get_header() );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub generate_fault {
|
sub generate_fault {
|
||||||
@@ -71,7 +72,7 @@ Usually you don't need to do anything to use this package - it's the default
|
|||||||
deserializer for SOAP::WSDL::Client and interface classes generated by
|
deserializer for SOAP::WSDL::Client and interface classes generated by
|
||||||
SOAP::WSDL.
|
SOAP::WSDL.
|
||||||
|
|
||||||
Is you want to use the XSD serializer from SOAP::WSDL, set the outputtree()
|
If you want to use the XSD serializer from SOAP::WSDL, set the outputtree()
|
||||||
property and provide a class_resolver.
|
property and provide a class_resolver.
|
||||||
|
|
||||||
=head1 METHODS
|
=head1 METHODS
|
||||||
@@ -98,9 +99,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: XSD.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: XSD.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,17 +1,73 @@
|
|||||||
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;
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
# TODO: convert to Class::Std::Fast based class - hash based classes suck.
|
||||||
|
|
||||||
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, $args) = @_;
|
my ($class, $arg_ref) = @_;
|
||||||
my $self = {};
|
my $self = {
|
||||||
|
data => undef,
|
||||||
|
};
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
|
$self->set_user_agent($arg_ref->{ user_agent })
|
||||||
|
if $arg_ref->{ user_agent };
|
||||||
|
$self->{ parsed } = $arg_ref->{ parsed } if $arg_ref->{ parsed };
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub clone {
|
||||||
|
my $self = shift;
|
||||||
|
my $class = ref $self;
|
||||||
|
my $clone = $class->new($self);
|
||||||
|
return $clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 set_parsed {
|
||||||
|
my ($self, $uri) = @_;
|
||||||
|
$self->{ parsed }->{ $uri } = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub is_parsed {
|
||||||
|
my ($self, $uri) = @_;
|
||||||
|
return exists $self->{ parsed }->{ $uri };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_uri {
|
||||||
|
my $self = shift;
|
||||||
|
my $uri = shift;
|
||||||
|
|
||||||
|
if ($self->is_parsed($uri)){
|
||||||
|
warn "$uri already imported; ignoring it.\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$self->set_parsed($uri);
|
||||||
|
|
||||||
|
$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] );
|
||||||
@@ -42,3 +98,37 @@ sub get_data {
|
|||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SOAP::WSDL::Expat::Base - Base class for XML::Parser::Expat based XML parsers
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Base class for XML::Parser::Expat based XML parsers. All XML::SAX::Expat based
|
||||||
|
parsers in SOAP::WSDL inherit from this class.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Replace the whitespace by @ for E-Mail Address.
|
||||||
|
|
||||||
|
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||||
|
|
||||||
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
|
Copyright 2004-2007 Martin Kutter.
|
||||||
|
|
||||||
|
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||||
|
the same terms as perl itself
|
||||||
|
|
||||||
|
=head1 Repository information
|
||||||
|
|
||||||
|
$Id: $
|
||||||
|
|
||||||
|
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
||||||
|
$LastChangedRevision: 218 $
|
||||||
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use base qw(SOAP::WSDL::Expat::Base);
|
use base qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
sub _initialize {
|
sub _initialize {
|
||||||
my ($self, $parser) = @_;
|
my ($self, $parser) = @_;
|
||||||
@@ -21,7 +21,7 @@ sub _initialize {
|
|||||||
my ($_element, $_method,
|
my ($_element, $_method,
|
||||||
$_class, $_parser, %_attrs) = ();
|
$_class, $_parser, %_attrs) = ();
|
||||||
|
|
||||||
no strict qw(refs);
|
# no strict qw(refs);
|
||||||
$parser->setHandlers(
|
$parser->setHandlers(
|
||||||
Start => sub {
|
Start => sub {
|
||||||
push @$list, $current;
|
push @$list, $current;
|
||||||
@@ -113,13 +113,16 @@ Replace the whitespace by @ for E-Mail Address.
|
|||||||
|
|
||||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||||
|
|
||||||
=head1 COPYING
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
This module may be used under the same terms as perl itself.
|
Copyright 2004-2007 Martin Kutter.
|
||||||
|
|
||||||
|
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||||
|
the same terms as perl itself
|
||||||
|
|
||||||
=head1 Repository information
|
=head1 Repository information
|
||||||
|
|
||||||
$ID: $
|
$Id: $
|
||||||
|
|
||||||
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
||||||
$LastChangedRevision: 218 $
|
$LastChangedRevision: 218 $
|
||||||
|
|||||||
@@ -2,10 +2,19 @@
|
|||||||
package SOAP::WSDL::Expat::MessageParser;
|
package SOAP::WSDL::Expat::MessageParser;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use Carp qw(croak confess);
|
||||||
|
|
||||||
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||||
|
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||||
|
|
||||||
use base qw(SOAP::WSDL::Expat::Base);
|
use base qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
require Class::Std::Fast;
|
||||||
|
my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF();
|
||||||
|
|
||||||
|
my %LOADED_OF = ();
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, $args) = @_;
|
my ($class, $args) = @_;
|
||||||
@@ -13,16 +22,45 @@ sub new {
|
|||||||
class_resolver => $args->{ class_resolver },
|
class_resolver => $args->{ class_resolver },
|
||||||
strict => exists $args->{ strict } ? $args->{ strict } : 1,
|
strict => exists $args->{ strict } ? $args->{ strict } : 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
|
# could be written as && - but Devel::Cover doesn't like that
|
||||||
|
if ($args->{ class_resolver }) {
|
||||||
|
$self->load_classes()
|
||||||
|
if ! exists $LOADED_OF{ $self->{ class_resolver } };
|
||||||
|
}
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub class_resolver {
|
sub class_resolver {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
$self->{ class_resolver } = shift if @_;
|
if (@_) {
|
||||||
|
$self->{ class_resolver } = shift;
|
||||||
|
$self->load_classes()
|
||||||
|
if ! exists $LOADED_OF{ $self->{ class_resolver } };
|
||||||
|
}
|
||||||
return $self->{ class_resolver };
|
return $self->{ class_resolver };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub load_classes {
|
||||||
|
my $self = shift;
|
||||||
|
|
||||||
|
for (values %{ $self->{ class_resolver }->get_typemap }) {
|
||||||
|
no strict qw(refs);
|
||||||
|
my $class = $_;
|
||||||
|
|
||||||
|
# a bad test - do you know a better one?
|
||||||
|
next if $class eq '__SKIP__';
|
||||||
|
next if defined *{ "$class\::" }; # check if namespace exists
|
||||||
|
|
||||||
|
$class =~s{ :: }{/}xmsg;
|
||||||
|
$class .= '.pm';
|
||||||
|
require $class;
|
||||||
|
}
|
||||||
|
$LOADED_OF{ $self->{ class_resolver } } = 1;
|
||||||
|
}
|
||||||
|
|
||||||
sub _initialize {
|
sub _initialize {
|
||||||
my ($self, $parser) = @_;
|
my ($self, $parser) = @_;
|
||||||
$self->{ parser } = $parser;
|
$self->{ parser } = $parser;
|
||||||
@@ -31,13 +69,15 @@ sub _initialize {
|
|||||||
delete $self->{ header };
|
delete $self->{ header };
|
||||||
|
|
||||||
my $characters;
|
my $characters;
|
||||||
#my @characters_from = ();
|
|
||||||
|
# Note: $current MUST be undef - it is used as sentinel
|
||||||
|
# on the object stack via if (! defined $list->[-1])
|
||||||
|
# DON'T set it to anything else !
|
||||||
my $current = undef;
|
my $current = undef;
|
||||||
my $list = []; # node list
|
my $list = []; # node list (object stack)
|
||||||
|
|
||||||
my $path = []; # current path
|
my $path = []; # current path
|
||||||
my $skip = 0; # skip elements
|
my $skip = 0; # skip elements
|
||||||
my $current_part = q{}; # are we in header or body ?
|
|
||||||
|
|
||||||
my $depth = 0;
|
my $depth = 0;
|
||||||
|
|
||||||
my %content_check = $self->{strict}
|
my %content_check = $self->{strict}
|
||||||
@@ -65,30 +105,34 @@ sub _initialize {
|
|||||||
)
|
)
|
||||||
: ();
|
: ();
|
||||||
|
|
||||||
|
# use "globals" for speed
|
||||||
|
my ($_prefix, $_method,
|
||||||
|
$_class, $_leaf) = ();
|
||||||
|
|
||||||
my $char_handler = sub {
|
my $char_handler = sub {
|
||||||
# push @characters_from, $_[1] if $_[1] =~m{ [^s] }xms;
|
return if (!$_leaf); # we only want characters in leaf nodes
|
||||||
$characters .= $_[1] if $_[1] =~m{ [^\s] }xms;
|
|
||||||
|
$characters .= $_[1];
|
||||||
|
# if $_[1] =~m{ [^\s] }xms;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
# use "globals" for speed
|
|
||||||
my ($_prefix, $_method,
|
|
||||||
$_class) = ();
|
|
||||||
|
|
||||||
no strict qw(refs);
|
no strict qw(refs);
|
||||||
$parser->setHandlers(
|
$parser->setHandlers(
|
||||||
Start => sub {
|
Start => sub {
|
||||||
# my ($parser, $element, %_attrs) = @_;
|
# my ($parser, $element, %attrs) = @_;
|
||||||
# $depth = $parser->depth();
|
|
||||||
|
$_leaf = 1; # believe we're a leaf node until we see an end
|
||||||
|
|
||||||
# call methods without using their parameter stack
|
# call methods without using their parameter stack
|
||||||
# That's slightly faster than $content_check{ $depth }->()
|
# That's slightly faster than $content_check{ $depth }->()
|
||||||
# and we don't have to pass $_[1] to the method.
|
# and we don't have to pass $_[1] to the method.
|
||||||
# Yup, that's dirty.
|
# Yup, that's dirty.
|
||||||
return &{$content_check{ $depth }} if exists $content_check{ $depth };
|
return &{$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
|
||||||
@@ -102,31 +146,53 @@ sub _initialize {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
push @$list, $current; # step down in tree (remember current)
|
# step down in tree (remember current)
|
||||||
|
#
|
||||||
|
# on the first object (after skipping Envelope/Body), $current
|
||||||
|
# is undef.
|
||||||
|
# We put it on the stack, anyway, and use it as sentinel when
|
||||||
|
# going through the closing tags in the End handler
|
||||||
|
#
|
||||||
|
push @$list, $current;
|
||||||
|
|
||||||
$characters = q(); # empty characters
|
# cleanup. Mainly here to help profilers find the real hot spots
|
||||||
|
undef $current;
|
||||||
|
|
||||||
# Check whether we have a builtin - we implement them as classes
|
# cleanup
|
||||||
# We could replace this with UNIVERSAL->isa() - but it's slow...
|
$characters = q{};
|
||||||
# match is a bit faster if the string does not match, but WAY slower
|
|
||||||
# if $class matches. We hope to match often...
|
# Create and set new objects using Class::Std::Fast's object cache
|
||||||
if (index $_class, 'SOAP::WSDL::XSD::Typelib::Builtin', 0 < 0) {
|
# if possible, or blessing directly into the class in question
|
||||||
# check wheter there is a non-empty ARRAY reference for $_class::ISA
|
# (circumventing constructor) here.
|
||||||
# or a "new" method
|
# That's dirty, but fast.
|
||||||
# If not, require it - all classes required here MUST
|
#
|
||||||
# define new()
|
# TODO: check whether this is faster under all perls - there's
|
||||||
# This is not exactly the same as $class->can('new'), but it's way faster
|
# strange benchmark results...
|
||||||
defined *{ "$_class\::new" }{ CODE }
|
#
|
||||||
or scalar @{ *{ "$_class\::ISA" }{ ARRAY } }
|
# The alternative would read:
|
||||||
or eval "require $_class" ## no critic qw(ProhibitStringyEval)
|
# $current = $_class->new({ @_[2..$#_] });
|
||||||
or die $@;
|
#
|
||||||
|
$current = pop @{ $OBJECT_CACHE_REF->{ $_class } };
|
||||||
|
if (not defined $current) {
|
||||||
|
my $o = Class::Std::Fast::ID();
|
||||||
|
$current = bless \$o, $_class;
|
||||||
}
|
}
|
||||||
|
|
||||||
$current = $_class->new({ @_[2..$#_] }); # set new current object
|
# set attributes if there are any
|
||||||
|
ATTR: {
|
||||||
# remember top level element
|
if (@_ > 2) {
|
||||||
exists $self->{ data }
|
# die Data::Dumper::Dumper(@_[2..$#_]);
|
||||||
or ($self->{ data } = $current);
|
my %attr = @_[2..$#_];
|
||||||
|
if (my $nil = delete $attr{nil}) {
|
||||||
|
# TODO: check namespace
|
||||||
|
if ($nil && $nil ne 'false') {
|
||||||
|
undef $characters;
|
||||||
|
last ATTR if not (%attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$current->attr(\%attr);
|
||||||
|
}
|
||||||
|
}
|
||||||
$depth++;
|
$depth++;
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
@@ -134,8 +200,10 @@ sub _initialize {
|
|||||||
Char => $char_handler,
|
Char => $char_handler,
|
||||||
|
|
||||||
End => sub {
|
End => sub {
|
||||||
|
|
||||||
pop @{ $path }; # step up in path
|
pop @{ $path }; # step up in path
|
||||||
|
|
||||||
|
# check __SKIP__
|
||||||
if ($skip) {
|
if ($skip) {
|
||||||
return if $skip ne join '/', @{ $path }, $_[1];
|
return if $skip ne join '/', @{ $path }, $_[1];
|
||||||
$skip = 0;
|
$skip = 0;
|
||||||
@@ -145,30 +213,45 @@ sub _initialize {
|
|||||||
|
|
||||||
$depth--;
|
$depth--;
|
||||||
|
|
||||||
# This one easily handles ignores for us, too...
|
# we only set character values in leaf nodes
|
||||||
return if not ref $list->[-1];
|
if ($_leaf) {
|
||||||
|
# Use dirty but fast access via global variables.
|
||||||
|
#
|
||||||
|
# The normal way (via method) would be this:
|
||||||
|
#
|
||||||
|
# $current->set_value( $characters ) if (length($characters));
|
||||||
|
#
|
||||||
|
$SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType::___value
|
||||||
|
->{ $$current } = $characters
|
||||||
|
if defined $characters && defined $current; # =~m{ [^\s] }xms;
|
||||||
|
}
|
||||||
|
|
||||||
# set characters in current if we are a simple type
|
# empty characters
|
||||||
# we may have characters in complexTypes with simpleContent,
|
|
||||||
# too - maybe we should rely on the presence of characters ?
|
|
||||||
# may get a speedup by defining a ident method in anySimpleType
|
|
||||||
# and looking it up via exists &$class::ident;
|
|
||||||
# if ( $current->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType') ) {
|
|
||||||
# $current->set_value( $characters );
|
|
||||||
# }
|
|
||||||
# currently doesn't work, as anyType does not implement value -
|
|
||||||
# maybe change ?
|
|
||||||
$current->set_value( $characters ) if (length $characters);
|
|
||||||
#$current->set_value( join @characters_from ) if (@characters_from);
|
|
||||||
$characters = q{};
|
$characters = q{};
|
||||||
# undef @characters_from;
|
|
||||||
|
# return if there's only one elment - can't set it in parent ;-)
|
||||||
|
# but set as root element if we don't have one already.
|
||||||
|
if (not defined $list->[-1]) {
|
||||||
|
$self->{ data } = $current if (not exists $self->{ data });
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
# set appropriate attribute in last element
|
# set appropriate attribute in last element
|
||||||
# multiple values must be implemented in base class
|
# multiple values must be implemented in base class
|
||||||
#$_method = "add_$_localname";
|
# TODO check if hash access is faster
|
||||||
|
# $_method = "add_$_localname";
|
||||||
$_method = "add_$_[1]";
|
$_method = "add_$_[1]";
|
||||||
|
#
|
||||||
|
# fixup XML names for perl names
|
||||||
|
#
|
||||||
|
$_method =~s{\.}{__}xg;
|
||||||
|
$_method =~s{\-}{_}xg;
|
||||||
$list->[-1]->$_method( $current );
|
$list->[-1]->$_method( $current );
|
||||||
|
|
||||||
$current = pop @$list; # step up in object hierarchy...
|
$current = pop @$list; # step up in object hierarchy
|
||||||
|
|
||||||
|
$_leaf = 0; # stop believing we're a leaf node
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -206,7 +289,8 @@ See L<SOAP::WSDL::Manual::Parser> for details.
|
|||||||
Sometimes there's unneccessary information transported in SOAP messages.
|
Sometimes there's unneccessary information transported in SOAP messages.
|
||||||
|
|
||||||
To skip XML nodes (including all child nodes), just edit the type map for
|
To skip XML nodes (including all child nodes), just edit the type map for
|
||||||
the message and set the type map entry to '__SKIP__'.
|
the message, set the type map entry to '__SKIP__', and comment out all
|
||||||
|
child elements you want to skip.
|
||||||
|
|
||||||
=head1 Bugs and Limitations
|
=head1 Bugs and Limitations
|
||||||
|
|
||||||
@@ -220,22 +304,26 @@ the message and set the type map entry to '__SKIP__'.
|
|||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Replace the whitespace by @ for E-Mail Address.
|
||||||
|
|
||||||
|
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||||
|
|
||||||
=head1 LICENSE AND COPYRIGHT
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
Copyright 2004-2007 Martin Kutter.
|
Copyright 2004-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 Repository information
|
||||||
|
|
||||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
$Id: MessageParser.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
$LastChangedDate: 2008-05-16 11:37:59 +0200 (Fr, 16 Mai 2008) $
|
||||||
|
$LastChangedRevision: 672 $
|
||||||
$Rev: 391 $
|
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: MessageParser.pm 391 2007-11-17 21:56:13Z kutterma $
|
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
|
||||||
|
|
||||||
=cut
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ use XML::Parser::Expat;
|
|||||||
use SOAP::WSDL::Expat::MessageParser;
|
use SOAP::WSDL::Expat::MessageParser;
|
||||||
use base qw(SOAP::WSDL::Expat::MessageParser);
|
use base qw(SOAP::WSDL::Expat::MessageParser);
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
sub parse_start {
|
sub parse_start {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@@ -56,22 +56,22 @@ See L<SOAP::WSDL::Manual::Parser> for details.
|
|||||||
|
|
||||||
See SOAP::WSDL::Expat::MessageParser
|
See SOAP::WSDL::Expat::MessageParser
|
||||||
|
|
||||||
=head1 LICENSE AND COPYRIGHT
|
|
||||||
|
|
||||||
Copyright 2007 Martin Kutter. All rights reserved.
|
|
||||||
|
|
||||||
This file is part of SOAP-WSDL. You may distribte/modify it under
|
|
||||||
the same terms as perl itself
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||||
|
|
||||||
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
|
Copyright 2007 Martin Kutter.
|
||||||
|
|
||||||
|
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||||
|
the same terms as perl itself
|
||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: MessageStreamParser.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: MessageStreamParser.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,10 +1,130 @@
|
|||||||
package SOAP::WSDL::Expat::WSDLParser;
|
package SOAP::WSDL::Expat::WSDLParser;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Carp;
|
use Carp;
|
||||||
use SOAP::WSDL::TypeLookup;
|
use SOAP::WSDL::TypeLookup;
|
||||||
use base qw(SOAP::WSDL::Expat::Base);
|
use base qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
|
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";
|
||||||
|
my $default_namespace = $imported->get_xmlns()->{ '#default' };
|
||||||
|
|
||||||
|
no strict qw(refs);
|
||||||
|
my $value_ref = $imported->$get_method();
|
||||||
|
if ($value_ref) {
|
||||||
|
|
||||||
|
$value_ref = [ $value_ref ] if (not ref $value_ref eq 'ARRAY');
|
||||||
|
|
||||||
|
for (@{ $value_ref }) {
|
||||||
|
# fixup namespace - new parent may be from different namespace
|
||||||
|
if (defined ($default_namespace)) {
|
||||||
|
my $xmlns = $_->get_xmlns();
|
||||||
|
# it's a hash ref, so we can just update values
|
||||||
|
if (! defined $xmlns->{ '#default'}) {
|
||||||
|
$xmlns->{ '#default' } = $default_namespace;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# 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($_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _import_namespace_definitions {
|
||||||
|
my $self = shift;
|
||||||
|
my $arg_ref = shift;
|
||||||
|
my $importer = $arg_ref->{ importer };
|
||||||
|
my $imported = $arg_ref->{ imported };
|
||||||
|
|
||||||
|
# import namespace definitions, too
|
||||||
|
my $importer_ns_of = $importer->get_xmlns();
|
||||||
|
my %xmlns_of = %{ $imported->get_xmlns() };
|
||||||
|
|
||||||
|
# it's a hash ref, we can just add to.
|
||||||
|
# TODO: check whether prefix is already taken.
|
||||||
|
# TODO: check wheter URI is the better key.
|
||||||
|
while (my ($prefix, $url) = each %xmlns_of) {
|
||||||
|
$importer_ns_of->{ $prefix } = $url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub xml_schema_import {
|
||||||
|
my $self = shift;
|
||||||
|
my $schema = shift;
|
||||||
|
my $parser = $self->clone();
|
||||||
|
my %attr_of = @_;
|
||||||
|
my $import_namespace = $attr_of{ namespace };
|
||||||
|
|
||||||
|
if (not $attr_of{schemaLocation}) {
|
||||||
|
warn "cannot import document for namespace >$import_namespace< without location";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not $self->get_uri) {
|
||||||
|
die "cannot import document from namespace >$import_namespace< without base uri. Use >parse_uri< or >set_uri< to set one."
|
||||||
|
}
|
||||||
|
|
||||||
|
my $uri = URI->new_abs($attr_of{schemaLocation}, $self->get_uri() );
|
||||||
|
my $imported = $parser->parse_uri($uri);
|
||||||
|
|
||||||
|
# might already be imported - parse_uri just returns in this case
|
||||||
|
return if not defined $imported;
|
||||||
|
|
||||||
|
$self->_import_namespace_definitions({
|
||||||
|
importer => $schema,
|
||||||
|
imported => $imported,
|
||||||
|
});
|
||||||
|
|
||||||
|
for my $name ( qw(type element group attribute attributeGroup) ) {
|
||||||
|
$self->_import_children( $name, $imported, $schema, $import_namespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub wsdl_import {
|
||||||
|
my $self = shift;
|
||||||
|
my $definitions = shift;
|
||||||
|
my $parser = $self->clone();
|
||||||
|
my %attr_of = @_;
|
||||||
|
my $import_namespace = $attr_of{ namespace };
|
||||||
|
|
||||||
|
if (not $attr_of{location}) {
|
||||||
|
warn "cannot import document for namespace >$import_namespace< without location";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (not $self->get_uri) {
|
||||||
|
die "cannot import document from namespace >$import_namespace< without base uri. Use >parse_uri< or >set_uri< to set one."
|
||||||
|
}
|
||||||
|
|
||||||
|
my $uri = URI->new_abs($attr_of{location}, $self->get_uri() );
|
||||||
|
|
||||||
|
my $imported = $parser->parse_uri($uri);
|
||||||
|
|
||||||
|
# might already be imported - parse_uri just returns in this case
|
||||||
|
return if not defined $imported;
|
||||||
|
|
||||||
|
$self->_import_namespace_definitions({
|
||||||
|
importer => $definitions,
|
||||||
|
imported => $imported,
|
||||||
|
});
|
||||||
|
|
||||||
|
for my $name ( qw(types message binding portType service) ) {
|
||||||
|
$self->_import_children( $name, $imported, $definitions, $import_namespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub _initialize {
|
sub _initialize {
|
||||||
my ($self, $parser) = @_;
|
my ($self, $parser) = @_;
|
||||||
|
|
||||||
@@ -34,7 +154,9 @@ sub _initialize {
|
|||||||
eval "require $action->{ class }";
|
eval "require $action->{ class }";
|
||||||
croak $@ if ($@);
|
croak $@ if ($@);
|
||||||
|
|
||||||
my $obj = $action->{ class }->new({ parent => $current })
|
my $obj = $action->{ class }->new({ parent => $current,
|
||||||
|
# xmlns => { '#default' => $parser->namespace($localname) }
|
||||||
|
})
|
||||||
->init( _fixup_attrs( $parser, %attrs ) );
|
->init( _fixup_attrs( $parser, %attrs ) );
|
||||||
|
|
||||||
if ($current) {
|
if ($current) {
|
||||||
@@ -61,7 +183,7 @@ sub _initialize {
|
|||||||
$current->init( _fixup_attrs($parser, %attrs) );
|
$current->init( _fixup_attrs($parser, %attrs) );
|
||||||
}
|
}
|
||||||
elsif ($action->{ type } eq 'METHOD') {
|
elsif ($action->{ type } eq 'METHOD') {
|
||||||
my $method = $action->{ method } || $localname;
|
my $method = $action->{ method };
|
||||||
|
|
||||||
no strict qw(refs);
|
no strict qw(refs);
|
||||||
# call method with
|
# call method with
|
||||||
@@ -77,6 +199,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;
|
||||||
},
|
},
|
||||||
@@ -115,7 +251,8 @@ sub _initialize {
|
|||||||
sub _fixup_attrs {
|
sub _fixup_attrs {
|
||||||
my ($parser, %attrs_of) = @_;
|
my ($parser, %attrs_of) = @_;
|
||||||
|
|
||||||
my @attrs_from = map { $_ =
|
my @attrs_from = map {
|
||||||
|
$_ =
|
||||||
{
|
{
|
||||||
Name => $_,
|
Name => $_,
|
||||||
Value => $attrs_of{ $_ },
|
Value => $attrs_of{ $_ },
|
||||||
@@ -126,10 +263,10 @@ sub _fixup_attrs {
|
|||||||
# add xmlns: attrs. expat eats them.
|
# add xmlns: attrs. expat eats them.
|
||||||
push @attrs_from, map {
|
push @attrs_from, map {
|
||||||
# ignore xmlns=FOO namespaces - must be XML schema
|
# ignore xmlns=FOO namespaces - must be XML schema
|
||||||
# Other nodes should be ignored somewhere else
|
# # Other nodes should be ignored somewhere else
|
||||||
($_ eq '#default')
|
# ($_ eq '#default')
|
||||||
? ()
|
# ? ()
|
||||||
:
|
# :
|
||||||
{
|
{
|
||||||
Name => "xmlns:$_",
|
Name => "xmlns:$_",
|
||||||
Value => $parser->expand_ns_prefix( $_ ),
|
Value => $parser->expand_ns_prefix( $_ ),
|
||||||
@@ -141,3 +278,43 @@ sub _fixup_attrs {
|
|||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SOAP::WSDL::Expat::WSDLParser - Parse WSDL files into object trees
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
||||||
|
$parser->parse( $xml );
|
||||||
|
my $obj = $parser->get_data();
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
WSDL parser used by SOAP::WSDL.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Replace the whitespace by @ for E-Mail Address.
|
||||||
|
|
||||||
|
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||||
|
|
||||||
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
|
Copyright 2004-2007 Martin Kutter.
|
||||||
|
|
||||||
|
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||||
|
the same terms as perl itself
|
||||||
|
|
||||||
|
=head1 Repository information
|
||||||
|
|
||||||
|
$Id: WSDLParser.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
|
|
||||||
|
$LastChangedDate: 2008-05-16 11:37:59 +0200 (Fr, 16 Mai 2008) $
|
||||||
|
$LastChangedRevision: 672 $
|
||||||
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Deserializer;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %DESERIALIZER = (
|
my %DESERIALIZER = (
|
||||||
'1.1' => 'SOAP::WSDL::Deserializer::XSD',
|
'1.1' => 'SOAP::WSDL::Deserializer::XSD',
|
||||||
@@ -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 } });
|
||||||
@@ -137,7 +137,7 @@ passed as a single hash ref:
|
|||||||
|
|
||||||
Copyright 2007 Martin Kutter. All rights reserved.
|
Copyright 2007 Martin Kutter. All rights reserved.
|
||||||
|
|
||||||
This file is part of SOAP-WSDL. You may distribte/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
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Generator;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION='2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %GENERATOR = (
|
my %GENERATOR = (
|
||||||
'XSD' => 'SOAP::WSDL::Generator::Template::XSD',
|
'XSD' => 'SOAP::WSDL::Generator::Template::XSD',
|
||||||
@@ -155,7 +155,7 @@ Set user-defined typemap snippet
|
|||||||
|
|
||||||
Copyright 2007 Martin Kutter. All rights reserved.
|
Copyright 2007 Martin Kutter. All rights reserved.
|
||||||
|
|
||||||
This file is part of SOAP-WSDL. You may distribte/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
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Serializer;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION='2.00_24';
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
my %SERIALIZER = (
|
my %SERIALIZER = (
|
||||||
'1.1' => 'SOAP::WSDL::Serializer::XSD',
|
'1.1' => 'SOAP::WSDL::Serializer::XSD',
|
||||||
@@ -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: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Serializer.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Serializer.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package SOAP::WSDL::Factory::Transport;
|
package SOAP::WSDL::Factory::Transport;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use version; our $VERSION = qv('2.00.02');
|
||||||
|
|
||||||
our $VERSION='2.00_17';
|
|
||||||
|
|
||||||
# class data
|
|
||||||
my %registered_transport_of = ();
|
my %registered_transport_of = ();
|
||||||
|
|
||||||
# Local constants
|
# Local constants
|
||||||
@@ -12,7 +10,7 @@ my %registered_transport_of = ();
|
|||||||
my %SOAP_LITE_TRANSPORT_OF = (
|
my %SOAP_LITE_TRANSPORT_OF = (
|
||||||
ftp => 'SOAP::Transport::FTP',
|
ftp => 'SOAP::Transport::FTP',
|
||||||
http => 'SOAP::Transport::HTTP',
|
http => 'SOAP::Transport::HTTP',
|
||||||
https => 'SOAP::Transport::HTTPS',
|
https => 'SOAP::Transport::HTTP',
|
||||||
mailto => 'SOAP::Transport::MAILTO',
|
mailto => 'SOAP::Transport::MAILTO',
|
||||||
'local' => 'SOAP::Transport::LOCAL',
|
'local' => 'SOAP::Transport::LOCAL',
|
||||||
jabber => 'SOAP::Transport::JABBER',
|
jabber => 'SOAP::Transport::JABBER',
|
||||||
@@ -27,18 +25,23 @@ my %SOAP_WSDL_TRANSPORT_OF = (
|
|||||||
# class methods only
|
# class methods only
|
||||||
sub register {
|
sub register {
|
||||||
my ($class, $scheme, $package) = @_;
|
my ($class, $scheme, $package) = @_;
|
||||||
die "cannot use reference as scheme" if ref $scheme;
|
die "Cannot use reference as scheme" if ref $scheme;
|
||||||
$registered_transport_of{ $scheme } = $package;
|
$registered_transport_of{ $scheme } = $package;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub get_transport {
|
sub get_transport {
|
||||||
my ($class, $scheme, %attrs) = @_;
|
my ($class, $url, %attrs) = @_;
|
||||||
|
|
||||||
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}smx;
|
|
||||||
|
|
||||||
if ($registered_transport_of{ $scheme }) {
|
my $scheme = $url;
|
||||||
eval "require $registered_transport_of{ $scheme }"
|
$scheme =~s{ \:.+$ }{}xm;
|
||||||
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
|
|
||||||
|
|
||||||
|
if (defined $registered_transport_of{ $scheme }) {
|
||||||
|
no strict qw(refs);
|
||||||
|
defined %{ "$registered_transport_of{ $scheme }::" } or
|
||||||
|
eval "require $registered_transport_of{ $scheme }"
|
||||||
|
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
|
||||||
|
|
||||||
# try "foo::Client" class first - SOAP::Tranport always requires
|
# try "foo::Client" class first - SOAP::Tranport always requires
|
||||||
# a package withoug the ::Client appended, and then
|
# a package withoug the ::Client appended, and then
|
||||||
@@ -48,28 +51,32 @@ sub get_transport {
|
|||||||
# sparse resource ...
|
# sparse resource ...
|
||||||
# ... but we've decided to mimic SOAP::Lite...
|
# ... but we've decided to mimic SOAP::Lite...
|
||||||
|
|
||||||
# my $protocol_class = $SOAP_LITE_TRANSPORT_OF{ $scheme } . '::Client';
|
|
||||||
# my $transport;
|
|
||||||
# eval {
|
|
||||||
# $transport = $protocol_class->new( %attrs );
|
|
||||||
# };
|
|
||||||
# return $transport if not $@;
|
|
||||||
return $registered_transport_of{ $scheme }->new( %attrs );
|
return $registered_transport_of{ $scheme }->new( %attrs );
|
||||||
}
|
}
|
||||||
|
|
||||||
# try SOAP::Lite's Transport module - just skip if not require'able
|
# try SOAP::Lite's Transport module - just skip if not require'able
|
||||||
SOAP_Lite: {
|
SOAP_Lite: {
|
||||||
if (exists $SOAP_LITE_TRANSPORT_OF{ $scheme }) {
|
if (exists $SOAP_LITE_TRANSPORT_OF{ $scheme }) {
|
||||||
eval "require $SOAP_LITE_TRANSPORT_OF{ $scheme }"
|
no strict qw(refs);
|
||||||
or last SOAP_Lite;
|
# behaves interestingly different under different versions of perl
|
||||||
my $protocol_class = $SOAP_LITE_TRANSPORT_OF{ $scheme } . '::Client';
|
# maybe true even if it's not available
|
||||||
return $protocol_class->new( %attrs );
|
defined %{ "$SOAP_LITE_TRANSPORT_OF{ $scheme }::" }
|
||||||
}
|
or eval "require $SOAP_LITE_TRANSPORT_OF{ $scheme }"
|
||||||
|
or last SOAP_Lite;
|
||||||
|
|
||||||
|
my $protocol_class = $SOAP_LITE_TRANSPORT_OF{ $scheme } . '::Client';
|
||||||
|
# may fail if it's not available
|
||||||
|
my $transport = eval { $protocol_class->new( %attrs ) }
|
||||||
|
or last SOAP_Lite;
|
||||||
|
return $transport;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
||||||
eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
|
no strict qw(refs);
|
||||||
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
|
defined %{ "$SOAP_WSDL_TRANSPORT_OF{ $scheme }::"}
|
||||||
|
or eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
|
||||||
|
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
|
||||||
return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs );
|
return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,7 +162,7 @@ the class should be used for, and $module is the class' module name.
|
|||||||
To auto-register your transport class on loading, execute register() in your
|
To auto-register your transport class on loading, execute register() in your
|
||||||
tranport class (see L<SYNOPSIS|SYNOPSIS> above).
|
tranport class (see L<SYNOPSIS|SYNOPSIS> above).
|
||||||
|
|
||||||
Multiple protocols ore multiple classes are registered by multiple calls to
|
Multiple protocols or multiple classes are registered by multiple calls to
|
||||||
register().
|
register().
|
||||||
|
|
||||||
=head2 Transport plugin package layout
|
=head2 Transport plugin package layout
|
||||||
@@ -236,9 +243,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 672 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Transport.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Transport.pm 672 2008-05-16 09:37:59Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user