Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3de318be40 | ||
|
|
c2ac24dd0f | ||
|
|
c3e3d1908e | ||
|
|
e58a27e2ad | ||
|
|
915ee03cbe | ||
|
|
745ce925c1 | ||
|
|
0cbf981665 | ||
|
|
51db446428 | ||
|
|
f0b3bdc201 | ||
|
|
874251225f | ||
|
|
2bad767211 | ||
|
|
7ca2154ad6 | ||
|
|
eb096ad88e | ||
|
|
3cfeebae54 | ||
|
|
a9033164e6 | ||
|
|
84b53d9261 | ||
|
|
b955c5ad79 | ||
|
|
080b211e4e | ||
|
|
fa4d5dd884 | ||
|
|
3d11524449 | ||
|
|
21efa286af | ||
|
|
008d06b72a |
78
Build.PL
78
Build.PL
@@ -1,25 +1,55 @@
|
||||
#!/usr/bin/perl -w
|
||||
use Module::Build;
|
||||
|
||||
Module::Build->new(
|
||||
create_makefile_pl => 'passthrough',
|
||||
dist_name => 'SOAP-WSDL',
|
||||
dist_version => '1.26',
|
||||
dist_abstract => 'WSDL support for SOAP::Lite',
|
||||
module_name => 'SOAP::WSDL',
|
||||
license => 'artistic',
|
||||
requires => {
|
||||
'SOAP::Lite' => 0,
|
||||
'XML::XPath' => 0,
|
||||
},
|
||||
buildrequires => {
|
||||
'Test::More' => 0,
|
||||
'SOAP::Lite' => 0,
|
||||
'XML::XPath' => 0,
|
||||
'Time::HiRes' => 0,
|
||||
'File::Spec' => 0,
|
||||
'File::Basename' => 0,
|
||||
'Cwd' => 0,
|
||||
},
|
||||
|
||||
)->create_build_script;
|
||||
use version;
|
||||
$build = Module::Build->new(
|
||||
dist_author => 'Martin Kutter <martin.kutter@fen-net.de>',
|
||||
create_makefile_pl => 'small',
|
||||
dist_abstract => 'SOAP with WSDL support',
|
||||
dist_name => 'SOAP-WSDL',
|
||||
dist_version => '2.00.06',
|
||||
module_name => 'SOAP::WSDL',
|
||||
license => 'artistic',
|
||||
requires => {
|
||||
# 5.6.x is way too buggy and has no unicode support
|
||||
# for us. SOAP-WSDL relies on unicode (WS-I demands it)
|
||||
# and triggers several 5.6 bugs...
|
||||
'perl' => q(5.8.0),
|
||||
'Class::Std::Fast' => q(0.0.5),
|
||||
'Data::Dumper' => 0,
|
||||
'Date::Parse' => 0,
|
||||
'Date::Format' => 0,
|
||||
'File::Basename' => 0,
|
||||
'File::Path' => 0,
|
||||
'Getopt::Long' => 0,
|
||||
'List::Util' => 0,
|
||||
'LWP::UserAgent' => 0,
|
||||
'Template' => q(2.18),
|
||||
'Term::ReadKey' => 0,
|
||||
'URI' => 0,
|
||||
'XML::Parser::Expat' => 0,
|
||||
},
|
||||
build_requires => {
|
||||
'Class::Std::Fast' => q(0.0.5),
|
||||
'Cwd' => 0,
|
||||
'Date::Parse' => 0,
|
||||
'Date::Format' => 0,
|
||||
'Getopt::Long' => 0,
|
||||
'List::Util' => 0,
|
||||
'LWP::UserAgent' => 0,
|
||||
'Module::Build' => 0,
|
||||
'File::Basename' => 0,
|
||||
'File::Path' => 0,
|
||||
'File::Spec' => 0,
|
||||
'Storable' => 0,
|
||||
'Test::More' => 0,
|
||||
'Template' => q(2.18),
|
||||
'XML::Parser::Expat' => 0,
|
||||
},
|
||||
recursive_test_files => 1,
|
||||
meta_add => {
|
||||
no_index => {
|
||||
directory => 'lib/SOAP/WSDL/Generator/Template/XSD/',
|
||||
},
|
||||
}
|
||||
);
|
||||
$build->add_build_element('tt');
|
||||
$build->create_build_script;
|
||||
|
||||
167
CHANGES
167
CHANGES
@@ -1,167 +0,0 @@
|
||||
* v1.26 2007/10/05 - bugfix
|
||||
- fixed issue reported by T Alex Beamish: tests fail when unwrapped into /tmp
|
||||
* v1.25 2007/09/24 - maintenance
|
||||
- added Makefile.PL to ease installation
|
||||
|
||||
* v1.24 2007/09/22 - bugfix
|
||||
- fixes issue reported by David Bussenschutt: wsdlinit always uses new SOAP::Schema instance.
|
||||
|
||||
* v1.23 2007/06/05 - bugfixes and optimizations
|
||||
- fixes #27426: missing prereq XML::XPath
|
||||
- fixed build_requires
|
||||
- some doc fixes
|
||||
- now performs some initializations on calling portname()
|
||||
|
||||
* v1.22 2007/05/30 - auto-discover service and port again
|
||||
- re-introduces auto-detecting of servicename and portname
|
||||
- fixes #27325: Test fails with Test::Pod::Coverage v 1.06.
|
||||
- Now build requires Test::More
|
||||
- documentation update
|
||||
- cosmetics
|
||||
|
||||
2007/05/28 private methods made private and pod update
|
||||
- added pod tests
|
||||
- made encodeComplexType and method generators private
|
||||
- updated pod
|
||||
- fixed test scripts to work again from within/without t/
|
||||
- moved development repository to
|
||||
https://svn.sourceforge.net/svnroot/soap-wsdl/ (finally !)
|
||||
|
||||
2007/05/21 updated base version to customized version from Giovanni S Fois
|
||||
- merged in doc changes, so that they don't refer to "customized version"
|
||||
- changed build process to Build.PL
|
||||
- changed repository layout to support new build process
|
||||
|
||||
2006/11/06 only in the customized version
|
||||
Added the support for default values in the wsdl file
|
||||
|
||||
2006/11/04 only in the customized version
|
||||
Changed the calling interface. Now it's driven by the by the service
|
||||
and port names.
|
||||
|
||||
2006/11/03 only in the customized version
|
||||
Corrected the Check for the correct number of elements in complex types
|
||||
|
||||
If a complex type is marked optional in a WSDL file, but sub-parts are marked as
|
||||
required, SOAP::WSDL used to die if the complex type was found in the data.
|
||||
Now, if a complex type has not data associated and is not strictly required, it
|
||||
will not be encoded.
|
||||
|
||||
A quick-and-dirty workaround is to turn off the check with
|
||||
|
||||
$soap->wsdl_checkoccurs(0);
|
||||
|
||||
2006/11/02 only in the customized version
|
||||
- small changes for .Net compatibility when encoding complex types
|
||||
- added some test cases to the test suite try perl t/3_varous.t for more details
|
||||
|
||||
|
||||
2006/10/28 only in the customized version
|
||||
- added a small support for the complexType restrictions of Arrays
|
||||
|
||||
2006/10/02 only in the customized version
|
||||
(Thanks to Dan Horne for having spotted so many bugs in a row)
|
||||
- the xml prefix was used as the default wsdl namespace when looking for the complextype restrictions
|
||||
- the module crashed when the operation had no part declaration
|
||||
- the port name stated in the service definition was used as the portType
|
||||
- the test suited failed when the module was unzipped in a t.* named directory
|
||||
|
||||
|
||||
|
||||
2006/09/15 only in the customized version
|
||||
(Thanks to Terje Kristensen for his support and twisted wsdl files :)
|
||||
- cleaned up the code for readability
|
||||
- cleaned up the code for "use warnings" and "use strict"
|
||||
- added support for wsdl files with multiple schema declarations
|
||||
- added supporto for some restriction on complexTypes
|
||||
|
||||
|
||||
|
||||
|
||||
2006/07/10 only in the customized version
|
||||
- added the support for SOAP::header calls
|
||||
|
||||
2006/06/10 only in the customized version
|
||||
|
||||
- removed the overload based on the type of the call's parameters
|
||||
|
||||
- added an overloading support based on the unique name of the input message of the call. The input message must be provided by the calling script (sorry, the module has no mean to find this).
|
||||
|
||||
- added a light support to the sympletypes.
|
||||
|
||||
- added a light support to the imported namespaces in the types section.
|
||||
|
||||
- added the support for the multiple SOAP bindings. The correct binding must be provided by the calling script (sorry, the module has no mean to find this).
|
||||
|
||||
- the method will use his own soapAction if defined
|
||||
|
||||
- the method will use his own namespace if defined
|
||||
|
||||
- some other code cleaning
|
||||
|
||||
2006/04/23 only in the customized version
|
||||
|
||||
- corrected a bug related to the presence of the same method name on multiple
|
||||
webservices
|
||||
|
||||
- added an overloading support based on the type of the call's parameters
|
||||
|
||||
- multiple extensions support added: a complextype can be an extension of a complextype which is an extension and so on
|
||||
|
||||
|
||||
|
||||
Revision 1.7 2004/07/27 13:00:03 lsc
|
||||
- added missing test file
|
||||
|
||||
Revision 1.18 2004/07/16 07:43:05 lsc
|
||||
fixed test scripts for windows
|
||||
|
||||
Revision 1.17 2004/07/05 08:19:49 lsc
|
||||
- added wsdl_checkoccurs
|
||||
|
||||
Revision 1.16 2004/07/04 09:01:14 lsc
|
||||
- change <definitions> element lookup from find('/definitions') and find('wsdl:definitions') to find('/*[1]') to process arbitrary default (wsdl) namespaces correctly
|
||||
- fixed test output in test 06
|
||||
|
||||
Revision 1.15 2004/07/02 12:28:31 lsc
|
||||
- documentation update
|
||||
- cosmetics
|
||||
|
||||
Revision 1.14 2004/07/02 10:53:36 lsc
|
||||
- API change:
|
||||
- call now behaves (almost) like SOAP::Lite::call
|
||||
- call() takes a list (hash) as second argument
|
||||
- call does no longer support the "dispatch" option
|
||||
- dispatching calls can be suppressed by passing
|
||||
"no_dispatch => 1" to new()
|
||||
- dispatching calls can be suppressed by calling
|
||||
$soap->no_dispatch(1);
|
||||
and re-enabled by calling
|
||||
$soap->no_dispatch(0);
|
||||
- Updated test skripts to reflect API change.
|
||||
|
||||
Revision 1.13 2004/06/30 12:08:40 lsc
|
||||
- added IServiceInstance (ecmed) to acceptance tests
|
||||
- refined documentation
|
||||
|
||||
Revision 1.12 2004/06/26 14:13:29 lsc
|
||||
- refined file caching
|
||||
- added descriptive output to test scripts
|
||||
|
||||
Revision 1.11 2004/06/26 07:55:40 lsc
|
||||
- fixed "freeze" caching bug
|
||||
- improved test scripts to test file system caching (and show the difference)
|
||||
|
||||
Revision 1.10 2004/06/26 06:30:33 lsc
|
||||
- added filesystem caching using Cache::FileCache
|
||||
|
||||
Revision 1.9 2004/06/24 12:27:23 lsc
|
||||
Cleanup
|
||||
|
||||
Revision 1.8 2004/06/11 19:49:15 lsc
|
||||
- moved .t files to more self-describing names
|
||||
- changed WSDL.pm to accept AXIS wsdl files
|
||||
- implemented XPath query result caching on all absolute queries
|
||||
|
||||
Revision 1.7 2004/06/07 13:01:16 lsc
|
||||
added changelog to pod
|
||||
813
Changes
Normal file
813
Changes
Normal file
@@ -0,0 +1,813 @@
|
||||
Release notes for SOAP::WSDL 2.00.06
|
||||
-------
|
||||
|
||||
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.
|
||||
|
||||
Features:
|
||||
|
||||
* WSDL based SOAP client
|
||||
o SOAP1.1 support
|
||||
o Supports document/literal message style/encoding
|
||||
* Code generator for generating WSDL-based interface classes
|
||||
o Generated code includes usage documentation for the web service interface
|
||||
* Easy-to use API
|
||||
o Automatically encodes perl data structures as message data
|
||||
o Automatically sets HTTP headers right
|
||||
o Datatypes provide hints on method names on calls to non-existant
|
||||
methods
|
||||
* Efficient documentation
|
||||
o SOAP::WSDL::Manual guides you at getting your work done, not at
|
||||
the module's internals
|
||||
* Thorough test suite
|
||||
o SOAP::WSDL is heavily regression tested, with a test coverage of
|
||||
over 95% (excluding documentation - you wouldn't want to read
|
||||
through it all).
|
||||
* SOAP::Lite like look and feel
|
||||
o Where possible, SOAP::WSDL mimics SOAP::Lite's API to allow easy migration
|
||||
* XML schema based class library for creating data objects
|
||||
* High-performance SOAP Message parser
|
||||
* Plugin support. SOAP::WSDL can be extended through plugins in various aspects.
|
||||
The following plugins are supported:
|
||||
o Transport plugins via SOAP::WSDL::Factory::Transport
|
||||
o Serializer plugins via SOAP::WSDL::Factory::Serializer
|
||||
o Deserializer plugins via SOAP::WSDL::Factory::Deserializer
|
||||
|
||||
The following changes have been made:
|
||||
|
||||
2.00.06 - Dec 03 2008
|
||||
|
||||
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/).
|
||||
|
||||
* #40658 wsdl2perl - prefix option
|
||||
The prefix option is now changed to behave more practical
|
||||
* #40802 wsdl2perl problems with special url
|
||||
The "fixed" attribute caused an error.
|
||||
* #40650 Deserialization on inherited types
|
||||
The inherited complexType variety (sequence/all/choice...) did not get
|
||||
propagated to derived complexTypes. Thus, derived complexTypes which did
|
||||
not add elements lost all inherited elements.
|
||||
* #40108 Test failure on Cygwin
|
||||
Fixes a test failure on Cygwin due to a malformed file:// URL
|
||||
* #40021 charset: utf-8
|
||||
Removed duplicate charset in HTTP requests issued by
|
||||
SOAP::WSDL::Transport::HTTP. Replaced the utf8 by utf-8 in HTTP requests
|
||||
* #39715 Error with complexType extension base without child elements
|
||||
A rather subtle error caused by a wrong init value (undef) for the list
|
||||
of child elements in a complexType sequence.
|
||||
* [ 2005693 ] <maxLength fixed ="true"> causes error
|
||||
* [ 2023797 ] type extensions not handled correctly
|
||||
ComplexType objects now test their elements with ->isa, not with ref
|
||||
* [ 2021755 ] Generating nested complexType extensions throws errors
|
||||
|
||||
2.00.05 - Jul 13 2008
|
||||
|
||||
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/).
|
||||
|
||||
* [ 2014482 ] Big-O memory hole when parsing WSDL
|
||||
SOAP::WSDL still leaks memory when using SOAP::Lite's transport backend
|
||||
This is to be fixed in 0.710.08 in SOAP::Lite
|
||||
* #36865 wsdl2perl.pl fails on Expat error
|
||||
Resolved by dropping a note for Solaris in README
|
||||
* [ 2005693 ] <maxLength fixed ="true"> causes error
|
||||
The >fixed< attribute is now recognized (but has no effect yet)
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* added missing Class::Std::Storable::Fast import flags to
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::IDREFS
|
||||
* some code cleanup
|
||||
|
||||
2.00.04
|
||||
|
||||
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/).
|
||||
|
||||
* [ 1972059 ] Can't set timeout via SOAP::WSDL
|
||||
* [ 1961409 ] Error with unqualified references in imported schema
|
||||
* #35873: SOAP::WSDL -- Can't locate object method "set_Action" via package "SOAP::WSDL::OpMessage"
|
||||
* [ 1969427 ] Mod_Perl.t broken when mod_perl is unavailable
|
||||
* #35610 Test fails when Test::Without::Module is installed
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Changed the environment variable for author tests to "RELEASE_TESTING",
|
||||
as defined by the Oslo QA Hackathon 2008
|
||||
(see http://perl-qa.hexten.net/wiki/index.php/Oslo_QA_Hackathon_2008_:Achievements)
|
||||
* Enhanced documentation
|
||||
* Fixed a wrong error message
|
||||
* Cleaned up test suite (removed duplicate tests)
|
||||
|
||||
2.00.03 - May 18 2008
|
||||
|
||||
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/).
|
||||
|
||||
* [ 1966575 ] 2.00.02 produced bad code with complexType extensions
|
||||
|
||||
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/).
|
||||
|
||||
* [ 1963613 ] ComplexTypes die on ->can('FOOBAR');
|
||||
* [ 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
|
||||
---
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1832998 ] Make interface methods complain when called as class method
|
||||
* [ 1826833 ] listify all XSD type objects when called as @{}
|
||||
|
||||
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/).
|
||||
|
||||
* #30685: Error in MessageParser when using __SKIP__ in typemap
|
||||
* [ 1831398 ] Badd class names for atomic typed elements
|
||||
* [ 1828240 ] POD Defects
|
||||
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* The test suite has been improved
|
||||
* Documentation has been improved
|
||||
|
||||
2.00_23
|
||||
---
|
||||
|
||||
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):
|
||||
|
||||
* [ 1826382 ] nillable elements not serialized as xsi:nil
|
||||
* [ 1826337 ] Second element in complexType gets eaten up
|
||||
* [ 1792348 ] 006_client.t requires SOAP::Lite (again)
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Test for complexType containing element with atomic simpleType added
|
||||
|
||||
2.00_22
|
||||
----
|
||||
|
||||
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):
|
||||
|
||||
* [ 1817697 ] Dots in service/port names lead to broken interfaces
|
||||
* [ 1817699 ] Templates not found on all OS
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Code cleanup. The XSD library has been cleaned up a bit. Should result
|
||||
in a minor speedup in serializing and deserializing XML messages,
|
||||
|
||||
2.00_21 - not released
|
||||
----
|
||||
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):
|
||||
|
||||
* [ 1810058 ] .tt's pod indexed on CPAN (again)
|
||||
* [ 1809284 ] Rename SOAP::WSDL::Deserializer::SOAP11 to ::XSD
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Requires at least perl 5.8.0. This is due to a bug in perls before -
|
||||
see http://aspn.activestate.com/ASPN/Mail/Message/perl5-porters/929746
|
||||
|
||||
2.00_20
|
||||
----
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1815646 ] Only include last part of port name in interface
|
||||
* [ 1815648 ] Methods with empty body cannot be called as ->method()
|
||||
* [ 1815651 ] Empty complexType definitions not supported
|
||||
|
||||
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):
|
||||
|
||||
* [ 1815643 ] ComplexTypes cannot be freezed/thawed
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* WSDL definitions are decoded into utf8
|
||||
* fixed tests to use correct path on windows
|
||||
|
||||
2.00_19
|
||||
----
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1810395 ] Implement complexType complexContent extension
|
||||
|
||||
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):
|
||||
|
||||
* [ 1813144 ] Typemap not used in interface class
|
||||
* [ 1810058 ] .tt's pod indexed on CPAN
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Documentation improvements
|
||||
|
||||
2.00_18
|
||||
----
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1790983 ] Create generator Plugin API
|
||||
Generator factory is SOAP::WSDL::Factory::Generator
|
||||
|
||||
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):
|
||||
|
||||
* [ 1805252 ] t/SOAP/WSDL/XSD/Typelib/Builtin/004_time.t fails
|
||||
The default timezone conversion has been fixed.
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Documentation improvements
|
||||
* Test updates
|
||||
* readable() has been converted into a no-op, as it already had no effect
|
||||
any more
|
||||
|
||||
2.00_17
|
||||
----
|
||||
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):
|
||||
|
||||
* [ 1772617 ] SOAP Header not working
|
||||
Added header support. Currently, SOAP headers are only supported with
|
||||
the SOM or the XSD (SOAP11) serializer.
|
||||
|
||||
* [ 1805238 ] Tests in t/SOAP/WSDL don't work when run from t/
|
||||
|
||||
* [ 1805241 ] explain() broken in SOAP::WSDL
|
||||
explain has been removed from SOAP::WSDL
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Added limited support for complexType complexContent content model with
|
||||
restriction variety.
|
||||
SOAP::WSDL now supports this XML Schema definition variant, although no
|
||||
constraints are imposed on derived types yet.
|
||||
Derived types do not serialize with a xsi:type attribute (and the xsi:type
|
||||
attribute is not recognized by the XML parser), so you cannot use derived
|
||||
types as a substitute for theri parent, yet.
|
||||
|
||||
* Added support for complexType choice variety
|
||||
complexType definitions using the choice variety are now supported,
|
||||
even though the content is not checked (if you pass in invalid data,
|
||||
invalid XML will be generated).
|
||||
|
||||
* Added Loopback Transport backend.
|
||||
SOAP::WSDL::Tranport::Loopback just returns the request as respons, but
|
||||
allows testing the whole chain from user interface to transport backend.
|
||||
|
||||
* Fixed SOAP::WSDL::Factory::Transport prefer user-registered
|
||||
transport backend
|
||||
|
||||
* Fixed set_soap_version method in SOAP::WSDL::Client.
|
||||
Re-setting the SOAP version now invalidates (resets) serializer and
|
||||
deserializer, but not the transport backend.
|
||||
|
||||
* Fixed SOAP::WSDL::XSD::Typelib::Builtin::boolean to return false
|
||||
when false and true when true.
|
||||
|
||||
* SOAP::WSDL::XSD::Typelib::Builtin::normalizedString now replaces all
|
||||
occurences of tab, newline and carriage return by whitespce on set_value.
|
||||
|
||||
* Code cleanup
|
||||
o Lots of orphan methods now replaced by the SOAP::WSDL::Generator
|
||||
hierarchy have been removed.
|
||||
o Unused (and unusable) readable option checking has been removed in
|
||||
SOAP::WSDL::Serializer::SOAP11.
|
||||
o Unused XML Schema facet attributes have been removed from XSD Builtin
|
||||
classes
|
||||
o Methods common to all expat parser classes have been factored out
|
||||
into a common base class.
|
||||
|
||||
* XML serialization speedup for SOAP::WSDL::XSD::* objects
|
||||
|
||||
* Tests added to improve test coverage.
|
||||
|
||||
* A few documentation errors have been fixed
|
||||
|
||||
* Misspelled default Typemap and Interface prefixes have been corrected
|
||||
|
||||
2.00_16
|
||||
----
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1761532 ] Support embedded atomic types
|
||||
SOAP::WSDL now supports a greater variety of XML Schema type definitions.
|
||||
Note that XML Schema support is still incomplete, though.
|
||||
|
||||
* [ 1797943 ] Create Perl Hash Deserializer
|
||||
There's a new deserializer which outputs perl hashes as data structures.
|
||||
Much like XML::Simple, but faster. No XML Attribute support, though.
|
||||
|
||||
* [ 1797678 ] Move Code generator from WSDL::Definitions to separate class
|
||||
|
||||
* [ 1803330 ] Create one interface per port
|
||||
SOAP::WSDL now creates one interface per port, not one per service.
|
||||
|
||||
The following bugs have been fixed (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||
|
||||
* [ 1804441 ] parts from binding not regarded in SOAP::WSDL
|
||||
SOAP::WSDL (interpreter mode) now respects the body parts specified in the
|
||||
binding.
|
||||
|
||||
* [ 1803763 ] nonNegativeInteger misspelled in Schema::Builtin
|
||||
|
||||
* [ 1793965 ] _expand() does not work on non-root-node ns declarations
|
||||
|
||||
* [ 1792348 ] 006_client.t requires SOAP::Lite in 2.00_15
|
||||
SOAP::WSDL no longer attempts to load SOAP::WSDL::Deserializer::SOM when
|
||||
no_dispatch is set.
|
||||
006_client.t now sets outputxml(1), to be really sure.
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Code generator only generates interface for the first port in a service
|
||||
The code generator now generates interfaces for all ports.
|
||||
Note: The naming scheme has changed. It is now
|
||||
InterfacePrefix::Service::Port
|
||||
|
||||
* XML Parser speedup
|
||||
The XML parser has received a little speedup.
|
||||
|
||||
* A number of errors in parsing / traversing WSDL documents have been
|
||||
corrected.
|
||||
|
||||
* Documentation has been improved
|
||||
|
||||
* A number of (incorrect, but passing) tests have been fixed.
|
||||
|
||||
* Code cleanup: The SOAP::WSDL::SAX* modules are no longer included, as they
|
||||
are not supported any more. They can still be found in SOAP::WSDL's
|
||||
subversion repository in the attic directory, though.
|
||||
|
||||
2.00_15
|
||||
----
|
||||
|
||||
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):
|
||||
|
||||
* [ 1792321 ] 2.00_14 requires SOAP::Lite for passing tests
|
||||
|
||||
2.00_14
|
||||
----
|
||||
|
||||
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):
|
||||
|
||||
* [ 1792235 ] SOAP::WSDL::Transport::Test missing from 2.00_13
|
||||
The package has been re-added
|
||||
|
||||
* [ 1792221 ] class_resolver not set from ::Client in 2.00_13
|
||||
Changed to set class_resolver correctly.
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* The ::SOM deserializer has been simplified to be just a subclass
|
||||
of SOAP::Deserializer from SOAP::Lite
|
||||
* Factories now emit more useful error messages when no class is registered
|
||||
for the protocol/soap_version requested
|
||||
* Documentation has been improved
|
||||
- refined ::Factory:: modules' documentation
|
||||
* Several tests have been added
|
||||
* XSD classes have been improved for testability
|
||||
|
||||
2.00_13
|
||||
----
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1790619 ] Test transport backend
|
||||
A test transport backend has been implemented (SOAP::WSDL::Transport::Test).
|
||||
It returns the contents from a file and discards the response.
|
||||
The filename is determined from the soap_action field.
|
||||
|
||||
* [ 1785196 ] Replace outputsom(1) by deserializer plugin
|
||||
outputsom(1) in SOAP::WSDL is now implemented via using the deserializer
|
||||
plugin SOAP::WSDL::Deserializer::SOM.
|
||||
|
||||
* [1785195] Support deserializer plugins
|
||||
Deserializer plugin API added via SOAP::WSDL::Factory::Deserializer.
|
||||
|
||||
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):
|
||||
|
||||
* [1789581] Support ComplexType mixed
|
||||
WSDL parser now supports using the mixed="true" attribute in complexType
|
||||
definitions. Mixed content in messages is only supported via SOAP::SOM yet.
|
||||
|
||||
* [1787975] 016_client_object.t fails due to testing XML as string
|
||||
Removed string test.
|
||||
|
||||
* [1787959] Test wsdl seems to be broken
|
||||
Corrected typo.
|
||||
|
||||
* [1787955] ::XSD::Typelib::date is broken
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::date now converts time-zoned dates properly,
|
||||
and adds the local time zone if none is given.
|
||||
|
||||
* [1785646] SOAPAction header not set from soap:operation soapAction
|
||||
SOAP::WSDL now sets the SOAPAction header correctly.
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Documentation improvements
|
||||
|
||||
2.00_12
|
||||
----
|
||||
|
||||
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):
|
||||
|
||||
* [1787146] SOAP::WSDL still uses XML::LibXML
|
||||
The superficious usage of XML::LibXML has been removed. XML::LibXML with
|
||||
sax filter has been replaced by SOAP::WSDL::Expat::WSDLParser.
|
||||
|
||||
* [1787054] Test suite requires XML::LibXML in 2.00_11
|
||||
The test suite no longer requires XML::LibXML to pass.
|
||||
|
||||
* [1785678] SOAP envelope not checked for namespace
|
||||
The SOAP envelope is now checked for the correct namespace.
|
||||
|
||||
* [1786644] SOAP::WSDL::Manual - doc error
|
||||
Documentation improvements
|
||||
|
||||
The following uncategorized improvements have been made
|
||||
|
||||
* The SOAPAction header is now alway quoted (R1109 in WS-I BP 1.0).
|
||||
|
||||
2.00_11
|
||||
----
|
||||
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [1767963] Transport plugins via SOAP::WSDL::Factory::Transport.
|
||||
SOAP::WSDL uses SOAP::Lite's tranport modules as default, with a
|
||||
lightweight HTTP(S) transport plugin as fallback.
|
||||
Custom transport modules can be registered via SOAP::WSDL::Factory::Transport.
|
||||
|
||||
* [ 1772730 ] Serializer plugins via SOAP::WSDL::Factory::Serializer
|
||||
The default serializer for SOAP1.1 is SOAP::WSDL::Serializer::SOAP11.
|
||||
Custom serializers classes can be registered via
|
||||
SOAP::WSDL::Factory::Serializer or set via SOAP::WSDL's set_serializer
|
||||
method.
|
||||
|
||||
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):
|
||||
|
||||
* [ 1764854 ] Port WSDL parser to expat and remove XML::LibXML dependency
|
||||
SOAP::WSDL now requires only XML::Parser to be installed.
|
||||
XML::LibXML is not required any more, though XML::LibXML based modules still
|
||||
exist.
|
||||
|
||||
The following uncategorized improvements have been made
|
||||
|
||||
* The number of dependencies has been reduced. SOAP::WSDL no longer requires the
|
||||
following modules to be installed:
|
||||
- XML::SAX::Base
|
||||
- XML::SAX::ParserFactory
|
||||
- Pod::Simple::Text
|
||||
- XML::LibXML
|
||||
|
||||
* The missing prerequisite Template has been added.
|
||||
* Documentation has been improved:
|
||||
- WS-I Compliance document added.
|
||||
|
||||
|
||||
2.00_10
|
||||
----
|
||||
* Changed Makefile.PL to use Module::Build (passthrough mode)
|
||||
* fixed element ref="" handling
|
||||
|
||||
2.00_09
|
||||
----
|
||||
* SOAP::WSDL::XSD::Typelib::Builtin::boolean objects now return their numerical
|
||||
value in bool context, not "true" or "false" (always true...)
|
||||
* date/time test are now timezone-sensitive
|
||||
* examples added
|
||||
|
||||
2.00_08
|
||||
---
|
||||
* SOAP::WSDL::XSD::Typelib::ComplexType objects now check the class of their
|
||||
child objects.
|
||||
This provides early feedback to developers.
|
||||
* SOAP message parser can skip unwanted parts of the message to improve parsing
|
||||
speed - see SOAP::WSDL::Expat::MessageParser for details.
|
||||
* HTTP Content-Type is configurable
|
||||
* SOAP::WSDL::XSD::Typelib::ComplexType based objects accept any combination of
|
||||
hash refs, list refs and objects as parameter to set_value() and new().
|
||||
* SOAP::WSDL::XSD::Typelib::Builtin::dateTime and ::date convert date
|
||||
strings into XML date strings
|
||||
* SOAP::WSDL::Definitions::create now
|
||||
- converts '.' in service names to '::' (.NET class separator to perl class
|
||||
separator)
|
||||
- outputs Typemaps and Interface classes in UTF8 to allow proper inclusion
|
||||
of UTF8 documentation from WSDL
|
||||
* SOAP::WSDL::Definitions::create() includes doc in generated interface classes
|
||||
* WSDLHandler now handles <wsdl:documentation> tags
|
||||
* fixed explain in SimpleType, ComplexType and Element
|
||||
|
||||
2.00_07 and below
|
||||
---
|
||||
* Implemented a Code generator for creating SOAP interfaces based on WSDL definitions
|
||||
* Implemented a high-speed stream based SOAP message parser
|
||||
SOAP message parser returns a objects based on XML schema based class library
|
||||
* Implemented a XML schema based class library
|
||||
* Implemented a stream based WSDL parser.
|
||||
Parses WSDL into objects. Objects can serialize data, and explain how to use the
|
||||
service(s) they make up (output documentation).
|
||||
119
HACKING
119
HACKING
@@ -1,7 +1,10 @@
|
||||
HACKING
|
||||
=======
|
||||
|
||||
Development of SOAP::WSDL takes place on sourceforge.net.
|
||||
|
||||
There's a svn repository available at
|
||||
https://svn.sourceforge.net/svnroot/soap-wsdl
|
||||
https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl
|
||||
|
||||
Engagement in the further development of this module is highly encouraged -
|
||||
many people have already contributed, and many more probably will.
|
||||
@@ -11,14 +14,118 @@ so if you feel your changes are urgent, please set up a sourceforge account
|
||||
and ask me for commit permissions on the repository - I will happily accept
|
||||
you as co-author.
|
||||
|
||||
The (my) current roadmap for SOAP::WSDL is:
|
||||
TODO shows the current roadmap.
|
||||
|
||||
1.2*: Bugfixes and support for more XSD variants
|
||||
SOAP-WSDL CODING GUIDELINES
|
||||
===========================
|
||||
|
||||
1.3: Bindings support
|
||||
DESIGN PRINCIPLES
|
||||
-----------------
|
||||
|
||||
2.*: WSDL -> Perl Class factory with offline WSDL processing
|
||||
SOAP-WSDL is designed for the following principles:
|
||||
|
||||
May 2007,
|
||||
1. SPEED
|
||||
A SOAP toolkit is useless, if it's not fast enough. Therefore SOAP::WSDL aims
|
||||
at always being fast enough.
|
||||
|
||||
Please benchmark any contributions - if they slow down SOAP-WSDL (especially
|
||||
the XML parsing part), you should have good reasons.
|
||||
|
||||
2. USABILITY
|
||||
SOAP-WSDL is designed user-friendly. It tells the user whether it's
|
||||
capable of handling some WSDL or not, it gives friendly error messages, and
|
||||
if a user happens to call a non-existant method on XSD objects, they croak
|
||||
with a list of available methods to ease development.
|
||||
|
||||
3. EXTENSIBILITY
|
||||
If you plan an extension, look if the extension itself should be extensible,
|
||||
and which extension points to use.
|
||||
|
||||
Creating new extension points is highly appreciated.
|
||||
|
||||
4. MAINTAINABILITY
|
||||
SOAP::Lite unfortunately shows where a toolkit can go without focus on
|
||||
maintainability. SOAP::WSDL tries to be highly maintainable and easy to
|
||||
understand.
|
||||
|
||||
CODING STYLE
|
||||
------------
|
||||
|
||||
The principles above dictate a clear, but not too lengthy coding style.
|
||||
|
||||
SOAP::WSDL's coding style in principle follows Perl Best Practices by
|
||||
Damian Conway, but allows deviances for speed reasons
|
||||
|
||||
The following guidelines apply:
|
||||
|
||||
- Testing
|
||||
* SOAP::WSDL has a test coverage of >95% and aims at 100%. Please write
|
||||
a test first.
|
||||
* 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.
|
||||
|
||||
- Indentation and formatting
|
||||
* indent with spaces.
|
||||
* indent 4 characters per level
|
||||
* use \n (LF) for newlines, not CRLF
|
||||
* use blank lines to separate paragraphs
|
||||
* Coding style is similar to K&R (opening brace on last line, closing
|
||||
brace on new line. No cuddled else)
|
||||
* No trailing spaces allowed (except to indicate a blank line in a POD
|
||||
source block)
|
||||
|
||||
- Flow control
|
||||
* postfix if is allowed for single statements only. Preferably for flow
|
||||
control only.
|
||||
* postfix for, while, until are not allowed.
|
||||
* unless is not allowed at all. Use if not.
|
||||
* goto is only allowed for jumping into subs. Nothing else.
|
||||
* redo, next, last etc. are preferred over goto.
|
||||
|
||||
- Strictness and Warnings
|
||||
* always use strict and warnings. Switch off for the smallest block
|
||||
possible, but switch of if there's a reason (don't let tools like
|
||||
perlcritic fool you: no strict qw(refs); is often required.
|
||||
|
||||
- Naming
|
||||
* variable names are lower case with _ separating words, except when
|
||||
a XML Schema, SOAP, or WSDL name is name-giving (don't force portType to
|
||||
become port_type)
|
||||
* hashes should be named FOO_of, lists FOO_from, references FOO_ref.
|
||||
* package names are CamelCase, except when a XML, SOAP or WSDL name is
|
||||
name-giving (don't force 'int' to become 'Int'. However, simpleType
|
||||
becomes SimpleType).
|
||||
|
||||
- Subroutines
|
||||
* Subroutines shouldn't be more than around 50 lines long
|
||||
* @_ should be unpacked. Deviances are allowed for speed reasons. If
|
||||
you're not unpacking @_ in a sub of say, 5 lines or more, please comment
|
||||
what you're doing.
|
||||
* Always return. Always return. A single "return" allows perl to execute
|
||||
the subroutine in question in void context, which saves it from putting
|
||||
it's result in a temporary variable. Always return.
|
||||
|
||||
- POD and comments
|
||||
* Comment extensively. Comments are the maintainer (and core developer's)
|
||||
documentation - aid them where possible (your're probably doing yourself
|
||||
a favor by adding extensive comments).
|
||||
* Comment either in blocks or as hanging side comments (especially when
|
||||
commenting @_ access).
|
||||
Example:
|
||||
|
||||
sub baz {
|
||||
# @_ not unpacked for speed reasons. Read:
|
||||
# my ($self, $something, %args_of) = @_;
|
||||
|
||||
$_[0]->bar($_[1]); # read as $self->bar($something);
|
||||
$_[0]->foo($_[2..$#]); # read as $self->foo(%args_of);
|
||||
return;
|
||||
}
|
||||
* POD is located at end of file, preferably after __END__
|
||||
* 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
|
||||
PODs to look at confuse the average CPAN user.
|
||||
|
||||
July - November 2007,
|
||||
|
||||
Martin Kutter
|
||||
146
LICENSE
Normal file
146
LICENSE
Normal file
@@ -0,0 +1,146 @@
|
||||
SOAP::WSDL is dual licensed under the same terms as
|
||||
Perl itself.
|
||||
|
||||
This means at your choice, either the Perl Artistic License, or
|
||||
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
|
||||
|
||||
466
MANIFEST
466
MANIFEST
@@ -1,18 +1,462 @@
|
||||
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/02_anySimpleType.t
|
||||
benchmark/XSD/03_string.t
|
||||
benchmark/XSD/strftime.pl
|
||||
bin/wsdl2perl.pl
|
||||
Build.PL
|
||||
CHANGES
|
||||
Changes
|
||||
example/cgi-bin/helloworld.pl
|
||||
example/cgi-bin/person.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/CountCookiesResponse.pm
|
||||
example/lib/MyElements/GenerateBarCode.pm
|
||||
example/lib/MyElements/GenerateBarCodeResponse.pm
|
||||
example/lib/MyElements/GetCitiesByCountry.pm
|
||||
example/lib/MyElements/GetCitiesByCountryResponse.pm
|
||||
example/lib/MyElements/GetFortuneCookie.pm
|
||||
example/lib/MyElements/GetFortuneCookieResponse.pm
|
||||
example/lib/MyElements/GetSpecificCookie.pm
|
||||
example/lib/MyElements/GetSpecificCookieResponse.pm
|
||||
example/lib/MyElements/GetWeather.pm
|
||||
example/lib/MyElements/GetWeatherResponse.pm
|
||||
example/lib/MyElements/int.pm
|
||||
example/lib/MyElements/ListPerson.pm
|
||||
example/lib/MyElements/ListPersonResponse.pm
|
||||
example/lib/MyElements/readNodeCount.pm
|
||||
example/lib/MyElements/readNodeCountResponse.pm
|
||||
example/lib/MyElements/sayHello.pm
|
||||
example/lib/MyElements/sayHelloResponse.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/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/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/weather.pl
|
||||
example/weather_wsdl.pl
|
||||
example/wsdl/11_helloworld.wsdl
|
||||
example/wsdl/FortuneCookie.xml
|
||||
example/wsdl/genericbarcode.xml
|
||||
example/wsdl/globalweather.xml
|
||||
example/wsdl/Person.wsdl
|
||||
HACKING
|
||||
lib/SOAP/WSDL.pm
|
||||
lib/SOAP/WSDL/Base.pm
|
||||
lib/SOAP/WSDL/Binding.pm
|
||||
lib/SOAP/WSDL/Client.pm
|
||||
lib/SOAP/WSDL/Client/Base.pm
|
||||
lib/SOAP/WSDL/Definitions.pm
|
||||
lib/SOAP/WSDL/Deserializer/Hash.pm
|
||||
lib/SOAP/WSDL/Deserializer/SOM.pm
|
||||
lib/SOAP/WSDL/Deserializer/XSD.pm
|
||||
lib/SOAP/WSDL/Expat/Base.pm
|
||||
lib/SOAP/WSDL/Expat/Message2Hash.pm
|
||||
lib/SOAP/WSDL/Expat/MessageParser.pm
|
||||
lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
||||
lib/SOAP/WSDL/Expat/WSDLParser.pm
|
||||
lib/SOAP/WSDL/Factory/Deserializer.pm
|
||||
lib/SOAP/WSDL/Factory/Generator.pm
|
||||
lib/SOAP/WSDL/Factory/Serializer.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/Plugin/XSD.pm
|
||||
lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/attribute.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/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/contentModel.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/attributeSet.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/content_model.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/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/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/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/Interface.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/Body.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/Header.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/Operation.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Element.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/Interface/POD/Message.tt
|
||||
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/Part.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/atomicType.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/POD/contentModel.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/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/union.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt
|
||||
lib/SOAP/WSDL/Generator/Visitor.pm
|
||||
lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
|
||||
lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
||||
lib/SOAP/WSDL/Manual.pod
|
||||
lib/SOAP/WSDL/Manual/Cookbook.pod
|
||||
lib/SOAP/WSDL/Manual/Deserializer.pod
|
||||
lib/SOAP/WSDL/Manual/FAQ.pod
|
||||
lib/SOAP/WSDL/Manual/Glossary.pod
|
||||
lib/SOAP/WSDL/Manual/Parser.pod
|
||||
lib/SOAP/WSDL/Manual/Serializer.pod
|
||||
lib/SOAP/WSDL/Manual/WS_I.pod
|
||||
lib/SOAP/WSDL/Manual/XSD.pod
|
||||
lib/SOAP/WSDL/Message.pm
|
||||
lib/SOAP/WSDL/Operation.pm
|
||||
lib/SOAP/WSDL/OpMessage.pm
|
||||
lib/SOAP/WSDL/Part.pm
|
||||
lib/SOAP/WSDL/Port.pm
|
||||
lib/SOAP/WSDL/PortType.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/SOAP/Address.pm
|
||||
lib/SOAP/WSDL/SOAP/Body.pm
|
||||
lib/SOAP/WSDL/SOAP/Header.pm
|
||||
lib/SOAP/WSDL/SOAP/HeaderFault.pm
|
||||
lib/SOAP/WSDL/SOAP/Operation.pm
|
||||
lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
|
||||
lib/SOAP/WSDL/Transport/HTTP.pm
|
||||
lib/SOAP/WSDL/Transport/Loopback.pm
|
||||
lib/SOAP/WSDL/Transport/Test.pm
|
||||
lib/SOAP/WSDL/TypeLookup.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/ComplexType.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/Builtin.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/anySimpleType.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/date.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/decimal.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/double.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/duration.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/float.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/gDay.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/gMonth.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/gMonthDay.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/gYear.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/gYearMonth.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/hexBinary.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/ID.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/IDREF.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/IDREFS.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/int.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/integer.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/language.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/list.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/long.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/Name.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/NCName.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/negativeInteger.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKEN.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKENS.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/nonNegativeInteger.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/nonPositiveInteger.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/normalizedString.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/NOTATION.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/positiveInteger.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/QName.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/short.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedByte.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedInt.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedLong.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
lib/SOAP/WSDL/XSD/WhiteSpace.pm
|
||||
LICENSE
|
||||
Makefile.PL
|
||||
MANIFEST This list of files
|
||||
META.yml
|
||||
MIGRATING
|
||||
README
|
||||
t/1_performance.t
|
||||
t/2_helloworld.NET.t
|
||||
t/3_various.t
|
||||
t/4_auto_set_port.t
|
||||
t/5_same_transport.t
|
||||
t/97_pod.t
|
||||
t/98_pod_coverage.t
|
||||
t/acceptance/helloworld.asmx.xml
|
||||
t/acceptance/helloworld.xml
|
||||
t/acceptance/test.wsdl.xml
|
||||
t/002_parse_wsdl.t
|
||||
t/003_wsdl_based_serializer.t
|
||||
t/006_client.t
|
||||
t/008_client_wsdl_complexType.t
|
||||
t/009_data_classes.t
|
||||
t/011_simpleType.t
|
||||
t/012_element.t
|
||||
t/013_complexType.t
|
||||
t/016_client_object.t
|
||||
t/094_cpan_meta.t
|
||||
t/095_copying.t
|
||||
t/096_characters.t
|
||||
t/097_kwalitee.t
|
||||
t/098_pod.t
|
||||
t/099_pod_coverage.t
|
||||
t/acceptance/results/03_complexType-all.xml
|
||||
t/acceptance/results/03_complexType-sequence.xml
|
||||
t/acceptance/results/04_element-simpleType.xml
|
||||
t/acceptance/results/04_element.xml
|
||||
t/acceptance/results/05_simpleType-list.xml
|
||||
t/acceptance/results/05_simpleType-restriction.xml
|
||||
t/acceptance/results/05_simpleType-union.xml
|
||||
t/acceptance/results/11_helloworld.xml
|
||||
t/acceptance/wsdl/006_sax_client.wsdl
|
||||
t/acceptance/wsdl/008_complexType.wsdl
|
||||
t/acceptance/wsdl/02_port.wsdl
|
||||
t/acceptance/wsdl/03_complexType-all.wsdl
|
||||
t/acceptance/wsdl/03_complexType-element-ref.wsdl
|
||||
t/acceptance/wsdl/03_complexType-sequence.wsdl
|
||||
t/acceptance/wsdl/04_element-simpleType.wsdl
|
||||
t/acceptance/wsdl/04_element.wsdl
|
||||
t/acceptance/wsdl/05_simpleType-list.wsdl
|
||||
t/acceptance/wsdl/05_simpleType-restriction.wsdl
|
||||
t/acceptance/wsdl/05_simpleType-union.wsdl
|
||||
t/acceptance/wsdl/10_helloworld.asmx.xml
|
||||
t/acceptance/wsdl/11_helloworld.wsdl
|
||||
t/acceptance/wsdl/contributed/Axis.wsdl
|
||||
t/acceptance/wsdl/contributed/ETest.wsdl
|
||||
t/acceptance/wsdl/contributed/gasquery.wsdl
|
||||
t/acceptance/wsdl/contributed/OITest.wsdl
|
||||
t/acceptance/wsdl/contributed/tools.wsdl
|
||||
t/acceptance/wsdl/elementAtomicComplexType.xml
|
||||
t/acceptance/wsdl/email_account.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/helloWorld_header.wsdl
|
||||
t/acceptance/wsdl/import.xsd
|
||||
t/acceptance/wsdl/import_loop.xsd
|
||||
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/lib/Mod_Perl2Test.pm
|
||||
t/lib/MyComplexType.pm
|
||||
t/lib/MyElement.pm
|
||||
t/lib/MySimpleType.pm
|
||||
t/lib/Test/SOAP/WSDL/Expat/WSDLParser.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/TEnqueueMessage.pm
|
||||
t/lib/Typelib/TMessage.pm
|
||||
t/SOAP/WSDL.t
|
||||
t/SOAP/WSDL/02_port.t
|
||||
t/SOAP/WSDL/03_complexType-all.t
|
||||
t/SOAP/WSDL/03_complexType-choice.t
|
||||
t/SOAP/WSDL/03_complexType-complexContent.t
|
||||
t/SOAP/WSDL/03_complexType-element-ref.t
|
||||
t/SOAP/WSDL/03_complexType-group.t
|
||||
t/SOAP/WSDL/03_complexType-sequence.t
|
||||
t/SOAP/WSDL/03_complexType-simpleContent.t
|
||||
t/SOAP/WSDL/04_element-complexType.t
|
||||
t/SOAP/WSDL/04_element-simpleType.t
|
||||
t/SOAP/WSDL/04_element.t
|
||||
t/SOAP/WSDL/05_simpleType-list.t
|
||||
t/SOAP/WSDL/05_simpleType-restriction.t
|
||||
t/SOAP/WSDL/05_simpleType-union.t
|
||||
t/SOAP/WSDL/06_keep_alive.t
|
||||
t/SOAP/WSDL/11_helloworld.NET.t
|
||||
t/SOAP/WSDL/12_binding.t
|
||||
t/SOAP/WSDL/Base.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/SOM.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/Serializer.t
|
||||
t/SOAP/WSDL/Factory/Transport.t
|
||||
t/SOAP/WSDL/Generator/Template.t
|
||||
t/SOAP/WSDL/Generator/Template/XSD/Import.t
|
||||
t/SOAP/WSDL/Generator/Visitor.t
|
||||
t/SOAP/WSDL/Generator/Visitor/Typemap.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/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/acceptance/test2.xml
|
||||
t/SOAP/WSDL/Transport/acceptance/test3.xml
|
||||
t/SOAP/WSDL/Transport/HTTP.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/anySimpleType.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/boolean.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/byte.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/date.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/decimal.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/double.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/duration.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/float.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/gDay.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/gMonth.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/gMonthDay.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/gYear.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/gYearMonth.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/hexBinary.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/ID.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/IDREF.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/IDREFS.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/int.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/integer.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/Name.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/NCName.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/negativeInteger.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKEN.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKENS.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/nonNegativeInteger.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/nonPositiveInteger.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/normalizedString.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/NOTATION.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/positiveInteger.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/QName.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/short.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/string.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/time.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/token.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedByte.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedInt.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedLong.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.t
|
||||
t/SOAP/WSDL/XSD/Typelib/ComplexType.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
|
||||
TEST_COVERAGE
|
||||
test_html.pl
|
||||
TODO
|
||||
|
||||
368
META.yml
368
META.yml
@@ -1,19 +1,373 @@
|
||||
---
|
||||
name: SOAP-WSDL
|
||||
version: 1.26
|
||||
author: []
|
||||
abstract: WSDL support for SOAP::Lite
|
||||
version: 2.00.06
|
||||
author:
|
||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||
abstract: SOAP with WSDL support
|
||||
license: artistic
|
||||
resources:
|
||||
license: http://opensource.org/licenses/artistic-license.php
|
||||
requires:
|
||||
SOAP::Lite: 0
|
||||
XML::XPath: 0
|
||||
Class::Std::Fast: 0.0.5
|
||||
Data::Dumper: 0
|
||||
Date::Format: 0
|
||||
Date::Parse: 0
|
||||
File::Basename: 0
|
||||
File::Path: 0
|
||||
Getopt::Long: 0
|
||||
LWP::UserAgent: 0
|
||||
List::Util: 0
|
||||
Template: 2.18
|
||||
Term::ReadKey: 0
|
||||
URI: 0
|
||||
XML::Parser::Expat: 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:
|
||||
SOAP::WSDL:
|
||||
file: lib/SOAP/WSDL.pm
|
||||
version: 1.25
|
||||
generated_by: Module::Build version 0.2808
|
||||
version: 2.00.06
|
||||
SOAP::WSDL::Base:
|
||||
file: lib/SOAP/WSDL/Base.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Binding:
|
||||
file: lib/SOAP/WSDL/Binding.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Client:
|
||||
file: lib/SOAP/WSDL/Client.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Client::Base:
|
||||
file: lib/SOAP/WSDL/Client/Base.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Definitions:
|
||||
file: lib/SOAP/WSDL/Definitions.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Deserializer::Hash:
|
||||
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Deserializer::SOM:
|
||||
file: lib/SOAP/WSDL/Deserializer/SOM.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Deserializer::XSD:
|
||||
file: lib/SOAP/WSDL/Deserializer/XSD.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Expat::Base:
|
||||
file: lib/SOAP/WSDL/Expat/Base.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Expat::Message2Hash:
|
||||
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Expat::MessageParser:
|
||||
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Expat::MessageStreamParser:
|
||||
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Expat::WSDLParser:
|
||||
file: lib/SOAP/WSDL/Expat/WSDLParser.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Factory::Deserializer:
|
||||
file: lib/SOAP/WSDL/Factory/Deserializer.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Factory::Generator:
|
||||
file: lib/SOAP/WSDL/Factory/Generator.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Factory::Serializer:
|
||||
file: lib/SOAP/WSDL/Factory/Serializer.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Factory::Transport:
|
||||
file: lib/SOAP/WSDL/Factory/Transport.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Iterator::WSDL11:
|
||||
file: lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::PrefixResolver:
|
||||
file: lib/SOAP/WSDL/Generator/PrefixResolver.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Template:
|
||||
file: lib/SOAP/WSDL/Generator/Template.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Template::Plugin::XSD:
|
||||
file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Template::XSD:
|
||||
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Visitor:
|
||||
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Visitor::Typelib:
|
||||
file: lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Generator::Visitor::Typemap:
|
||||
file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Message:
|
||||
file: lib/SOAP/WSDL/Message.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::OpMessage:
|
||||
file: lib/SOAP/WSDL/OpMessage.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Operation:
|
||||
file: lib/SOAP/WSDL/Operation.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Part:
|
||||
file: lib/SOAP/WSDL/Part.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Port:
|
||||
file: lib/SOAP/WSDL/Port.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::PortType:
|
||||
file: lib/SOAP/WSDL/PortType.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::SOAP::Address:
|
||||
file: lib/SOAP/WSDL/SOAP/Address.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::SOAP::Body:
|
||||
file: lib/SOAP/WSDL/SOAP/Body.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::SOAP::Header:
|
||||
file: lib/SOAP/WSDL/SOAP/Header.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::SOAP::HeaderFault:
|
||||
file: lib/SOAP/WSDL/SOAP/HeaderFault.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::SOAP::Operation:
|
||||
file: lib/SOAP/WSDL/SOAP/Operation.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::SOAP::Typelib::Fault11:
|
||||
file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Serializer::XSD:
|
||||
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Server:
|
||||
file: lib/SOAP/WSDL/Server.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Server::CGI:
|
||||
file: lib/SOAP/WSDL/Server/CGI.pm
|
||||
version: 2.00.06
|
||||
SOAP::WSDL::Server::Mod_Perl2:
|
||||
file: lib/SOAP/WSDL/Server/Mod_Perl2.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Service:
|
||||
file: lib/SOAP/WSDL/Service.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Transport::HTTP:
|
||||
file: lib/SOAP/WSDL/Transport/HTTP.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Transport::Loopback:
|
||||
file: lib/SOAP/WSDL/Transport/Loopback.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Transport::Test:
|
||||
file: lib/SOAP/WSDL/Transport/Test.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::TypeLookup:
|
||||
file: lib/SOAP/WSDL/TypeLookup.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::Types:
|
||||
file: lib/SOAP/WSDL/Types.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Annotation:
|
||||
file: lib/SOAP/WSDL/XSD/Annotation.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Attribute:
|
||||
file: lib/SOAP/WSDL/XSD/Attribute.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::AttributeGroup:
|
||||
file: lib/SOAP/WSDL/XSD/AttributeGroup.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::ComplexType:
|
||||
file: lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||
version: 2.00.06
|
||||
SOAP::WSDL::XSD::Element:
|
||||
file: lib/SOAP/WSDL/XSD/Element.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Enumeration:
|
||||
file: lib/SOAP/WSDL/XSD/Enumeration.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::FractionDigits:
|
||||
file: lib/SOAP/WSDL/XSD/FractionDigits.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Group:
|
||||
file: lib/SOAP/WSDL/XSD/Group.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Length:
|
||||
file: lib/SOAP/WSDL/XSD/Length.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::MaxExclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MaxExclusive.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::MaxInclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MaxInclusive.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::MaxLength:
|
||||
file: lib/SOAP/WSDL/XSD/MaxLength.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::MinExclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MinExclusive.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::MinInclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MinInclusive.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::MinLength:
|
||||
file: lib/SOAP/WSDL/XSD/MinLength.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Pattern:
|
||||
file: lib/SOAP/WSDL/XSD/Pattern.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Schema:
|
||||
file: lib/SOAP/WSDL/XSD/Schema.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Schema::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::TotalDigits:
|
||||
file: lib/SOAP/WSDL/XSD/TotalDigits.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Attribute:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::ENTITY:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::ID:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ID.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::IDREF:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/IDREF.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::IDREFS:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/IDREFS.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::NCName:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/NCName.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::NMTOKEN:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKEN.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::NMTOKENS:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/NMTOKENS.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::NOTATION:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/NOTATION.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::Name:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/Name.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::QName:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/QName.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::anyType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::boolean:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::byte:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::date:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/date.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::dateTime:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::decimal:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/decimal.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::double:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/double.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::duration:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/duration.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::float:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/float.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::gDay:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/gDay.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::gMonth:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/gMonth.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::gMonthDay:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/gMonthDay.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::gYear:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/gYear.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::gYearMonth:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/gYearMonth.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::hexBinary:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/hexBinary.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::int:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/int.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::integer:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/integer.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::language:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/language.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::list:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/list.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::long:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/long.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::negativeInteger:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/negativeInteger.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::nonNegativeInteger:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/nonNegativeInteger.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::nonPositiveInteger:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/nonPositiveInteger.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::normalizedString:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/normalizedString.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::positiveInteger:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/positiveInteger.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::short:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/short.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::time:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::token:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedByte.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::unsignedInt:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedInt.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::unsignedLong:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedLong.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::unsignedShort:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::Element:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
version: 2.00.05
|
||||
SOAP::WSDL::XSD::WhiteSpace:
|
||||
file: lib/SOAP/WSDL/XSD/WhiteSpace.pm
|
||||
version: 2.00.05
|
||||
generated_by: Module::Build version 0.3
|
||||
meta-spec:
|
||||
url: http://module-build.sourceforge.net/META-spec-v1.2.html
|
||||
version: 1.2
|
||||
no_index:
|
||||
directory: lib/SOAP/WSDL/Generator/Template/XSD/
|
||||
|
||||
79
MIGRATING
Normal file
79
MIGRATING
Normal file
@@ -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.
|
||||
30
Makefile.PL
30
Makefile.PL
@@ -1,30 +1,6 @@
|
||||
# Note: this file was auto-generated by Module::Build::Compat version 0.03
|
||||
|
||||
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 $@;
|
||||
# Note: this file was auto-generated by Module::Build::Compat version 0.30
|
||||
require 5.8.0;
|
||||
use Module::Build::Compat 0.02;
|
||||
|
||||
Module::Build::Compat->run_build_pl(args => \@ARGV);
|
||||
require Module::Build;
|
||||
|
||||
84
README
84
README
@@ -1,31 +1,53 @@
|
||||
SOAP::WSDL - a WSDL-driven message preprocessor for SOAP::Lite.
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
See "perldoc SOAP::WSDL" (or "perldoc WSDL.pm") for details.
|
||||
|
||||
|
||||
PREREQUISITES
|
||||
|
||||
SOAP::WSDL requires the following perl modules:
|
||||
|
||||
- SOAP::Lite
|
||||
- XML::XPath
|
||||
|
||||
|
||||
If you want to use file system caching (improves performance), you also
|
||||
need the following packages:
|
||||
|
||||
- Cache::Cache
|
||||
|
||||
INSTALLING
|
||||
|
||||
perl Build.PL
|
||||
perl Build
|
||||
perl Build test
|
||||
perl Build install
|
||||
|
||||
LICENSE
|
||||
|
||||
This library is free software, you can distribute/modify it under the same
|
||||
terms as perl itself.
|
||||
INTRO
|
||||
-----
|
||||
|
||||
SOAP-WSDL provides a SOAP client with WSDL support.
|
||||
|
||||
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
|
||||
----------
|
||||
|
||||
Use the following mantra:
|
||||
|
||||
perl Build.PL
|
||||
perl Build
|
||||
perl Build test
|
||||
perl Build install
|
||||
|
||||
If you don't have Module::Build installed, you may also use
|
||||
|
||||
perl Makefile.PL
|
||||
make
|
||||
make test
|
||||
make install
|
||||
|
||||
Note that Module::Build is the recommended installer - make will not run
|
||||
all tests provided with SOAP-WSDL.
|
||||
|
||||
SOLARIS INSTALLATION NOTES
|
||||
--------------------------
|
||||
According to a CPAN RT report http://rt.cpan.org/Ticket/Display.html?id=36865
|
||||
it may be necessary to check (and possibly update) the expat libraries
|
||||
required by XML::Parser.
|
||||
|
||||
SOAP::WSDL's metadata includes XML::Parser, but it seems that the expat
|
||||
libraries XML::Parser depends on may slip through missing or outdated.
|
||||
23
TEST_COVERAGE
Normal file
23
TEST_COVERAGE
Normal file
@@ -0,0 +1,23 @@
|
||||
# Unfortunately, Build testcover reports test coverage wrong.
|
||||
#
|
||||
# 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):
|
||||
#
|
||||
# Note that this shell script requires Devel::CoverX::Covered - if you
|
||||
# don't have it, comment out the line noted below
|
||||
#
|
||||
|
||||
perl -Ilib -It/lib -MTAP::Harness -MFile::Find::Rule -e '
|
||||
local $ENV{TEST_VERBOSE} = 1;
|
||||
TAP::Harness->new({
|
||||
merge => 1,
|
||||
lib => [ q{t/lib}, q{lib} ],
|
||||
switches => [ q{-MDevel::Cover=-ignore,.,-select,^lib/.+,-coverage,statement,-coverage,subroutine,-coverage,condition,-coverage,branch} ],
|
||||
})->runtests( sort { $a cmp $b } File::Find::Rule->file()->name( q{*.t} )->in( q{t/} ) );
|
||||
'
|
||||
|
||||
# Devel::CoverX::Covered
|
||||
# covered runs
|
||||
|
||||
cover -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch"
|
||||
|
||||
19
TODO
Normal file
19
TODO
Normal file
@@ -0,0 +1,19 @@
|
||||
TODO list for SOAP::WSDL
|
||||
|
||||
2.1 release
|
||||
--------
|
||||
* Support namespaces in SOAP message payload [ 1809057 ]
|
||||
|
||||
* Support the xsi:type attribute on derived types on the wire [ 1809059 ]
|
||||
|
||||
* SOAP1.2 support [ 1803331 ]
|
||||
|
||||
2.2 release
|
||||
--------
|
||||
* XML schema support ("minimal conformant") [ 1764845 ]
|
||||
|
||||
* Support SOAP attachments
|
||||
|
||||
3.0 release
|
||||
--------
|
||||
We're not thinking that far ahead right now.
|
||||
177
benchmark/01_expat.t
Normal file
177
benchmark/01_expat.t
Normal file
@@ -0,0 +1,177 @@
|
||||
#!/usr/bin/perl -w
|
||||
use strict;
|
||||
use warnings;
|
||||
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 SOAP::WSDL::SAX::MessageHandler;
|
||||
|
||||
use Benchmark qw(cmpthese timethese);
|
||||
use SOAP::WSDL::Expat::MessageParser;
|
||||
use SOAP::WSDL::Expat::Message2Hash;
|
||||
use SOAP::WSDL::Expat::MessageParser_XS;
|
||||
use SOAP::Lite;
|
||||
use XML::Simple;
|
||||
use XML::LibXML;
|
||||
use MyComplexType;
|
||||
use MyElement;
|
||||
use MySimpleType;
|
||||
|
||||
my $xml = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||
<SOAP-ENV:Body>
|
||||
<MyAtomicComplexTypeElement xmlns="urn:Test" >
|
||||
<test>
|
||||
<test2 >Test2</test2>
|
||||
<test2 >Test3</test2>
|
||||
<test2 >Test4</test2>
|
||||
<test2 >Test5</test2>
|
||||
<test2 >Test6</test2>
|
||||
<test2 >Test7</test2>
|
||||
<test2 >Test8</test2>
|
||||
<test2 >Test9</test2>
|
||||
<test2 >Test10</test2>
|
||||
<test2 >Test11</test2>
|
||||
<test2 >Test12</test2>
|
||||
<test2 >Test13</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>
|
||||
</MyAtomicComplexTypeElement>
|
||||
</SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||
|
||||
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::MessageParser->new({
|
||||
class_resolver => 'FakeResolver'
|
||||
});
|
||||
|
||||
my $hash_parser = SOAP::WSDL::Expat::Message2Hash->new();
|
||||
|
||||
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
|
||||
|
||||
print "xml length: ${ \length $xml } bytes\n";
|
||||
|
||||
my $libxml = XML::LibXML->new();
|
||||
$libxml->keep_blanks(0);
|
||||
my @data;
|
||||
|
||||
my $deserializer = SOAP::Deserializer->new();
|
||||
|
||||
my $parser_xs = SOAP::WSDL::Expat::MessageParser_XS->new({
|
||||
class_resolver => 'FakeResolver'
|
||||
});
|
||||
|
||||
sub libxml_test {
|
||||
my $dom = $libxml->parse_string( $xml );
|
||||
push @data, dom2hash( $dom->firstChild );
|
||||
};
|
||||
|
||||
sub dom2hash {
|
||||
for ($_[0]->childNodes) {
|
||||
if (exists $_[1]->{ $_->nodeName }) {
|
||||
if (ref $_[1]->{ $_->nodeName } eq 'ARRAY') {
|
||||
if ($_->nodeName eq '#text') {
|
||||
push @{ $_[1] } ,$_->textContent;
|
||||
}
|
||||
else {
|
||||
push @{ $_[1]->{ $_->nodeName } }, dom2hash( $_, {} );
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($_->nodeName eq '#text') {
|
||||
$_[1] = [ $_[1], $_->textContent() ];
|
||||
}
|
||||
else {
|
||||
$_[1]->{ $_->nodeName } = [ $_[1]->{ $_->nodeName } ,
|
||||
dom2hash( $_, {} ) ];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ($_->nodeName eq '#text') {
|
||||
$_[1] = $_->textContent();
|
||||
}
|
||||
else {
|
||||
$_[1]->{ $_->nodeName } = dom2hash( $_, {} );
|
||||
}
|
||||
}
|
||||
}
|
||||
return $_[1];
|
||||
}
|
||||
cmpthese 5000,
|
||||
{
|
||||
'SOAP::WSDL (Hash)' => sub { push @data, $hash_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::LibXML (DOM)' => sub { push @data, $libxml->parse_string( $xml ) },
|
||||
'XML::LibXML (Hash)' => \&libxml_test,
|
||||
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( $xml ) },
|
||||
};
|
||||
|
||||
# data classes reside in t/lib/Typelib/
|
||||
BEGIN {
|
||||
package FakeResolver;
|
||||
{
|
||||
my %class_list = (
|
||||
'MyAtomicComplexTypeElement' => 'MyAtomicComplexTypeElement',
|
||||
'MyAtomicComplexTypeElement/test' => 'MyAtomicComplexTypeElement',
|
||||
'MyAtomicComplexTypeElement/test/test2' => 'MyTestElement2',
|
||||
);
|
||||
|
||||
sub get_typemap { return \%class_list; };
|
||||
|
||||
sub get_map { return \%class_list };
|
||||
|
||||
sub new { return bless {}, 'FakeResolver' };
|
||||
|
||||
sub get_class {
|
||||
my $name = join('/', @{ $_[1] });
|
||||
return ($class_list{ $name }) ? $class_list{ $name }
|
||||
: warn "no class found for $name";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
__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% --
|
||||
59
benchmark/MEMORY_FOOTPRINT
Normal file
59
benchmark/MEMORY_FOOTPRINT
Normal file
@@ -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
|
||||
.
|
||||
77
benchmark/README
Normal file
77
benchmark/README
Normal file
@@ -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.
|
||||
12
benchmark/XSD/01_anyType.t
Normal file
12
benchmark/XSD/01_anyType.t
Normal file
@@ -0,0 +1,12 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Benchmark;
|
||||
use lib '../../lib';
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::anyType;
|
||||
|
||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anyType->new();
|
||||
|
||||
timethese 10000, {
|
||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anyType->new() },
|
||||
};
|
||||
|
||||
57
benchmark/XSD/02_anySimpleType.t
Normal file
57
benchmark/XSD/02_anySimpleType.t
Normal file
@@ -0,0 +1,57 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Benchmark;
|
||||
use lib '../../lib';
|
||||
use lib '../../../Class-Std-Fast/lib';
|
||||
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||
|
||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new();
|
||||
|
||||
timethese 10000, {
|
||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new() },
|
||||
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType->new({
|
||||
value => 'Teststring',
|
||||
}) },
|
||||
'set_FOO' => sub { $obj->set_value('Test') },
|
||||
};
|
||||
|
||||
my $data;
|
||||
timethese 1000000, {
|
||||
'set_FOO' => sub { $obj->set_value('Test') },
|
||||
'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)
|
||||
|
||||
57
benchmark/XSD/03_string.t
Normal file
57
benchmark/XSD/03_string.t
Normal file
@@ -0,0 +1,57 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Benchmark;
|
||||
use lib '../../lib';
|
||||
use lib '../../../Class-Std-Fast/lib';
|
||||
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::string;
|
||||
|
||||
my $obj = SOAP::WSDL::XSD::Typelib::Builtin::string->new();
|
||||
|
||||
timethese 20000, {
|
||||
'new' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new() },
|
||||
'new + params' => sub { SOAP::WSDL::XSD::Typelib::Builtin::string->new({
|
||||
value => 'Teststring',
|
||||
})
|
||||
},
|
||||
};
|
||||
|
||||
$obj->set_value('Foobar');
|
||||
timethese 20000, {
|
||||
serialize => sub { $obj->serialize() }
|
||||
};
|
||||
|
||||
my $data;
|
||||
timethese 1000000, {
|
||||
'set_FOO' => sub { $obj->set_value('Test') },
|
||||
'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)
|
||||
24
benchmark/XSD/strftime.pl
Normal file
24
benchmark/XSD/strftime.pl
Normal file
@@ -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% --
|
||||
|
||||
92
benchmark/hello.pl
Normal file
92
benchmark/hello.pl
Normal file
@@ -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,
|
||||
};
|
||||
|
||||
182
benchmark/person.pl
Normal file
182
benchmark/person.pl
Normal file
@@ -0,0 +1,182 @@
|
||||
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,
|
||||
validation => 0,
|
||||
ignore_facets => 1,
|
||||
);
|
||||
|
||||
#
|
||||
# Call all variants once to allow their first-time tasks to be done
|
||||
#
|
||||
|
||||
my $call = $compile->compileClient('ListPerson');
|
||||
$call->({ in => undef});
|
||||
|
||||
# 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' } );
|
||||
|
||||
$lite->ListPerson();
|
||||
|
||||
my $lite_xml = SOAP::Lite->new()->default_ns('http://www.example.org/benchmark/')
|
||||
->proxy('http://localhost:81/soap-wsdl-test/person.pl');
|
||||
$lite_xml->on_action( sub { 'http://www.example.org/benchmark/ListPerson' } );
|
||||
$lite_xml->outputxml(1);
|
||||
|
||||
$lite_xml->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
|
||||
XML::Simple - $XML::Simple::VERSION
|
||||
|
||||
XML::Simple uses XML::Parser as backend and SOAP::Lite with
|
||||
outputxml(1) set as SOAP client.
|
||||
XML::Parser - $XML::Parser::VERSION
|
||||
|
||||
XML::Simple is not benchmarked in run 3ff, as it is expected
|
||||
do deliver the same result.
|
||||
|
||||
Benchmark $n: Store result in private variable and destroy it
|
||||
";
|
||||
$n++;
|
||||
cmpthese $count, {
|
||||
'SOAP::Lite' => sub { my $som = $lite->call('ListPerson') },
|
||||
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
|
||||
'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) },
|
||||
'XML::Compile' => sub { my $result = $call->() },
|
||||
'XML::Simple' => sub { my $result = XMLin( $lite_xml->call('ListPerson')) },
|
||||
};
|
||||
|
||||
print "\nBenchmark $n: Push result on list\n";
|
||||
$n++;
|
||||
cmpthese $count, {
|
||||
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||
'XML::Compile' => sub { push @data, $call->() },
|
||||
'XML::Simple' => sub { push @data, XMLin( $lite_xml->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 }) },
|
||||
};
|
||||
|
||||
437
benchmark/person.xml
Normal file
437
benchmark/person.xml
Normal file
@@ -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>
|
||||
19
benchmark/person_profile.pl
Normal file
19
benchmark/person_profile.pl
Normal file
@@ -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({})
|
||||
}
|
||||
50
benchmark/person_single.pl
Normal file
50
benchmark/person_single.pl
Normal file
File diff suppressed because one or more lines are too long
274
bin/wsdl2perl.pl
Normal file
274
bin/wsdl2perl.pl
Normal file
@@ -0,0 +1,274 @@
|
||||
#!/usr/bin/perl -w
|
||||
use strict;
|
||||
use warnings;
|
||||
use Pod::Usage;
|
||||
use Getopt::Long;
|
||||
use LWP::UserAgent;
|
||||
use SOAP::WSDL::Expat::WSDLParser;
|
||||
use SOAP::WSDL::Factory::Generator;
|
||||
use Term::ReadKey;
|
||||
|
||||
my %opt = (
|
||||
url => '',
|
||||
prefix => 'My',
|
||||
attribute_prefix => undef,
|
||||
type_prefix => undef,
|
||||
element_prefix => undef,
|
||||
typemap_prefix => undef,
|
||||
interface_prefix => undef,
|
||||
server_prefix => undef,
|
||||
base_path => 'lib/',
|
||||
proxy => undef,
|
||||
generator => 'XSD',
|
||||
server => 0,
|
||||
namespace => 0,
|
||||
);
|
||||
|
||||
{ # a block just to scope "no warnings"
|
||||
no warnings qw(redefine);
|
||||
|
||||
*LWP::UserAgent::get_basic_credentials = sub {
|
||||
my ($user, $password);
|
||||
# remove user from option if called, to force prompting for a user
|
||||
# name the next time
|
||||
print "URL requires authorization.\n";
|
||||
if (not $user = delete $opt{user}) {
|
||||
print 'User name:';
|
||||
ReadMode 1;
|
||||
$user = ReadLine();
|
||||
ReadMode 0;
|
||||
chomp $user;
|
||||
};
|
||||
if (not $password = delete $opt{password}) {
|
||||
print 'Password:';
|
||||
ReadMode 2;
|
||||
$password = ReadLine;
|
||||
ReadMode 0;
|
||||
chomp $password;
|
||||
};
|
||||
return ($user, $password);
|
||||
};
|
||||
}
|
||||
|
||||
GetOptions(\%opt,
|
||||
qw(
|
||||
prefix|p=s
|
||||
attribute_prefix|a=s
|
||||
type_prefix|t=s
|
||||
element_prefix|e=s
|
||||
typemap_prefix|m=s
|
||||
interface_prefix|i=s
|
||||
server_prefix|sp=s
|
||||
base_path|b=s
|
||||
typemap_include|mi=s
|
||||
help|h
|
||||
proxy|x=s
|
||||
keep_alive
|
||||
user=s
|
||||
password=s
|
||||
generator=s
|
||||
server|s
|
||||
namespaces|n
|
||||
)
|
||||
);
|
||||
|
||||
my $url = $ARGV[0];
|
||||
|
||||
pod2usage( -exit => 1 , verbose => 2 ) if ($opt{help});
|
||||
pod2usage( -exit => 1 , verbose => 1 ) if not ($url);
|
||||
|
||||
local $ENV{HTTP_PROXY} = $opt{proxy} if $opt{proxy};
|
||||
local $ENV{HTTPS_PROXY} = $opt{proxy} if $opt{proxy};
|
||||
|
||||
my $lwp = LWP::UserAgent->new(
|
||||
$opt{keep_alive}
|
||||
? ( keep_alive => 1 )
|
||||
: ()
|
||||
);
|
||||
$lwp->env_proxy(); # get proxy from environment. Works for both http & https.
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new({
|
||||
user_agent => $lwp,
|
||||
});
|
||||
|
||||
# resolve the default prefix options
|
||||
map {
|
||||
my $opt_key = $_;
|
||||
if ( $opt_key =~ / (\w+) _prefix $/xms # relevant option
|
||||
&& !$opt{ $opt_key } # that hasn't already been explicitly set
|
||||
)
|
||||
{
|
||||
my $prefix_type = $1;
|
||||
$opt{ $opt_key } = $opt{prefix} . # My
|
||||
ucfirst( $prefix_type ) . # Typemap
|
||||
( $prefix_type eq 'server' ? '' : 's' ); # s
|
||||
}
|
||||
} keys %opt;
|
||||
|
||||
my $definitions = $parser->parse_uri( $url );
|
||||
|
||||
my %typemap = ();
|
||||
|
||||
if ($opt{typemap_include}) {
|
||||
die "$opt{typemap_include} not found " if not -f $opt{typemap_include};
|
||||
%typemap = do $opt{typemap_include};
|
||||
}
|
||||
|
||||
my $generator = SOAP::WSDL::Factory::Generator->get_generator({ type => $opt{'generator'} });
|
||||
|
||||
if (%typemap) {
|
||||
if ($generator->can('set_typemap')) {
|
||||
$generator->set_typemap( \%typemap );
|
||||
}
|
||||
else {
|
||||
warn "Typemap snippet given, but generator does not support it\n";
|
||||
}
|
||||
};
|
||||
|
||||
$generator->set_attribute_prefix( $opt{ attribute_prefix })
|
||||
if $generator->can('set_attribute_prefix');
|
||||
$generator->set_type_prefix( $opt{ type_prefix })
|
||||
if $generator->can('set_type_prefix');
|
||||
$generator->set_typemap_prefix( $opt{ typemap_prefix })
|
||||
if $generator->can('set_typemap_prefix');
|
||||
$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...
|
||||
$generator->generate();
|
||||
$generator->generate_interface() if ! $opt{server};
|
||||
$generator->generate_server() if $opt{server};
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
wsdl2perl.pl - create perl bindings for SOAP webservices.
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
wsdl2perl.pl -t TYPE_PREFIX -e ELEMENT_PREFIX -m TYPEMAP_PREFIX \
|
||||
-i INTERFACE_PREFIX -b BASE_DIR URL
|
||||
|
||||
=head1 OPTIONS
|
||||
|
||||
NAME SHORT DESCRITPION
|
||||
----------------------------------------------------------------------------
|
||||
prefix p Prefix for all generated classes. If you set "-p=Foo",
|
||||
you will get "FooAttributes", "FooTypes",
|
||||
"FooElements" and so on.
|
||||
attribute_prefix a Prefix for XML attribute classes.
|
||||
Default: MyAttributes
|
||||
type_prefix t Prefix for type classes.
|
||||
Default: MyTypes
|
||||
element_prefix e Prefix for element classes.
|
||||
Default: MyElements
|
||||
typemap_prefix m Prefix for typemap classes.
|
||||
Default: MyTypemaps
|
||||
interface_prefix i Prefix for interface classes.
|
||||
Default: MyInterfaces
|
||||
server_prefix sp Prefix for server classes.
|
||||
Default: MyServer
|
||||
base_path b Path to create classes in.
|
||||
Default: .
|
||||
typemap_include mi File to include in typemap. Must eval() to a valid
|
||||
perl hash (not a hash ref !).
|
||||
proxy x HTTP(S) proxy to use (if any). wsdl2perl will also
|
||||
use the proxy settings specified via the HTTP_PROXY
|
||||
and HTTPS_PROXY environment variables.
|
||||
keep_alive Use http keep_alive.
|
||||
user Username for HTTP authentication
|
||||
password Password. wsdl2perl will prompt if not given.
|
||||
generator g Generator to use.
|
||||
Default: XSD
|
||||
server s Generate a server interface (currently only CGI
|
||||
supported)
|
||||
help h Show help content
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Generates a interface class for a SOAP web service described by a WSDL
|
||||
definition.
|
||||
|
||||
The following classes are created:
|
||||
|
||||
=over
|
||||
|
||||
=item * A interface class for every SOAP port in service
|
||||
|
||||
Interface classes are what you will mainly deal with: They provide a 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
|
||||
|
||||
Typemaps are used internally by SOAP::WSDL for parsing the SOAP message into
|
||||
object trees.
|
||||
|
||||
If the WSDL definition is incomplete, you may need to add some lines to
|
||||
your typemap. Especially definitions for faults are sometimes left out.
|
||||
|
||||
Additional typemap content may be included by passing a file name as
|
||||
typemap_include (mi) option.
|
||||
|
||||
=item * A type class for every element, complexType or simpleType definition
|
||||
|
||||
You may need to write additional type classes if your WSDL is incomplete.
|
||||
|
||||
For writing your own lib classes, see L<SOAP::WSDL::XSD::Typelib::Element>,
|
||||
L<SOAP::WSDL::XSD::Typelib::ComplexType>
|
||||
and L<SOAP::WSDL::XSD::Typelib::SimpleType>.
|
||||
|
||||
=back
|
||||
|
||||
=head1 TROUBLESHOOTING
|
||||
|
||||
=head2 Accessing HTTPS URLs
|
||||
|
||||
You need Crypt::SSLeay installed for accessing HTTPS URLs.
|
||||
|
||||
=head2 Accessing protected documents
|
||||
|
||||
Use the -u option for specifying the user name. You will be prompted for a
|
||||
password.
|
||||
|
||||
Alternatively, you may specify a passowrd with --password on the command
|
||||
line.
|
||||
|
||||
=head2 Accessing documents protected by NTLM authentication
|
||||
|
||||
Set the --keep_alive option.
|
||||
|
||||
Note that accessing documents protected by NTLM authentication is currently
|
||||
untested, because I have no access to a system using NTLM authentication.
|
||||
If you try it, I would be glad if you could just drop me a note about
|
||||
success or failure.
|
||||
|
||||
=head1 LICENSE
|
||||
|
||||
Copyright 2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=cut
|
||||
57
example/cgi-bin/helloworld.pl
Executable file
57
example/cgi-bin/helloworld.pl
Executable file
@@ -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
|
||||
|
||||
84
example/cgi-bin/person.pl
Executable file
84
example/cgi-bin/person.pl
Executable file
@@ -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 },
|
||||
],
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
47
example/fortune.pl
Normal file
47
example/fortune.pl
Normal file
@@ -0,0 +1,47 @@
|
||||
# Accessing the fortune cookie service at
|
||||
# www.fullerdata.com/FortuneCookie/FortuneCookie.asmx
|
||||
#
|
||||
# I have no connection to www.fullerdata.com
|
||||
#
|
||||
# Use this script at your own risk.
|
||||
|
||||
# Run before:
|
||||
# D:\Eigene Dateien\Martin\SOAP-WSDL\trunk>perl -I../lib wsdl2perl.pl "file:///D:/
|
||||
# Eigene Dateien/Martin/SOAP-WSDL/trunk/bin/FortuneCookie.xml"
|
||||
|
||||
use lib 'lib/';
|
||||
use MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||
my $cookieService = MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap->new();
|
||||
|
||||
my $cookie;
|
||||
$cookie = $cookieService->GetFortuneCookie()
|
||||
or die "$cookie";
|
||||
|
||||
print $cookie->get_GetFortuneCookieResult()->get_value, "\n\n";
|
||||
|
||||
$cookie = $cookieService->GetSpecificCookie({ index => 23 })
|
||||
or die "$cookie";
|
||||
|
||||
print $cookie->get_GetSpecificCookieResult(), "\n";
|
||||
|
||||
# print $cookie;
|
||||
|
||||
|
||||
=for demo:
|
||||
|
||||
# the same in SOAP lite (second call)
|
||||
#
|
||||
|
||||
use SOAP::Lite;
|
||||
|
||||
my $lite = SOAP::Lite->new()->on_action(sub { join '/', @_ } )
|
||||
->proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx');
|
||||
|
||||
$lite->call(
|
||||
SOAP::Data->name('GetSpecificCookie')
|
||||
->attr({ 'xmlns', 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }),
|
||||
SOAP::Data->name('index')->value(23)
|
||||
);
|
||||
|
||||
die $soap->message() if ($soap->fault());
|
||||
print $soap->result();
|
||||
29
example/genericbarcode.pl
Normal file
29
example/genericbarcode.pl
Normal file
@@ -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;
|
||||
24
example/hello.pl
Normal file
24
example/hello.pl
Normal file
@@ -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";
|
||||
|
||||
25
example/hello_compile.pl
Normal file
25
example/hello_compile.pl
Normal file
@@ -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";
|
||||
29
example/hello_lite.pl
Normal file
29
example/hello_lite.pl
Normal file
@@ -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";
|
||||
|
||||
87
example/lib/MyElements/CountCookies.pm
Normal file
87
example/lib/MyElements/CountCookies.pm
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
package MyElements::CountCookies;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('CountCookies');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
# There's no variety - empty complexType
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
__PACKAGE__->_factory();
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::CountCookies
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
CountCookies from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::CountCookies->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
,
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
119
example/lib/MyElements/CountCookiesResponse.pm
Normal file
119
example/lib/MyElements/CountCookiesResponse.pm
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
package MyElements::CountCookiesResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('CountCookiesResponse');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw( CountCookiesResult
|
||||
|
||||
) ],
|
||||
{
|
||||
'CountCookiesResult' => \%CountCookiesResult_of,
|
||||
},
|
||||
{
|
||||
'CountCookiesResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
},
|
||||
{
|
||||
|
||||
'CountCookiesResult' => 'CountCookiesResult',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::CountCookiesResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
CountCookiesResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
=item * CountCookiesResult
|
||||
|
||||
$element->set_CountCookiesResult($data);
|
||||
$element->get_CountCookiesResult();
|
||||
|
||||
|
||||
|
||||
|
||||
=back
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::CountCookiesResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
CountCookiesResult => $some_value, # int
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
104
example/lib/MyElements/GenerateBarCode.pm
Normal file
104
example/lib/MyElements/GenerateBarCode.pm
Normal file
@@ -0,0 +1,104 @@
|
||||
package MyElements::GenerateBarCode;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/' }
|
||||
|
||||
__PACKAGE__->__set_name('GenerateBarCode');
|
||||
__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 %BarCodeParam_of :ATTR(:get<BarCodeParam>);
|
||||
my %BarCodeText_of :ATTR(:get<BarCodeText>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
BarCodeParam
|
||||
BarCodeText
|
||||
) ],
|
||||
{
|
||||
BarCodeParam => \%BarCodeParam_of,
|
||||
BarCodeText => \%BarCodeText_of,
|
||||
},
|
||||
{
|
||||
BarCodeParam => 'MyTypes::BarCodeData',
|
||||
BarCodeText => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
1;
|
||||
|
||||
# __END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GenerateBarCode
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GenerateBarCode from the namespace http://www.webservicex.net/.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GenerateBarCode->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
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
|
||||
|
||||
=cut
|
||||
|
||||
81
example/lib/MyElements/GenerateBarCodeResponse.pm
Normal file
81
example/lib/MyElements/GenerateBarCodeResponse.pm
Normal file
@@ -0,0 +1,81 @@
|
||||
package MyElements::GenerateBarCodeResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/' }
|
||||
|
||||
__PACKAGE__->__set_name('GenerateBarCodeResponse');
|
||||
__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 %GenerateBarCodeResult_of :ATTR(:get<GenerateBarCodeResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GenerateBarCodeResult
|
||||
) ],
|
||||
{
|
||||
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
||||
},
|
||||
{
|
||||
GenerateBarCodeResult => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
1;
|
||||
|
||||
# __END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GenerateBarCodeResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GenerateBarCodeResponse from the namespace http://www.webservicex.net/.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GenerateBarCodeResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GenerateBarCodeResult => $some_value, # base64Binary
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
81
example/lib/MyElements/GetCitiesByCountry.pm
Normal file
81
example/lib/MyElements/GetCitiesByCountry.pm
Normal file
@@ -0,0 +1,81 @@
|
||||
package MyElements::GetCitiesByCountry;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.webserviceX.NET' }
|
||||
|
||||
__PACKAGE__->__set_name('GetCitiesByCountry');
|
||||
__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 %CountryName_of :ATTR(:get<CountryName>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
CountryName
|
||||
) ],
|
||||
{
|
||||
CountryName => \%CountryName_of,
|
||||
},
|
||||
{
|
||||
CountryName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
1;
|
||||
|
||||
# __END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetCitiesByCountry
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetCitiesByCountry from the namespace http://www.webserviceX.NET.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetCitiesByCountry->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
CountryName => $some_value, # string
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
81
example/lib/MyElements/GetCitiesByCountryResponse.pm
Normal file
81
example/lib/MyElements/GetCitiesByCountryResponse.pm
Normal file
@@ -0,0 +1,81 @@
|
||||
package MyElements::GetCitiesByCountryResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.webserviceX.NET' }
|
||||
|
||||
__PACKAGE__->__set_name('GetCitiesByCountryResponse');
|
||||
__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 %GetCitiesByCountryResult_of :ATTR(:get<GetCitiesByCountryResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GetCitiesByCountryResult
|
||||
) ],
|
||||
{
|
||||
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
||||
},
|
||||
{
|
||||
GetCitiesByCountryResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
1;
|
||||
|
||||
# __END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetCitiesByCountryResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetCitiesByCountryResponse from the namespace http://www.webserviceX.NET.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetCitiesByCountryResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetCitiesByCountryResult => $some_value, # string
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
87
example/lib/MyElements/GetFortuneCookie.pm
Normal file
87
example/lib/MyElements/GetFortuneCookie.pm
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
package MyElements::GetFortuneCookie;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('GetFortuneCookie');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
# There's no variety - empty complexType
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
__PACKAGE__->_factory();
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetFortuneCookie
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetFortuneCookie from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetFortuneCookie->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
,
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
119
example/lib/MyElements/GetFortuneCookieResponse.pm
Normal file
119
example/lib/MyElements/GetFortuneCookieResponse.pm
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
package MyElements::GetFortuneCookieResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('GetFortuneCookieResponse');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw( GetFortuneCookieResult
|
||||
|
||||
) ],
|
||||
{
|
||||
'GetFortuneCookieResult' => \%GetFortuneCookieResult_of,
|
||||
},
|
||||
{
|
||||
'GetFortuneCookieResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
},
|
||||
{
|
||||
|
||||
'GetFortuneCookieResult' => 'GetFortuneCookieResult',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetFortuneCookieResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetFortuneCookieResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
=item * GetFortuneCookieResult
|
||||
|
||||
$element->set_GetFortuneCookieResult($data);
|
||||
$element->get_GetFortuneCookieResult();
|
||||
|
||||
|
||||
|
||||
|
||||
=back
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetFortuneCookieResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetFortuneCookieResult => $some_value, # string
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
119
example/lib/MyElements/GetSpecificCookie.pm
Normal file
119
example/lib/MyElements/GetSpecificCookie.pm
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
package MyElements::GetSpecificCookie;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('GetSpecificCookie');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %index_of :ATTR(:get<index>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw( index
|
||||
|
||||
) ],
|
||||
{
|
||||
'index' => \%index_of,
|
||||
},
|
||||
{
|
||||
'index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
},
|
||||
{
|
||||
|
||||
'index' => 'index',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetSpecificCookie
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetSpecificCookie from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
=item * index
|
||||
|
||||
$element->set_index($data);
|
||||
$element->get_index();
|
||||
|
||||
|
||||
|
||||
|
||||
=back
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetSpecificCookie->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
index => $some_value, # int
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
119
example/lib/MyElements/GetSpecificCookieResponse.pm
Normal file
119
example/lib/MyElements/GetSpecificCookieResponse.pm
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
package MyElements::GetSpecificCookieResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('GetSpecificCookieResponse');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw( GetSpecificCookieResult
|
||||
|
||||
) ],
|
||||
{
|
||||
'GetSpecificCookieResult' => \%GetSpecificCookieResult_of,
|
||||
},
|
||||
{
|
||||
'GetSpecificCookieResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
},
|
||||
{
|
||||
|
||||
'GetSpecificCookieResult' => 'GetSpecificCookieResult',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetSpecificCookieResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetSpecificCookieResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
=item * GetSpecificCookieResult
|
||||
|
||||
$element->set_GetSpecificCookieResult($data);
|
||||
$element->get_GetSpecificCookieResult();
|
||||
|
||||
|
||||
|
||||
|
||||
=back
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetSpecificCookieResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetSpecificCookieResult => $some_value, # string
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
86
example/lib/MyElements/GetWeather.pm
Normal file
86
example/lib/MyElements/GetWeather.pm
Normal file
@@ -0,0 +1,86 @@
|
||||
package MyElements::GetWeather;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.webserviceX.NET' }
|
||||
|
||||
__PACKAGE__->__set_name('GetWeather');
|
||||
__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 %CityName_of :ATTR(:get<CityName>);
|
||||
my %CountryName_of :ATTR(:get<CountryName>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
CityName
|
||||
CountryName
|
||||
) ],
|
||||
{
|
||||
CityName => \%CityName_of,
|
||||
CountryName => \%CountryName_of,
|
||||
},
|
||||
{
|
||||
CityName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
CountryName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
1;
|
||||
|
||||
# __END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetWeather
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetWeather from the namespace http://www.webserviceX.NET.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetWeather->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
CityName => $some_value, # string
|
||||
CountryName => $some_value, # string
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
81
example/lib/MyElements/GetWeatherResponse.pm
Normal file
81
example/lib/MyElements/GetWeatherResponse.pm
Normal file
@@ -0,0 +1,81 @@
|
||||
package MyElements::GetWeatherResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.webserviceX.NET' }
|
||||
|
||||
__PACKAGE__->__set_name('GetWeatherResponse');
|
||||
__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 %GetWeatherResult_of :ATTR(:get<GetWeatherResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GetWeatherResult
|
||||
) ],
|
||||
{
|
||||
GetWeatherResult => \%GetWeatherResult_of,
|
||||
},
|
||||
{
|
||||
GetWeatherResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
1;
|
||||
|
||||
# __END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::GetWeatherResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
GetWeatherResponse from the namespace http://www.webserviceX.NET.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::GetWeatherResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetWeatherResult => $some_value, # string
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
111
example/lib/MyElements/ListPerson.pm
Normal file
111
example/lib/MyElements/ListPerson.pm
Normal file
@@ -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
|
||||
|
||||
113
example/lib/MyElements/ListPersonResponse.pm
Normal file
113
example/lib/MyElements/ListPersonResponse.pm
Normal file
@@ -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
|
||||
|
||||
57
example/lib/MyElements/int.pm
Normal file
57
example/lib/MyElements/int.pm
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
package MyElements::int;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('int');
|
||||
__PACKAGE__->__set_nillable();
|
||||
__PACKAGE__->__set_minOccurs();
|
||||
__PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::int
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::int
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
int from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::int->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
$some_value, # int
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
87
example/lib/MyElements/readNodeCount.pm
Normal file
87
example/lib/MyElements/readNodeCount.pm
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
package MyElements::readNodeCount;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('readNodeCount');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
# There's no variety - empty complexType
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
__PACKAGE__->_factory();
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::readNodeCount
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
readNodeCount from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::readNodeCount->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
,
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
119
example/lib/MyElements/readNodeCountResponse.pm
Normal file
119
example/lib/MyElements/readNodeCountResponse.pm
Normal file
@@ -0,0 +1,119 @@
|
||||
|
||||
package MyElements::readNodeCountResponse;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('readNodeCountResponse');
|
||||
__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
|
||||
);
|
||||
|
||||
our $XML_ATTRIBUTE_CLASS;
|
||||
undef $XML_ATTRIBUTE_CLASS;
|
||||
|
||||
sub __get_attr_class {
|
||||
return $XML_ATTRIBUTE_CLASS;
|
||||
}
|
||||
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw( readNodeCountResult
|
||||
|
||||
) ],
|
||||
{
|
||||
'readNodeCountResult' => \%readNodeCountResult_of,
|
||||
},
|
||||
{
|
||||
'readNodeCountResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
},
|
||||
{
|
||||
|
||||
'readNodeCountResult' => 'readNodeCountResult',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::readNodeCountResponse
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
readNodeCountResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
=over
|
||||
|
||||
=item * readNodeCountResult
|
||||
|
||||
$element->set_readNodeCountResult($data);
|
||||
$element->get_readNodeCountResult();
|
||||
|
||||
|
||||
|
||||
|
||||
=back
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::readNodeCountResponse->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
readNodeCountResult => $some_value, # int
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
86
example/lib/MyElements/sayHello.pm
Normal file
86
example/lib/MyElements/sayHello.pm
Normal file
@@ -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
|
||||
|
||||
81
example/lib/MyElements/sayHelloResponse.pm
Normal file
81
example/lib/MyElements/sayHelloResponse.pm
Normal file
@@ -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
|
||||
|
||||
57
example/lib/MyElements/string.pm
Normal file
57
example/lib/MyElements/string.pm
Normal file
@@ -0,0 +1,57 @@
|
||||
|
||||
package MyElements::string;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
|
||||
|
||||
__PACKAGE__->__set_name('string');
|
||||
__PACKAGE__->__set_nillable(1);
|
||||
__PACKAGE__->__set_minOccurs();
|
||||
__PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyElements::string
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
string from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
my $element = MyElements::string->new($data);
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
$some_value, # string
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
135
example/lib/MyInterfaces/BarCode/BarCodeSoap.pm
Normal file
135
example/lib/MyInterfaces/BarCode/BarCodeSoap.pm
Normal file
@@ -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
|
||||
@@ -0,0 +1,234 @@
|
||||
package MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||
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::FullerData_x0020_Fortune_x0020_Cookie
|
||||
if not MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie->can('get_class');
|
||||
|
||||
sub START {
|
||||
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
|
||||
$_[0]->set_class_resolver('MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie')
|
||||
if not $_[2]->{class_resolver};
|
||||
|
||||
$_[0]->set_prefix($_[2]->{use_prefix}) if exists $_[2]->{use_prefix};
|
||||
}
|
||||
|
||||
sub readNodeCount {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "readNodeCount must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'readNodeCount',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
|
||||
encodingStyle => '',
|
||||
parts => [qw( MyElements::readNodeCount )],
|
||||
},
|
||||
header => {
|
||||
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
|
||||
sub GetFortuneCookie {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetFortuneCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetFortuneCookie',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
|
||||
encodingStyle => '',
|
||||
parts => [qw( MyElements::GetFortuneCookie )],
|
||||
},
|
||||
header => {
|
||||
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
|
||||
sub CountCookies {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "CountCookies must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'CountCookies',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
|
||||
encodingStyle => '',
|
||||
parts => [qw( MyElements::CountCookies )],
|
||||
},
|
||||
header => {
|
||||
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
|
||||
sub GetSpecificCookie {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetSpecificCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetSpecificCookie',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
|
||||
encodingStyle => '',
|
||||
parts => [qw( MyElements::GetSpecificCookie )],
|
||||
},
|
||||
header => {
|
||||
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
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
|
||||
|
||||
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
||||
located at http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
=head1 SERVICE FullerData_x0020_Fortune_x0020_Cookie
|
||||
|
||||
Simple XML-based fortune cookie
|
||||
|
||||
=head2 Port FullerData_x0020_Fortune_x0020_CookieSoap
|
||||
|
||||
|
||||
|
||||
=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.
|
||||
|
||||
List items (i.e. multiple occurences) are not displayed in the synopsis.
|
||||
You may generally pass a list ref of hash refs (or objects) instead of a hash
|
||||
ref - this may result in invalid XML if used improperly, though. Note that
|
||||
SOAP::WSDL always expects list references at maximum depth position.
|
||||
|
||||
XML attributes are not displayed in this synopsis and cannot be set using
|
||||
hash refs. See the respective class' documentation for additional information.
|
||||
|
||||
|
||||
|
||||
=head3 readNodeCount
|
||||
|
||||
Display the number of nodes specified in fortune XML document
|
||||
|
||||
Returns a L<MyElements::readNodeCountResponse|MyElements::readNodeCountResponse> object.
|
||||
|
||||
$response = $interface->readNodeCount(,,
|
||||
);
|
||||
|
||||
=head3 GetFortuneCookie
|
||||
|
||||
Get a random fortune cookie from the XML document
|
||||
|
||||
Returns a L<MyElements::GetFortuneCookieResponse|MyElements::GetFortuneCookieResponse> object.
|
||||
|
||||
$response = $interface->GetFortuneCookie(,,
|
||||
);
|
||||
|
||||
=head3 CountCookies
|
||||
|
||||
Count the actual number of nodes in the XML document of fortunes
|
||||
|
||||
Returns a L<MyElements::CountCookiesResponse|MyElements::CountCookiesResponse> object.
|
||||
|
||||
$response = $interface->CountCookies(,,
|
||||
);
|
||||
|
||||
=head3 GetSpecificCookie
|
||||
|
||||
Get a specific cookie by the XML node number
|
||||
|
||||
Returns a L<MyElements::GetSpecificCookieResponse|MyElements::GetSpecificCookieResponse> object.
|
||||
|
||||
$response = $interface->GetSpecificCookie( {
|
||||
index => $some_value, # int
|
||||
},,
|
||||
);
|
||||
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on Wed Dec 3 22:05:20 2008
|
||||
|
||||
=cut
|
||||
150
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
Normal file
150
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
Normal file
@@ -0,0 +1,150 @@
|
||||
package MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||
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::GlobalWeather
|
||||
if not MyTypemaps::GlobalWeather->can('get_class');
|
||||
|
||||
sub START {
|
||||
$_[0]->set_proxy('http://www.webservicex.net/globalweather.asmx') if not $_[2]->{proxy};
|
||||
$_[0]->set_class_resolver('MyTypemaps::GlobalWeather')
|
||||
if not $_[2]->{class_resolver};
|
||||
}
|
||||
|
||||
sub GetWeather {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetWeather must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetWeather',
|
||||
soap_action => 'http://www.webserviceX.NET/GetWeather',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
encodingStyle => '',
|
||||
parts => [qw( MyElements::GetWeather )],
|
||||
},
|
||||
header => {
|
||||
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
sub GetCitiesByCountry {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetCitiesByCountry must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetCitiesByCountry',
|
||||
soap_action => 'http://www.webserviceX.NET/GetCitiesByCountry',
|
||||
style => 'document',
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
encodingStyle => '',
|
||||
parts => [qw( MyElements::GetCitiesByCountry )],
|
||||
},
|
||||
header => {
|
||||
|
||||
},
|
||||
headerfault => {
|
||||
|
||||
}
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
||||
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
|
||||
|
||||
SOAP Interface for the GlobalWeather web service
|
||||
located at http://www.webservicex.net/globalweather.asmx.
|
||||
|
||||
=head1 SERVICE GlobalWeather
|
||||
|
||||
|
||||
|
||||
=head2 Port GlobalWeatherSoap
|
||||
|
||||
|
||||
|
||||
=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 GetWeather
|
||||
|
||||
Get weather report for all major cities around the world.
|
||||
|
||||
$interface->GetWeather( {
|
||||
CityName => $some_value, # string
|
||||
CountryName => $some_value, # string
|
||||
},,
|
||||
);
|
||||
|
||||
=head3 GetCitiesByCountry
|
||||
|
||||
Get all major cities by country name(full / part).
|
||||
|
||||
$interface->GetCitiesByCountry( {
|
||||
CountryName => $some_value, # string
|
||||
},,
|
||||
);
|
||||
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on Sun Dec 16 20:05:01 2007
|
||||
|
||||
=pod
|
||||
113
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
Normal file
113
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
Normal file
@@ -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
|
||||
146
example/lib/MyInterfaces/TestService/TestPort.pm
Normal file
146
example/lib/MyInterfaces/TestService/TestPort.pm
Normal file
@@ -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
|
||||
112
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
Normal file
112
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
Normal file
@@ -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
|
||||
145
example/lib/MyServer/TestService/TestPort.pm
Normal file
145
example/lib/MyServer/TestService/TestPort.pm
Normal file
@@ -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
|
||||
61
example/lib/MyTypemaps/BarCode.pm
Normal file
61
example/lib/MyTypemaps/BarCode.pm
Normal file
@@ -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
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
|
||||
package MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our $typemap_1 = {
|
||||
'GetFortuneCookie' => 'MyElements::GetFortuneCookie',
|
||||
'CountCookiesResponse/CountCookiesResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||
'readNodeCountResponse/readNodeCountResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'CountCookiesResponse' => 'MyElements::CountCookiesResponse',
|
||||
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetSpecificCookieResponse' => 'MyElements::GetSpecificCookieResponse',
|
||||
'GetFortuneCookieResponse' => 'MyElements::GetFortuneCookieResponse',
|
||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||
'GetSpecificCookie' => 'MyElements::GetSpecificCookie',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||
'CountCookies' => 'MyElements::CountCookies',
|
||||
'GetSpecificCookie/index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetFortuneCookieResponse/GetFortuneCookieResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetSpecificCookieResponse/GetSpecificCookieResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'readNodeCount' => 'MyElements::readNodeCount',
|
||||
'readNodeCountResponse' => 'MyElements::readNodeCountResponse'
|
||||
};
|
||||
;
|
||||
|
||||
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__
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie - typemap for FullerData_x0020_Fortune_x0020_Cookie
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||
|
||||
=cut
|
||||
|
||||
48
example/lib/MyTypemaps/GlobalWeather.pm
Normal file
48
example/lib/MyTypemaps/GlobalWeather.pm
Normal file
@@ -0,0 +1,48 @@
|
||||
package MyTypemaps::GlobalWeather;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our $typemap_1 = {
|
||||
'GetWeatherResponse/GetWeatherResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetWeather' => 'MyElements::GetWeather',
|
||||
'GetCitiesByCountryResponse/GetCitiesByCountryResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||
'GetWeatherResponse' => 'MyElements::GetWeatherResponse',
|
||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||
'GetWeather/CityName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetCitiesByCountry' => 'MyElements::GetCitiesByCountry',
|
||||
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetCitiesByCountry/CountryName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetWeather/CountryName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||
'GetCitiesByCountryResponse' => 'MyElements::GetCitiesByCountryResponse'
|
||||
};
|
||||
;
|
||||
|
||||
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::GlobalWeather; - typemap for ::GlobalWeather;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||
|
||||
=cut
|
||||
|
||||
44
example/lib/MyTypemaps/HelloWorld.pm
Normal file
44
example/lib/MyTypemaps/HelloWorld.pm
Normal file
@@ -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
|
||||
|
||||
92
example/lib/MyTypemaps/TestService.pm
Normal file
92
example/lib/MyTypemaps/TestService.pm
Normal file
@@ -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
|
||||
|
||||
98
example/lib/MyTypes/Address.pm
Normal file
98
example/lib/MyTypes/Address.pm
Normal file
@@ -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
|
||||
|
||||
71
example/lib/MyTypes/ArrayOfContract.pm
Normal file
71
example/lib/MyTypes/ArrayOfContract.pm
Normal file
@@ -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
|
||||
|
||||
98
example/lib/MyTypes/ArrayOfPerson.pm
Normal file
98
example/lib/MyTypes/ArrayOfPerson.pm
Normal file
@@ -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
|
||||
|
||||
164
example/lib/MyTypes/BarCodeData.pm
Normal file
164
example/lib/MyTypes/BarCodeData.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/BarcodeOption.pm
Normal file
56
example/lib/MyTypes/BarcodeOption.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/BarcodeType.pm
Normal file
56
example/lib/MyTypes/BarcodeType.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/CheckSumMethod.pm
Normal file
56
example/lib/MyTypes/CheckSumMethod.pm
Normal file
@@ -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
|
||||
|
||||
74
example/lib/MyTypes/Contract.pm
Normal file
74
example/lib/MyTypes/Contract.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/ImageFormats.pm
Normal file
56
example/lib/MyTypes/ImageFormats.pm
Normal file
@@ -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
|
||||
|
||||
131
example/lib/MyTypes/Person.pm
Normal file
131
example/lib/MyTypes/Person.pm
Normal file
@@ -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
|
||||
|
||||
68
example/lib/MyTypes/PersonID.pm
Normal file
68
example/lib/MyTypes/PersonID.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/PhoneNumber.pm
Normal file
56
example/lib/MyTypes/PhoneNumber.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/ShowTextPosition.pm
Normal file
56
example/lib/MyTypes/ShowTextPosition.pm
Normal file
@@ -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
|
||||
|
||||
74
example/lib/MyTypes/test2.pm
Normal file
74
example/lib/MyTypes/test2.pm
Normal file
@@ -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
|
||||
|
||||
68
example/lib/MyTypes/testExtended.pm
Normal file
68
example/lib/MyTypes/testExtended.pm
Normal file
@@ -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
|
||||
|
||||
12
example/person.pl
Normal file
12
example/person.pl
Normal file
@@ -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";
|
||||
|
||||
21
example/person_compile.pl
Normal file
21
example/person_compile.pl
Normal file
@@ -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";
|
||||
26
example/visitor/visitor.pl
Normal file
26
example/visitor/visitor.pl
Normal file
@@ -0,0 +1,26 @@
|
||||
package PersonVisitor;
|
||||
use Class::Std; # handles all basic stuff like constructors etc.
|
||||
|
||||
sub visit_Person {
|
||||
my ( $self, $object ) = @_;
|
||||
print "Person name is ", $object->get_name(), "\n";
|
||||
}
|
||||
|
||||
package Person;
|
||||
use Class::Std;
|
||||
my %name : ATTR(:name<name> :default<anonymous>);
|
||||
|
||||
sub accept { $_[1]->visit_Person( $_[0] ) }
|
||||
|
||||
package main;
|
||||
my @person_from = ();
|
||||
for (qw(Gamma Helm Johnson Vlissides)) {
|
||||
push @person_from, Person->new( { name => $_ } );
|
||||
}
|
||||
|
||||
my $visitor = PersonVisitor->new();
|
||||
for (@person_from) {
|
||||
$_->accept($visitor);
|
||||
}
|
||||
|
||||
|
||||
22
example/weather.pl
Normal file
22
example/weather.pl
Normal file
@@ -0,0 +1,22 @@
|
||||
# Accessing the globalweather service at
|
||||
# www.webservicex.net/GlobalWeather/GlobalWeather.asmx
|
||||
#
|
||||
# Note that the GlobalWeather web service returns a (quoted) XML structure -
|
||||
# don't be surprised by the response's format.
|
||||
#
|
||||
# I have no connection to www.webservicex.net
|
||||
# Use this script at your own risk.
|
||||
#
|
||||
# This script demonstrates the use of a interface generated by wsdl2perl.pl
|
||||
|
||||
use lib 'lib/';
|
||||
use MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||
my $weather = MyInterfaces::GlobalWeather::GlobalWeatherSoap->new();
|
||||
my $result = $weather->GetWeather({ CountryName => 'Germany', CityName => 'Munich' });
|
||||
|
||||
# boolean comparison overloaded
|
||||
die $result->get_faultstring()->get_value() if not ($result);
|
||||
|
||||
# The result is a XML string
|
||||
# use get_value to avoid automatic entity encoding
|
||||
print $result->get_GetWeatherResult()->get_value , "\n";
|
||||
43
example/weather_wsdl.pl
Normal file
43
example/weather_wsdl.pl
Normal file
@@ -0,0 +1,43 @@
|
||||
# Accessing the globalweather service at
|
||||
# www.webservicex.net/GlobalWeather/GlobalWeather.asmx
|
||||
#
|
||||
# Note that the GlobalWeather web service returns a (quoted) XML structure -
|
||||
# don't be surprised by the response's format.
|
||||
#
|
||||
# I have no connection to www.webservicex.net
|
||||
# Use this script at your own risk.
|
||||
#
|
||||
# This script demonstrates the use of SOAP::WSDL in SOAP::Lite style.
|
||||
|
||||
use lib 'lib/';
|
||||
use lib '../lib';
|
||||
use File::Basename qw(dirname);
|
||||
use File::Spec;
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__);
|
||||
|
||||
# SOAP::WSDL variant
|
||||
use SOAP::WSDL;
|
||||
my $soap = SOAP::WSDL->new();
|
||||
my $som = $soap->wsdl("file:///$path/wsdl/globalweather.xml")
|
||||
->call('GetWeather', GetWeather =>
|
||||
{ CountryName => 'Germany', CityName => 'Munich' }
|
||||
);
|
||||
|
||||
die "Error" if $som->fault();
|
||||
print $som->result();
|
||||
|
||||
# SOAP::Lite variant:
|
||||
# Note that you have to look both the proxy and the xmlns attribute
|
||||
# set on the GetWeather SOAP::Data object from the WSDL.
|
||||
|
||||
use SOAP::Lite +trace;
|
||||
$soap = SOAP::Lite->new()->on_action( sub { join'/', @_ } )
|
||||
->proxy("http://www.webservicex.net/globalweather.asmx"); # from WSDL
|
||||
$som = $soap->call(
|
||||
SOAP::Data->name('GetWeather')
|
||||
->attr({ xmlns => 'http://www.webserviceX.NET' }), # from WSDL
|
||||
SOAP::Data->name('CountryName')->value('Germany'),
|
||||
SOAP::Data->name('CityName')->value('Munich')
|
||||
);
|
||||
die "Error" if $som->fault();
|
||||
print $som->result();
|
||||
95
example/wsdl/11_helloworld.wsdl
Normal file
95
example/wsdl/11_helloworld.wsdl
Normal file
@@ -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>
|
||||
|
||||
308
example/wsdl/FortuneCookie.xml
Normal file
308
example/wsdl/FortuneCookie.xml
Normal file
@@ -0,0 +1,308 @@
|
||||
<?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.fullerdata.com/FortuneCookie/FortuneCookie.asmx" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
|
||||
<wsdl:types>
|
||||
<s:schema elementFormDefault="qualified" targetNamespace="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx">
|
||||
<s:element name="readNodeCount">
|
||||
<s:complexType />
|
||||
</s:element>
|
||||
<s:element name="readNodeCountResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="readNodeCountResult" type="s:int" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetFortuneCookie">
|
||||
<s:complexType />
|
||||
</s:element>
|
||||
<s:element name="GetFortuneCookieResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetFortuneCookieResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="CountCookies">
|
||||
<s:complexType />
|
||||
</s:element>
|
||||
<s:element name="CountCookiesResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="CountCookiesResult" type="s:int" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetSpecificCookie">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="1" maxOccurs="1" name="index" type="s:int" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetSpecificCookieResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetSpecificCookieResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="int" type="s:int" />
|
||||
<s:element name="string" nillable="true" type="s:string" />
|
||||
</s:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="readNodeCountSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:readNodeCount" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="readNodeCountSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:readNodeCountResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetFortuneCookieSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetFortuneCookie" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetFortuneCookieSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetFortuneCookieResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="CountCookiesSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:CountCookies" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="CountCookiesSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:CountCookiesResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSpecificCookieSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetSpecificCookie" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSpecificCookieSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetSpecificCookieResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="readNodeCountHttpGetIn" />
|
||||
<wsdl:message name="readNodeCountHttpGetOut">
|
||||
<wsdl:part name="Body" element="tns:int" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetFortuneCookieHttpGetIn" />
|
||||
<wsdl:message name="GetFortuneCookieHttpGetOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="CountCookiesHttpGetIn" />
|
||||
<wsdl:message name="CountCookiesHttpGetOut">
|
||||
<wsdl:part name="Body" element="tns:int" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSpecificCookieHttpGetIn">
|
||||
<wsdl:part name="index" type="s:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSpecificCookieHttpGetOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="readNodeCountHttpPostIn" />
|
||||
<wsdl:message name="readNodeCountHttpPostOut">
|
||||
<wsdl:part name="Body" element="tns:int" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetFortuneCookieHttpPostIn" />
|
||||
<wsdl:message name="GetFortuneCookieHttpPostOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="CountCookiesHttpPostIn" />
|
||||
<wsdl:message name="CountCookiesHttpPostOut">
|
||||
<wsdl:part name="Body" element="tns:int" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSpecificCookieHttpPostIn">
|
||||
<wsdl:part name="index" type="s:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetSpecificCookieHttpPostOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="FullerData_x0020_Fortune_x0020_CookieSoap">
|
||||
<wsdl:operation name="readNodeCount">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Display the number of nodes specified in fortune XML document</documentation>
|
||||
<wsdl:input message="tns:readNodeCountSoapIn" />
|
||||
<wsdl:output message="tns:readNodeCountSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetFortuneCookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get a random fortune cookie from the XML document</documentation>
|
||||
<wsdl:input message="tns:GetFortuneCookieSoapIn" />
|
||||
<wsdl:output message="tns:GetFortuneCookieSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="CountCookies">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Count the actual number of nodes in the XML document of fortunes</documentation>
|
||||
<wsdl:input message="tns:CountCookiesSoapIn" />
|
||||
<wsdl:output message="tns:CountCookiesSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSpecificCookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get a specific cookie by the XML node number</documentation>
|
||||
<wsdl:input message="tns:GetSpecificCookieSoapIn" />
|
||||
<wsdl:output message="tns:GetSpecificCookieSoapOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:portType name="FullerData_x0020_Fortune_x0020_CookieHttpGet">
|
||||
<wsdl:operation name="readNodeCount">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Display the number of nodes specified in fortune XML document</documentation>
|
||||
<wsdl:input message="tns:readNodeCountHttpGetIn" />
|
||||
<wsdl:output message="tns:readNodeCountHttpGetOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetFortuneCookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get a random fortune cookie from the XML document</documentation>
|
||||
<wsdl:input message="tns:GetFortuneCookieHttpGetIn" />
|
||||
<wsdl:output message="tns:GetFortuneCookieHttpGetOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="CountCookies">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Count the actual number of nodes in the XML document of fortunes</documentation>
|
||||
<wsdl:input message="tns:CountCookiesHttpGetIn" />
|
||||
<wsdl:output message="tns:CountCookiesHttpGetOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSpecificCookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get a specific cookie by the XML node number</documentation>
|
||||
<wsdl:input message="tns:GetSpecificCookieHttpGetIn" />
|
||||
<wsdl:output message="tns:GetSpecificCookieHttpGetOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:portType name="FullerData_x0020_Fortune_x0020_CookieHttpPost">
|
||||
<wsdl:operation name="readNodeCount">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Display the number of nodes specified in fortune XML document</documentation>
|
||||
<wsdl:input message="tns:readNodeCountHttpPostIn" />
|
||||
<wsdl:output message="tns:readNodeCountHttpPostOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetFortuneCookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get a random fortune cookie from the XML document</documentation>
|
||||
<wsdl:input message="tns:GetFortuneCookieHttpPostIn" />
|
||||
<wsdl:output message="tns:GetFortuneCookieHttpPostOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="CountCookies">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Count the actual number of nodes in the XML document of fortunes</documentation>
|
||||
<wsdl:input message="tns:CountCookiesHttpPostIn" />
|
||||
<wsdl:output message="tns:CountCookiesHttpPostOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSpecificCookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get a specific cookie by the XML node number</documentation>
|
||||
<wsdl:input message="tns:GetSpecificCookieHttpPostIn" />
|
||||
<wsdl:output message="tns:GetSpecificCookieHttpPostOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="FullerData_x0020_Fortune_x0020_CookieSoap" type="tns:FullerData_x0020_Fortune_x0020_CookieSoap">
|
||||
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
|
||||
<wsdl:operation name="readNodeCount">
|
||||
<soap:operation soapAction="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetFortuneCookie">
|
||||
<soap:operation soapAction="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="CountCookies">
|
||||
<soap:operation soapAction="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSpecificCookie">
|
||||
<soap:operation soapAction="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie" 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="FullerData_x0020_Fortune_x0020_CookieHttpGet" type="tns:FullerData_x0020_Fortune_x0020_CookieHttpGet">
|
||||
<http:binding verb="GET" />
|
||||
<wsdl:operation name="readNodeCount">
|
||||
<http:operation location="/readNodeCount" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetFortuneCookie">
|
||||
<http:operation location="/GetFortuneCookie" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="CountCookies">
|
||||
<http:operation location="/CountCookies" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSpecificCookie">
|
||||
<http:operation location="/GetSpecificCookie" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:binding name="FullerData_x0020_Fortune_x0020_CookieHttpPost" type="tns:FullerData_x0020_Fortune_x0020_CookieHttpPost">
|
||||
<http:binding verb="POST" />
|
||||
<wsdl:operation name="readNodeCount">
|
||||
<http:operation location="/readNodeCount" />
|
||||
<wsdl:input>
|
||||
<mime:content type="application/x-www-form-urlencoded" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetFortuneCookie">
|
||||
<http:operation location="/GetFortuneCookie" />
|
||||
<wsdl:input>
|
||||
<mime:content type="application/x-www-form-urlencoded" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="CountCookies">
|
||||
<http:operation location="/CountCookies" />
|
||||
<wsdl:input>
|
||||
<mime:content type="application/x-www-form-urlencoded" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetSpecificCookie">
|
||||
<http:operation location="/GetSpecificCookie" />
|
||||
<wsdl:input>
|
||||
<mime:content type="application/x-www-form-urlencoded" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="FullerData_x0020_Fortune_x0020_Cookie">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Simple XML-based fortune cookie</documentation>
|
||||
<wsdl:port name="FullerData_x0020_Fortune_x0020_CookieSoap" binding="tns:FullerData_x0020_Fortune_x0020_CookieSoap">
|
||||
<soap:address location="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="FullerData_x0020_Fortune_x0020_CookieHttpGet" binding="tns:FullerData_x0020_Fortune_x0020_CookieHttpGet">
|
||||
<http:address location="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="FullerData_x0020_Fortune_x0020_CookieHttpPost" binding="tns:FullerData_x0020_Fortune_x0020_CookieHttpPost">
|
||||
<http:address location="http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx" />
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
121
example/wsdl/Person.wsdl
Normal file
121
example/wsdl/Person.wsdl
Normal file
@@ -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>
|
||||
153
example/wsdl/genericbarcode.xml
Normal file
153
example/wsdl/genericbarcode.xml
Normal file
@@ -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>
|
||||
185
example/wsdl/globalweather.xml
Normal file
185
example/wsdl/globalweather.xml
Normal file
@@ -0,0 +1,185 @@
|
||||
<?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="GetWeather">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="CityName" type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetWeatherResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetWeatherResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetCitiesByCountry">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="CountryName" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="GetCitiesByCountryResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="GetCitiesByCountryResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
<s:element name="string" nillable="true" type="s:string" />
|
||||
</s:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="GetWeatherSoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetWeather" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetWeatherSoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetWeatherResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetCitiesByCountrySoapIn">
|
||||
<wsdl:part name="parameters" element="tns:GetCitiesByCountry" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetCitiesByCountrySoapOut">
|
||||
<wsdl:part name="parameters" element="tns:GetCitiesByCountryResponse" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetWeatherHttpGetIn">
|
||||
<wsdl:part name="CityName" type="s:string" />
|
||||
<wsdl:part name="CountryName" type="s:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetWeatherHttpGetOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetCitiesByCountryHttpGetIn">
|
||||
<wsdl:part name="CountryName" type="s:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetCitiesByCountryHttpGetOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetWeatherHttpPostIn">
|
||||
<wsdl:part name="CityName" type="s:string" />
|
||||
<wsdl:part name="CountryName" type="s:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetWeatherHttpPostOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetCitiesByCountryHttpPostIn">
|
||||
<wsdl:part name="CountryName" type="s:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="GetCitiesByCountryHttpPostOut">
|
||||
<wsdl:part name="Body" element="tns:string" />
|
||||
</wsdl:message>
|
||||
<wsdl:portType name="GlobalWeatherSoap">
|
||||
<wsdl:operation name="GetWeather">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get weather report for all major cities around the world.</documentation>
|
||||
<wsdl:input message="tns:GetWeatherSoapIn" />
|
||||
<wsdl:output message="tns:GetWeatherSoapOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetCitiesByCountry">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get all major cities by country name(full / part).</documentation>
|
||||
<wsdl:input message="tns:GetCitiesByCountrySoapIn" />
|
||||
<wsdl:output message="tns:GetCitiesByCountrySoapOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:portType name="GlobalWeatherHttpGet">
|
||||
<wsdl:operation name="GetWeather">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get weather report for all major cities around the world.</documentation>
|
||||
<wsdl:input message="tns:GetWeatherHttpGetIn" />
|
||||
<wsdl:output message="tns:GetWeatherHttpGetOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetCitiesByCountry">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get all major cities by country name(full / part).</documentation>
|
||||
<wsdl:input message="tns:GetCitiesByCountryHttpGetIn" />
|
||||
<wsdl:output message="tns:GetCitiesByCountryHttpGetOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:portType name="GlobalWeatherHttpPost">
|
||||
<wsdl:operation name="GetWeather">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get weather report for all major cities around the world.</documentation>
|
||||
<wsdl:input message="tns:GetWeatherHttpPostIn" />
|
||||
<wsdl:output message="tns:GetWeatherHttpPostOut" />
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetCitiesByCountry">
|
||||
<documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get all major cities by country name(full / part).</documentation>
|
||||
<wsdl:input message="tns:GetCitiesByCountryHttpPostIn" />
|
||||
<wsdl:output message="tns:GetCitiesByCountryHttpPostOut" />
|
||||
</wsdl:operation>
|
||||
</wsdl:portType>
|
||||
<wsdl:binding name="GlobalWeatherSoap" type="tns:GlobalWeatherSoap">
|
||||
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
|
||||
<wsdl:operation name="GetWeather">
|
||||
<soap:operation soapAction="http://www.webserviceX.NET/GetWeather" style="document" />
|
||||
<wsdl:input>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<soap:body use="literal" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetCitiesByCountry">
|
||||
<soap:operation soapAction="http://www.webserviceX.NET/GetCitiesByCountry" 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="GlobalWeatherHttpGet" type="tns:GlobalWeatherHttpGet">
|
||||
<http:binding verb="GET" />
|
||||
<wsdl:operation name="GetWeather">
|
||||
<http:operation location="/GetWeather" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetCitiesByCountry">
|
||||
<http:operation location="/GetCitiesByCountry" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:binding name="GlobalWeatherHttpPost" type="tns:GlobalWeatherHttpPost">
|
||||
<http:binding verb="POST" />
|
||||
<wsdl:operation name="GetWeather">
|
||||
<http:operation location="/GetWeather" />
|
||||
<wsdl:input>
|
||||
<mime:content type="application/x-www-form-urlencoded" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="GetCitiesByCountry">
|
||||
<http:operation location="/GetCitiesByCountry" />
|
||||
<wsdl:input>
|
||||
<mime:content type="application/x-www-form-urlencoded" />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:mimeXml part="Body" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<wsdl:service name="GlobalWeather">
|
||||
<wsdl:port name="GlobalWeatherSoap" binding="tns:GlobalWeatherSoap">
|
||||
<soap:address location="http://www.webservicex.net/globalweather.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="GlobalWeatherHttpGet" binding="tns:GlobalWeatherHttpGet">
|
||||
<http:address location="http://www.webservicex.net/globalweather.asmx" />
|
||||
</wsdl:port>
|
||||
<wsdl:port name="GlobalWeatherHttpPost" binding="tns:GlobalWeatherHttpPost">
|
||||
<http:address location="http://www.webservicex.net/globalweather.asmx" />
|
||||
</wsdl:port>
|
||||
</wsdl:service>
|
||||
</wsdl:definitions>
|
||||
2091
lib/SOAP/WSDL.pm
2091
lib/SOAP/WSDL.pm
File diff suppressed because it is too large
Load Diff
181
lib/SOAP/WSDL/Base.pm
Normal file
181
lib/SOAP/WSDL/Base.pm
Normal file
@@ -0,0 +1,181 @@
|
||||
package SOAP::WSDL::Base;
|
||||
use strict; use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
use List::Util;
|
||||
use Scalar::Util;
|
||||
use Carp qw(croak carp confess);
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
my %id_of :ATTR(:name<id> :default<()>);
|
||||
my %lang_of :ATTR(:name<lang> :default<()>);
|
||||
my %name_of :ATTR(:name<name> :default<()>);
|
||||
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
||||
my %documentation_of :ATTR(:name<documentation> :default<()>);
|
||||
my %annotation_of :ATTR(:name<annotation> :default<()>);
|
||||
my %targetNamespace_of :ATTR(:name<targetNamespace> :default<()>);
|
||||
my %xmlns_of :ATTR(:name<xmlns> :default<{}>);
|
||||
my %parent_of :ATTR(:get<parent> :default<()>);
|
||||
|
||||
my %namespaces_of :ATTR(:default<{}>);
|
||||
|
||||
sub namespaces {
|
||||
return shift->get_xmlns();
|
||||
}
|
||||
|
||||
sub BUILD {
|
||||
my ($self, $ident, $arg_ref) = @_;
|
||||
if (defined $arg_ref->{ parent }) {
|
||||
$parent_of{ $ident } = delete $arg_ref->{ parent },
|
||||
Scalar::Util::weaken($parent_of{ $ident });
|
||||
}
|
||||
}
|
||||
|
||||
sub START {
|
||||
my ($self, $ident, $arg_ref) = @_;
|
||||
$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';
|
||||
}
|
||||
|
||||
#
|
||||
# set_parent is hand-implemented to break up (weaken) the circular reference
|
||||
# between an object and it's parent
|
||||
#
|
||||
sub set_parent {
|
||||
$parent_of{ ${ $_[0]} } = $_[1];
|
||||
Scalar::Util::weaken($parent_of{ ${ $_[0]} });
|
||||
}
|
||||
|
||||
# _accept is here to be called by visitor.
|
||||
# The visitor pattern is a level of indirection - here the visitor calls
|
||||
# $object->_accept($visitor) on each object, which in turn calls
|
||||
# $visitor->visit_$class( $object ) where $class is the object's class.
|
||||
#
|
||||
sub _accept {
|
||||
my $self = shift;
|
||||
my $class = ref $self;
|
||||
$class =~ s{ \A SOAP::WSDL:: }{}xms;
|
||||
$class =~ s{ (:? :: ) }{_}gxms;
|
||||
my $method = "visit_$class";
|
||||
no strict qw(refs);
|
||||
return shift->$method( $self );
|
||||
}
|
||||
|
||||
# unfortunately, AUTOMETHOD is SLOW.
|
||||
# Re-implement in derived package wherever speed is an issue...
|
||||
#
|
||||
sub AUTOMETHOD {
|
||||
my ($self, $ident, @values) = @_;
|
||||
my $subname = $_; # Requested subroutine name is passed via $_
|
||||
|
||||
# we're called as $self->push_something(@values);
|
||||
if ($subname =~s{^push_}{}xms) {
|
||||
my $getter = "get_$subname";
|
||||
my $setter = "set_$subname";
|
||||
# Checking here is paranoid - will fail fatally if there is no setter.
|
||||
# And we would have to check getters, too.
|
||||
# Maybe do it the Conway way via the Symbol table...
|
||||
# ... can is way slow...
|
||||
return sub {
|
||||
no strict qw(refs);
|
||||
my $old_value = $self->$getter();
|
||||
# Listify if not a list ref
|
||||
$old_value = $old_value ? [ $old_value ] : [] if not ref $old_value;
|
||||
|
||||
push @$old_value , @values;
|
||||
$self->$setter( $old_value );
|
||||
};
|
||||
}
|
||||
|
||||
# we're called as $obj->find_something($ns, $key)
|
||||
elsif ($subname =~s {^find_}{get_}xms) {
|
||||
@values = @{ $values[0] } if ref $values[0] eq 'ARRAY';
|
||||
return sub {
|
||||
return List::Util::first {
|
||||
$_->get_targetNamespace() eq $values[0] &&
|
||||
$_->get_name() eq $values[1]
|
||||
}
|
||||
@{ $self->$subname() };
|
||||
}
|
||||
}
|
||||
elsif ($subname =~s {^first_}{get_}xms) {
|
||||
return sub {
|
||||
my $result_ref = $self->$subname();
|
||||
return if not $result_ref;
|
||||
return $result_ref if (not ref $result_ref eq 'ARRAY');
|
||||
return $result_ref->[0];
|
||||
};
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub init {
|
||||
my ($self, @args) = @_;
|
||||
foreach my $value (@args) {
|
||||
croak @args if (not defined ($value->{ Name }));
|
||||
|
||||
if ($value->{ Name } =~m{^xmlns\:}xms) {
|
||||
# add namespaces
|
||||
$xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value };
|
||||
next;
|
||||
}
|
||||
|
||||
# check for namespae-qualified attributes.
|
||||
# neither XML Schema, nor WSDL1.1, nor the SOAP binding allow
|
||||
# namespace-qualified attribute names
|
||||
my ($ns, $localname) = split /\|/, $value->{ Name };
|
||||
if ($ns) {
|
||||
warn "found unrecognised attribute \{$ns}$localname (ignored)";
|
||||
next;
|
||||
}
|
||||
|
||||
my $name = $value->{ LocalName };
|
||||
my $method = "set_$name";
|
||||
$self->$method( $value->{ Value } );
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
sub expand {
|
||||
my ($self, $qname) = @_;
|
||||
my $ns_of = $self->namespaces();
|
||||
my $parent;
|
||||
if (not $qname=~m{:}xm) {
|
||||
if (defined $ns_of->{ '#default' }) {
|
||||
# TODO check. Returning the targetNamespace for the default ns
|
||||
# is probably wrong
|
||||
#return $self->get_targetNamespace(), $qname;
|
||||
return $ns_of->{ '#default' }, $qname;
|
||||
}
|
||||
if ($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 ($parent = $self->get_parent()) {
|
||||
return $parent->expand($qname);
|
||||
}
|
||||
croak "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are "
|
||||
. join(', ', keys %{ $ns_of });
|
||||
}
|
||||
sub _expand;
|
||||
*_expand = \&expand;
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
# REPOSITORY INFORMATION
|
||||
#
|
||||
# $Rev: 332 $
|
||||
# $LastChangedBy: kutterma $
|
||||
# $Id: WSDL.pm 332 2007-10-19 07:29:03Z kutterma $
|
||||
# $HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
||||
#
|
||||
|
||||
15
lib/SOAP/WSDL/Binding.pm
Normal file
15
lib/SOAP/WSDL/Binding.pm
Normal file
@@ -0,0 +1,15 @@
|
||||
package SOAP::WSDL::Binding;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
my %operation_of :ATTR(:name<operation> :default<()>);
|
||||
my %type_of :ATTR(:name<type> :default<()>);
|
||||
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||
my %style_of :ATTR(:name<style> :default<()>);
|
||||
|
||||
1;
|
||||
404
lib/SOAP/WSDL/Client.pm
Normal file
404
lib/SOAP/WSDL/Client.pm
Normal file
@@ -0,0 +1,404 @@
|
||||
package SOAP::WSDL::Client;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Carp;
|
||||
|
||||
use Class::Std::Fast::Storable;
|
||||
use Scalar::Util qw(blessed);
|
||||
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
use SOAP::WSDL::Factory::Serializer;
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
use SOAP::WSDL::Expat::MessageParser;
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
my %class_resolver_of :ATTR(:name<class_resolver> :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 %transport_of :ATTR(:name<transport> :default<()>);
|
||||
my %endpoint_of :ATTR(:name<endpoint> :default<()>);
|
||||
|
||||
my %soap_version_of :ATTR(:get<soap_version> :init_attr<soap_version> :default<1.1>);
|
||||
|
||||
my %on_action_of :ATTR(:name<on_action> :default<()>);
|
||||
my %content_type_of :ATTR(:name<content_type> :default<text/xml; charset=utf-8>); #/#trick editors
|
||||
my %serializer_of :ATTR(:name<serializer> :default<()>);
|
||||
my %deserializer_of :ATTR(:name<deserializer> :default<()>);
|
||||
|
||||
sub BUILD {
|
||||
my ($self, $ident, $attrs_of_ref) = @_;
|
||||
|
||||
if (exists $attrs_of_ref->{ proxy }) {
|
||||
$self->set_proxy( $attrs_of_ref->{ proxy } );
|
||||
delete $attrs_of_ref->{ proxy };
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub get_proxy { ## no critic RequireArgUnpacking
|
||||
return $_[0]->get_transport();
|
||||
}
|
||||
|
||||
sub set_proxy {
|
||||
my ($self, @args_from) = @_;
|
||||
my $ident = ${ $self };
|
||||
|
||||
# remember old value to return it later - Class::Std does so, too
|
||||
my $old_value = $transport_of{ $ident };
|
||||
|
||||
# accept both list and list ref args
|
||||
@args_from = @{ $args_from[0] } if ref $args_from[0];
|
||||
|
||||
# remember endpoint
|
||||
$endpoint_of{ $ident } = $args_from[0];
|
||||
|
||||
# set transport - SOAP::Lite works similar...
|
||||
$transport_of{ $ident } = SOAP::WSDL::Factory::Transport
|
||||
->get_transport( @args_from );
|
||||
|
||||
return $old_value;
|
||||
}
|
||||
|
||||
sub set_soap_version {
|
||||
my $ident = ${ $_[0] };
|
||||
|
||||
# remember old value to return it later - Class::Std does so, too
|
||||
my $soap_version = $soap_version_of{ $ident };
|
||||
|
||||
# re-setting the soap version invalidates the
|
||||
# serializer object
|
||||
delete $serializer_of{ $ident };
|
||||
delete $deserializer_of{ $ident };
|
||||
|
||||
$soap_version_of{ $ident } = $_[1];
|
||||
|
||||
return $soap_version;
|
||||
}
|
||||
|
||||
# Mimic SOAP::Lite's behaviour for getter/setter routines
|
||||
SUBFACTORY: {
|
||||
for (qw(class_resolver no_dispatch outputxml proxy prefix)) {
|
||||
my $setter = "set_$_";
|
||||
my $getter = "get_$_";
|
||||
no strict qw(refs); ## no critic ProhibitNoStrict
|
||||
*{ $_ } = sub { my $self = shift;
|
||||
if (@_) {
|
||||
$self->$setter(@_);
|
||||
return $self;
|
||||
}
|
||||
return $self->$getter()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
sub call {
|
||||
my ($self, $method, @data_from) = @_;
|
||||
my $ident = ${ $self };
|
||||
|
||||
# the only valid idiom for calling a method with both a header and a body
|
||||
# is
|
||||
# ->call($method, $body_ref, $header_ref);
|
||||
#
|
||||
# These other idioms all assume an empty header:
|
||||
# ->call($method, %body_of); # %body_of is a hash
|
||||
# ->call($method, $body); # $body is a scalar
|
||||
my ($data, $header) = ref $data_from[0]
|
||||
? ($data_from[0], $data_from[1] )
|
||||
: (@data_from>1)
|
||||
? ( { @data_from }, undef )
|
||||
: ( $data_from[0], undef );
|
||||
|
||||
# get operation name and soap_action
|
||||
my ($operation, $soap_action) = (ref $method eq 'HASH')
|
||||
? ( $method->{ operation }, $method->{ soap_action } )
|
||||
: (blessed $data
|
||||
&& $data->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType'))
|
||||
? ( $method , (join q{/}, $data->get_xmlns(), $method) )
|
||||
: ( $method, q{} );
|
||||
$serializer_of{ $ident } ||= SOAP::WSDL::Factory::Serializer->get_serializer({
|
||||
soap_version => $self->get_soap_version(),
|
||||
});
|
||||
|
||||
my $envelope = $serializer_of{ $ident }->serialize({
|
||||
method => $operation,
|
||||
body => $data,
|
||||
header => $header,
|
||||
options => {prefix => $prefix_of{ $ident }},
|
||||
});
|
||||
|
||||
return $envelope if $self->no_dispatch();
|
||||
|
||||
# always quote SOAPAction header.
|
||||
# WS-I BP 1.0 R1109
|
||||
if ($soap_action) {
|
||||
$soap_action =~s{\A(:?"|')?}{"}xms;
|
||||
$soap_action =~s{(:?"|')?\Z}{"}xms;
|
||||
}
|
||||
else {
|
||||
$soap_action = q{""};
|
||||
}
|
||||
|
||||
# get response via transport layer.
|
||||
# Normally, SOAP::Lite's transport layer is used, though users
|
||||
# may provide their own.
|
||||
my $transport = $self->get_transport();
|
||||
my $response = $transport->send_receive(
|
||||
endpoint => $self->get_endpoint(),
|
||||
content_type => $content_type_of{ $ident },
|
||||
envelope => $envelope,
|
||||
action => $soap_action,
|
||||
# on_receive_chunk => sub {} # optional, may be used for parsing large responses as they arrive.
|
||||
);
|
||||
|
||||
return $response if ($outputxml_of{ $ident } );
|
||||
|
||||
# get deserializer
|
||||
$deserializer_of{ $ident } ||= SOAP::WSDL::Factory::Deserializer->get_deserializer({
|
||||
soap_version => $soap_version_of{ $ident },
|
||||
});
|
||||
|
||||
# set class resolver if serializer supports it
|
||||
$deserializer_of{ $ident }->set_class_resolver( $class_resolver_of{ $ident } )
|
||||
if ( $deserializer_of{ $ident }->can('set_class_resolver') );
|
||||
|
||||
# Try deserializing response - there may be some,
|
||||
# even if transport did not succeed (got a 500 response)
|
||||
if ( $response ) {
|
||||
my ($result_body, $result_header) = eval {
|
||||
$deserializer_of{ $ident }->deserialize( $response );
|
||||
};
|
||||
if (not $@) {
|
||||
return wantarray
|
||||
? ($result_body, $result_header)
|
||||
: $result_body;
|
||||
}
|
||||
return $deserializer_of{ $ident }->generate_fault({
|
||||
code => 'soap:Server',
|
||||
role => 'urn:localhost',
|
||||
message => "Error deserializing message: $@. \n"
|
||||
. "Message was: \n$response"
|
||||
});
|
||||
};
|
||||
|
||||
# if we had no success (Transport layer error status code)
|
||||
# or if transport layer failed
|
||||
if ( ! $transport->is_success() ) {
|
||||
|
||||
# generate & return fault if we cannot serialize response
|
||||
# or have none...
|
||||
return $deserializer_of{ $ident }->generate_fault({
|
||||
code => 'soap:Server',
|
||||
role => 'urn:localhost',
|
||||
message => 'Error sending / receiving message: '
|
||||
. $transport->message()
|
||||
});
|
||||
}
|
||||
} ## end sub call
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Client - SOAP::WSDL's SOAP Client
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use SOAP::WSDL::Client;
|
||||
my $soap = SOAP::WSDL::Client->new({
|
||||
proxy => 'http://www.example.org/webservice/test'
|
||||
});
|
||||
$soap->call( \%method, $body, $header);
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 call
|
||||
|
||||
$soap->call( \%method, \@parts );
|
||||
|
||||
%method is a hash with the following keys:
|
||||
|
||||
Name Description
|
||||
----------------------------------------------------
|
||||
operation operation name
|
||||
soap_action SOAPAction HTTP header to use
|
||||
style Operation style. One of (document|rpc)
|
||||
use SOAP body encoding. One of (literal|encoded)
|
||||
|
||||
The style and use keys have no influence yet.
|
||||
|
||||
@parts is a list containing the elements of the message parts.
|
||||
|
||||
For backward compatibility, call may also be called as below:
|
||||
|
||||
$soap->call( $method, \@parts );
|
||||
|
||||
In this case, $method is the SOAP operation name, and the SOAPAction header
|
||||
is guessed from the first part's namespace and the operation name (which is
|
||||
mostly correct, but may fail). Operation style and body encoding are assumed to
|
||||
be document/literal
|
||||
|
||||
=head2 Configuration methods
|
||||
|
||||
=head3 outputxml
|
||||
|
||||
$soap->outputxml(1);
|
||||
|
||||
When set, call() returns the raw XML of the SOAP Envelope.
|
||||
|
||||
=head3 set_content_type
|
||||
|
||||
$soap->set_content_type('application/xml; charset: utf8');
|
||||
|
||||
Sets the content type and character encoding.
|
||||
|
||||
You probably should not use a character encoding different from utf8:
|
||||
SOAP::WSDL::Client will not convert the request into a different encoding
|
||||
(yet).
|
||||
|
||||
To leave out the encoding, just set the content type without appending charset
|
||||
like this:
|
||||
|
||||
$soap->set_content_type('text/xml');
|
||||
|
||||
Default:
|
||||
|
||||
text/xml; charset: utf8
|
||||
|
||||
=head3 set_prefix
|
||||
|
||||
$soap->set_prefix('ns2');
|
||||
|
||||
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:
|
||||
|
||||
<?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/">
|
||||
<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
|
||||
|
||||
SOAP::WSDL does not aim to be a complete replacement for SOAP::Lite - the
|
||||
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,
|
||||
nothing less.
|
||||
|
||||
Nonetheless SOAP::WSDL mimics part of SOAP::Lite's API and behaviour,
|
||||
so SOAP::Lite users can switch without looking up every method call in the
|
||||
documentation.
|
||||
|
||||
A few things are quite different from SOAP::Lite, though:
|
||||
|
||||
=head3 SOAP request data
|
||||
|
||||
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).
|
||||
|
||||
=head3 Return values
|
||||
|
||||
The result from call() is not a SOAP::SOM object, but a message object.
|
||||
|
||||
Message objects' classes may be generated from WSDL definitions automatically
|
||||
- see SOAP::WSDL::Generator::Typelib on how to generate your own WSDL based
|
||||
message class library.
|
||||
|
||||
=head3 Fault handling
|
||||
|
||||
SOAP::WSDL::Client returns a fault object on errors, even on transport layer
|
||||
errors.
|
||||
|
||||
The fault object is a SOAP1.1 fault object of the following
|
||||
C<SOAP::WSDL::SOAP::Typelib::Fault11>.
|
||||
|
||||
SOAP::WSDL::SOAP::Typelib::Fault11 objects are false in boolean context, so
|
||||
you can just do something like:
|
||||
|
||||
my $result = $soap->call($method, $data);
|
||||
|
||||
if ($result) {
|
||||
# handle result
|
||||
}
|
||||
else {
|
||||
die $result->faultstring();
|
||||
}
|
||||
|
||||
=head3 outputxml
|
||||
|
||||
SOAP::Lite returns only the content of the SOAP body when outputxml is set
|
||||
to true. SOAP::WSDL::Client returns the complete XML response.
|
||||
|
||||
=head3 Auto-Dispatching
|
||||
|
||||
SOAP::WSDL::Client B<does not> support auto-dispatching.
|
||||
|
||||
This is on purpose: You may easily create interface classes by using
|
||||
SOAP::WSDL::Client and implementing something like
|
||||
|
||||
sub mySoapMethod {
|
||||
my $self = shift;
|
||||
$soap_wsdl_client->call( mySoapMethod, @_);
|
||||
}
|
||||
|
||||
You may even do this in a class factory - see L<wsdl2perl.pl> for creating
|
||||
such interfaces.
|
||||
|
||||
=head1 TROUBLESHOOTING
|
||||
|
||||
=head2 Accessing protected web services
|
||||
|
||||
Accessing protected web services is very specific for the transport
|
||||
backend used.
|
||||
|
||||
In general, you may pass additional arguments to the set_proxy method (or
|
||||
a list ref of the web service address and any additional arguments to the
|
||||
new method's I<proxy> argument).
|
||||
|
||||
Refer to the appropriate transport module for documentation.
|
||||
|
||||
=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 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 744 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Client.pm 744 2008-10-15 16:58:45Z kutterma $
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
||||
|
||||
=cut
|
||||
|
||||
93
lib/SOAP/WSDL/Client/Base.pm
Normal file
93
lib/SOAP/WSDL/Client/Base.pm
Normal file
@@ -0,0 +1,93 @@
|
||||
package SOAP::WSDL::Client::Base;
|
||||
use strict;
|
||||
use warnings;
|
||||
use base 'SOAP::WSDL::Client';
|
||||
use Scalar::Util qw(blessed);
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
sub call {
|
||||
my ($self, $method, $body, $header) = @_;
|
||||
|
||||
# Treat non-objects special
|
||||
if (not blessed $body) {
|
||||
|
||||
# make sure there's something sensible in our body data
|
||||
$body = {} if not defined $body;
|
||||
$body = ref $body eq 'ARRAY' ? $body : [ $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 $@; ## no critic (ProhibitStringyEval)
|
||||
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 (%{ $method->{ header } }) {
|
||||
|
||||
# treat non object special - as above, but only for one
|
||||
if (not blessed $header) {
|
||||
my $class = $method->{ header }->{ parts }->[0];
|
||||
eval "require $class" || die $@; ## no critic (ProhibitStringyEval)
|
||||
$header = $class->new($header);
|
||||
}
|
||||
}
|
||||
return $self->SUPER::call($method, $body, $header);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Client::Base - Factory class for WSDL-based SOAP access
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
package MySoapInterface;
|
||||
use SOAP::WSDL::Client::Base;
|
||||
__PACKAGE__->__create_methods( qw(one two three) );
|
||||
1;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Factory class for creating interface classes. Should probably be renamed to
|
||||
SOAP::WSDL::Factory::Interface...
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 call
|
||||
|
||||
Abstraction layer method between the generated interfaces and
|
||||
L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||
|
||||
=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 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 728 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Base.pm 728 2008-07-13 19:28:50Z kutterma $
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
||||
|
||||
=cut
|
||||
124
lib/SOAP/WSDL/Definitions.pm
Normal file
124
lib/SOAP/WSDL/Definitions.pm
Normal file
@@ -0,0 +1,124 @@
|
||||
package SOAP::WSDL::Definitions;
|
||||
use strict;
|
||||
use warnings;
|
||||
use List::Util qw(first);
|
||||
use Class::Std::Fast::Storable;
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
my %types_of :ATTR(:name<types> :default<[]>);
|
||||
my %message_of :ATTR(:name<message> :default<[]>);
|
||||
my %portType_of :ATTR(:name<portType> :default<[]>);
|
||||
my %binding_of :ATTR(:name<binding> :default<[]>);
|
||||
my %service_of :ATTR(:name<service> :default<[]>);
|
||||
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
||||
|
||||
# must be attr for Class::Std::Fast::Storable
|
||||
#my %attributes_of :ATTR();
|
||||
my %attributes_of = (
|
||||
binding => \%binding_of,
|
||||
message => \%message_of,
|
||||
portType => \%portType_of,
|
||||
service => \%service_of,
|
||||
);
|
||||
|
||||
# Function factory - we could be writing this method for all %attribute
|
||||
# keys, too, but that's just C&P (eehm, Copy & Paste...)
|
||||
BLOCK: {
|
||||
foreach my $method(keys %attributes_of ) {
|
||||
no strict qw/refs/; ## no critic ProhibitNoStrict
|
||||
*{ "find_$method" } = sub {
|
||||
my ($self, @args_from) = @_;
|
||||
@args_from = @{ $args_from[0] } if ref $args_from[0] eq 'ARRAY';
|
||||
return first {
|
||||
$_->get_targetNamespace() eq $args_from[0]
|
||||
&& $_->get_name() eq $args_from[1]
|
||||
}
|
||||
@{ $attributes_of{ $method }->{ ident $self } };
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Definitions - model a WSDL E<gt>definitionsE<lt> element
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 first_service get_service set_service push_service
|
||||
|
||||
Accessors/Mutators for accessing / setting the E<gt>serviceE<lt> child
|
||||
element(s).
|
||||
|
||||
=head2 find_service
|
||||
|
||||
Returns the service matching the namespace/localname pair passed as arguments.
|
||||
|
||||
my $service = $wsdl->find_service($namespace, $localname);
|
||||
|
||||
=head2 first_binding get_binding set_binding push_binding
|
||||
|
||||
Accessors/Mutators for accessing / setting the E<gt>bindingE<lt> child
|
||||
element(s).
|
||||
|
||||
=head2 find_binding
|
||||
|
||||
Returns the binding matching the namespace/localname pair passed as arguments.
|
||||
|
||||
my $binding = $wsdl->find_binding($namespace, $localname);
|
||||
|
||||
=head2 first_portType get_portType set_portType push_portType
|
||||
|
||||
Accessors/Mutators for accessing / setting the E<gt>portTypeE<lt> child
|
||||
element(s).
|
||||
|
||||
=head2 find_portType
|
||||
|
||||
Returns the portType matching the namespace/localname pair passed as arguments.
|
||||
|
||||
my $portType = $wsdl->find_portType($namespace, $localname);
|
||||
|
||||
=head2 first_message get_message set_message push_message
|
||||
|
||||
Accessors/Mutators for accessing / setting the E<gt>messageE<lt> child
|
||||
element(s).
|
||||
|
||||
=head2 find_message
|
||||
|
||||
Returns the message matching the namespace/localname pair passed as arguments.
|
||||
|
||||
my $message = $wsdl->find_message($namespace, $localname);
|
||||
|
||||
=head2 first_types get_types set_types push_types
|
||||
|
||||
Accessors/Mutators for accessing / setting the E<gt>typesE<lt> child
|
||||
element(s).
|
||||
|
||||
=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 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 728 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Definitions.pm 728 2008-07-13 19:28:50Z kutterma $
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
||||
|
||||
=cut
|
||||
|
||||
171
lib/SOAP/WSDL/Deserializer/Hash.pm
Normal file
171
lib/SOAP/WSDL/Deserializer/Hash.pm
Normal file
@@ -0,0 +1,171 @@
|
||||
package SOAP::WSDL::Deserializer::Hash;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
||||
use SOAP::WSDL::Expat::Message2Hash;
|
||||
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ );
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
sub BUILD {
|
||||
my ($self, $ident, $args_of_ref) = @_;
|
||||
|
||||
# ignore all options
|
||||
for (keys %{ $args_of_ref }) {
|
||||
delete $args_of_ref->{ $_ }
|
||||
}
|
||||
}
|
||||
|
||||
sub deserialize {
|
||||
my ($self, $content) = @_;
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::Message2Hash->new();
|
||||
eval { $parser->parse_string( $content ) };
|
||||
if ($@) {
|
||||
die $self->generate_fault({
|
||||
code => 'soap:Server',
|
||||
role => 'urn:localhost',
|
||||
message => "Error deserializing message: $@. \n"
|
||||
. "Message was: \n$content"
|
||||
});
|
||||
}
|
||||
return $parser->get_data();
|
||||
}
|
||||
|
||||
sub generate_fault {
|
||||
my ($self, $args_from_ref) = @_;
|
||||
return SOAP::WSDL::SOAP::Typelib::Fault11->new({
|
||||
faultcode => $args_from_ref->{ code } || 'soap:Client',
|
||||
faultactor => $args_from_ref->{ role } || 'urn:localhost',
|
||||
faultstring => $args_from_ref->{ message } || "Unknown error"
|
||||
});
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Deserializer::Hash - Deserializer SOAP messages into perl hash refs
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use SOAP::WSDL;
|
||||
use SOAP::WSDL::Deserializer::Hash;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Deserializer for creating perl hash refs as result of a SOAP call.
|
||||
|
||||
=head2 Output structure
|
||||
|
||||
The XML structure is converted into a perl data structure consisting of
|
||||
hash and or list references. List references are used for holding array data.
|
||||
|
||||
SOAP::WSDL::Deserializer::Hash creates list references always at the maximum
|
||||
depth possible.
|
||||
|
||||
Examples:
|
||||
|
||||
XML:
|
||||
<MyDataArray>
|
||||
<MyData>1</MyData>
|
||||
<MyData>1</MyData>
|
||||
</MyDataArray>
|
||||
|
||||
Perl:
|
||||
{
|
||||
MyDataArray => {
|
||||
MyData => [ 1, 1 ]
|
||||
}
|
||||
}
|
||||
|
||||
XML:
|
||||
<DeepArray>
|
||||
<MyData><int>1<int>/MyData>
|
||||
<MyData><int>1<int>/MyData>
|
||||
</DeepArray>
|
||||
|
||||
Perl:
|
||||
{
|
||||
MyDataArray => {
|
||||
MyData => [
|
||||
{ int => 1 },
|
||||
{ int => 1 }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
List reference creation is triggered by the second occurance of an element.
|
||||
XML Array types with one element only will not be represented as list
|
||||
references.
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
All you need to do is to use SOAP::WSDL::Deserializer::Hash.
|
||||
|
||||
SOAP::WSDL::Deserializer::Hash autoregisters itself for SOAP1.1 messages
|
||||
|
||||
You may register SOAP::WSDLDeserializer::Hash for other SOAP Versions by
|
||||
calling
|
||||
|
||||
SOAP::Factory::Deserializer->register('1.2',
|
||||
SOAP::WSDL::Deserializer::Hash)
|
||||
|
||||
=head1 Limitations
|
||||
|
||||
=over
|
||||
|
||||
=item * Namespaces
|
||||
|
||||
All namespaces are ignored.
|
||||
|
||||
=item * XML attributes
|
||||
|
||||
All XML attributes are ignored.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Differences from other SOAP::WSDL::Deserializer classes
|
||||
|
||||
=over
|
||||
|
||||
=item * generate_fault
|
||||
|
||||
SOAP::WSDL::Deserializer::Hash will die with a SOAP::WSDL::Fault11 object when
|
||||
a parse error appears
|
||||
|
||||
=back
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 deserialize
|
||||
|
||||
Deserializes the message.
|
||||
|
||||
=head2 generate_fault
|
||||
|
||||
Generates a L<SOAP::WSDL::SOAP::Typelib::Fault11|SOAP::WSDL::SOAP::Typelib::Fault11>
|
||||
object and returns it.
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2008 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 728 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Hash.pm 728 2008-07-13 19:28:50Z kutterma $
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/Hash.pm $
|
||||
|
||||
=cut
|
||||
148
lib/SOAP/WSDL/Deserializer/SOM.pm
Normal file
148
lib/SOAP/WSDL/Deserializer/SOM.pm
Normal file
@@ -0,0 +1,148 @@
|
||||
package SOAP::WSDL::Deserializer::SOM;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
our @ISA;
|
||||
|
||||
eval {
|
||||
require SOAP::Lite;
|
||||
push @ISA, 'SOAP::Deserializer';
|
||||
}
|
||||
or die "Cannot load SOAP::Lite.
|
||||
Cannot deserialize to SOM object without SOAP::Lite.
|
||||
Please install SOAP::Lite.";
|
||||
|
||||
sub deserialize {
|
||||
my $self = shift;
|
||||
my $result = eval { $self->SUPER::deserialize(@_) };
|
||||
if ($@) {
|
||||
return SOAP::Fault->new(
|
||||
faultactor => 'soap:Server',
|
||||
faultstring => $@,
|
||||
);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
sub generate_fault {
|
||||
my ($self, $args_from_ref) = @_;
|
||||
# code, message, detail, actor
|
||||
die SOAP::Fault->new(
|
||||
faultcode => $args_from_ref->{ code },
|
||||
faultstring => $args_from_ref->{ message },
|
||||
faultactor => $args_from_ref->{ role },
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Deserializer::SOM - Deserializer SOAP messages into SOM objects
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use SOAP::WSDL;
|
||||
use SOAP::WSDL::Deserializer::SOM;
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ );
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Deserializer for creating SOAP::Lite's SOM object as result of a SOAP call.
|
||||
|
||||
This package is here for two reasons:
|
||||
|
||||
=over
|
||||
|
||||
=item * Compatibility
|
||||
|
||||
You don't have to change the rest of your SOAP::Lite based app when switching
|
||||
to SOAP::WSDL, but can just use SOAP::WSDL::Deserializer::SOM to get back the
|
||||
same objects as you were used to.
|
||||
|
||||
=item * Completeness
|
||||
|
||||
SOAP::Lite covers much more of the SOAP specification than SOAP::WSDL.
|
||||
|
||||
SOAP::WSDL::Deserializer::SOM can be used for content which cannot be
|
||||
deserialized by L<SOAP::WSDL::Deserializer::SOAP11|SOAP::WSDL::Deserializer::SOAP11>.
|
||||
This may be XML including mixed content, attachements and other XML data not
|
||||
(yet) handled by L<SOAP::WSDL::Deserializer::SOAP11|SOAP::WSDL::Deserializer::SOAP11>.
|
||||
|
||||
=back
|
||||
|
||||
SOAP::WSDL::Deserializer::SOM is a subclass of L<SOAP::Deserializer|SOAP::Deserializer>
|
||||
from the L<SOAP::Lite|SOAP::Lite> package.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 deserialize
|
||||
|
||||
Deserializes a XML sting into a SOAP::SOM object. Returns a SOAP::Fault object
|
||||
on deserialization errors.
|
||||
|
||||
=head2 generate_fault
|
||||
|
||||
Dies with a SOAP::Fault object.
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
SOAP::WSDL::Deserializer will not autoregister itself - to use it for a particular
|
||||
SOAP version just use the following lines:
|
||||
|
||||
my $soap_version = '1.1'; # or '1.2', further versions may appear.
|
||||
|
||||
use SOAP::WSDL::Deserializer::SOM;
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
SOAP::WSDL::Factory::Deserializer->register( $soap_version, __PACKAGE__ );
|
||||
|
||||
=head1 DIFFERENCES FROM OTHER CLASSES
|
||||
|
||||
=head2 Differences from SOAP::Lite
|
||||
|
||||
=over
|
||||
|
||||
=item * No on_fault handler
|
||||
|
||||
You cannot specify what to do when an error occurs - SOAP::WSDL will return
|
||||
a SOAP::Fault object on transport errors.
|
||||
|
||||
=back
|
||||
|
||||
=head2 Differences from other SOAP::WSDL::Deserializer classes
|
||||
|
||||
=over
|
||||
|
||||
=item * generate_fault
|
||||
|
||||
SOAP::WSDL::Deserializer::SOM will die with a SOAP::Fault object on calls
|
||||
to generate_fault.
|
||||
|
||||
This also means that a SOAP::Fault may be thrown as exception when using
|
||||
|
||||
|
||||
=back
|
||||
|
||||
=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 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 728 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: SOM.pm 728 2008-07-13 19:28:50Z kutterma $
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/SOM.pm $
|
||||
|
||||
=cut
|
||||
107
lib/SOAP/WSDL/Deserializer/XSD.pm
Normal file
107
lib/SOAP/WSDL/Deserializer/XSD.pm
Normal file
@@ -0,0 +1,107 @@
|
||||
package SOAP::WSDL::Deserializer::XSD;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
||||
use SOAP::WSDL::Expat::MessageParser;
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
||||
|
||||
my %parser_of :ATTR();
|
||||
|
||||
sub BUILD {
|
||||
my ($self, $ident, $args_of_ref) = @_;
|
||||
|
||||
# ignore all options except 'class_resolver'
|
||||
for (keys %{ $args_of_ref }) {
|
||||
delete $args_of_ref->{ $_ } if $_ ne 'class_resolver';
|
||||
}
|
||||
}
|
||||
|
||||
sub deserialize {
|
||||
my ($self, $content) = @_;
|
||||
|
||||
$parser_of{ ${ $self } } = SOAP::WSDL::Expat::MessageParser->new()
|
||||
if not $parser_of{ ${ $self } };
|
||||
$parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ${ $self } } );
|
||||
eval { $parser_of{ ${ $self } }->parse_string( $content ) };
|
||||
if ($@) {
|
||||
return $self->generate_fault({
|
||||
code => 'soap:Server',
|
||||
role => 'urn:localhost',
|
||||
message => "Error deserializing message: $@. \n"
|
||||
. "Message was: \n$content"
|
||||
});
|
||||
}
|
||||
return ( $parser_of{ ${ $self } }->get_data(), $parser_of{ ${ $self } }->get_header() );
|
||||
}
|
||||
|
||||
sub generate_fault {
|
||||
my ($self, $args_from_ref) = @_;
|
||||
return SOAP::WSDL::SOAP::Typelib::Fault11->new({
|
||||
faultcode => $args_from_ref->{ code } || 'soap:Client',
|
||||
faultactor => $args_from_ref->{ role } || 'urn:localhost',
|
||||
faultstring => $args_from_ref->{ message } || "Unknown error"
|
||||
});
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Deserializer::XSD - Deserializer SOAP messages into SOAP::WSDL::XSD::Typelib:: objects
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Default deserializer for SOAP::WSDL::Client and interface classes generated by
|
||||
SOAP::WSDL. Converts SOAP messages to SOAP::WSDL::XSD::Typlib:: based objects.
|
||||
|
||||
Needs a class_resolver typemap either passed by the generated interface
|
||||
or user-provided.
|
||||
|
||||
SOAP::WSDL::Deserializer classes implement the API described in
|
||||
L<SOAP::WSDL::Factory::Deserializer>.
|
||||
|
||||
=head1 USAGE
|
||||
|
||||
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
|
||||
SOAP::WSDL.
|
||||
|
||||
If you want to use the XSD serializer from SOAP::WSDL, set the outputtree()
|
||||
property and provide a class_resolver.
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 deserialize
|
||||
|
||||
Deserializes the message.
|
||||
|
||||
=head2 generate_fault
|
||||
|
||||
Generates a L<SOAP::WSDL::SOAP::Typelib::Fault11|SOAP::WSDL::SOAP::Typelib::Fault11>
|
||||
object and returns it.
|
||||
|
||||
=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 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 728 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: XSD.pm 728 2008-07-13 19:28:50Z kutterma $
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
||||
|
||||
=cut
|
||||
142
lib/SOAP/WSDL/Expat/Base.pm
Normal file
142
lib/SOAP/WSDL/Expat/Base.pm
Normal file
@@ -0,0 +1,142 @@
|
||||
package SOAP::WSDL::Expat::Base;
|
||||
use strict;
|
||||
use warnings;
|
||||
use URI;
|
||||
use XML::Parser::Expat;
|
||||
|
||||
# TODO: convert to Class::Std::Fast based class - hash based classes suck.
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
sub new {
|
||||
my ($class, $arg_ref) = @_;
|
||||
my $self = {
|
||||
data => undef,
|
||||
};
|
||||
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;
|
||||
}
|
||||
|
||||
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 }; }
|
||||
|
||||
# Mark a URI as "already parsed"
|
||||
sub set_parsed {
|
||||
my ($self, $uri) = @_;
|
||||
$self->{ parsed }->{ $uri } = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
# returns true if a specific URI has already been parsed
|
||||
sub is_parsed {
|
||||
my ($self, $uri) = @_;
|
||||
return exists $self->{ parsed }->{ $uri };
|
||||
}
|
||||
|
||||
|
||||
# parse a URI. This is the preferred parsing method for WSDL files, as it's
|
||||
# the only one allowing automatic import resolution
|
||||
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 {
|
||||
eval {
|
||||
$_[0]->_initialize( XML::Parser::Expat->new( Namespaces => 1 ) )->parse( $_[1] );
|
||||
$_[0]->{ parser }->release();
|
||||
};
|
||||
$_[0]->{ parser }->xpcroak( $@ ) if $@;
|
||||
delete $_[0]->{ parser };
|
||||
return $_[0]->{ data };
|
||||
}
|
||||
|
||||
sub parsefile {
|
||||
eval {
|
||||
$_[0]->_initialize( XML::Parser::Expat->new(Namespaces => 1) )->parsefile( $_[1] );
|
||||
$_[0]->{ parser }->release();
|
||||
};
|
||||
$_[0]->{ parser }->xpcroak( $@ ) if $@;
|
||||
delete $_[0]->{ parser };
|
||||
return $_[0]->{ data };
|
||||
}
|
||||
|
||||
# SAX-like aliases
|
||||
sub parse_string;
|
||||
*parse_string = \&parse;
|
||||
|
||||
sub parse_file;
|
||||
*parse_file = \&parsefile;
|
||||
|
||||
sub get_data {
|
||||
return $_[0]->{ data };
|
||||
}
|
||||
|
||||
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 $
|
||||
132
lib/SOAP/WSDL/Expat/Message2Hash.pm
Normal file
132
lib/SOAP/WSDL/Expat/Message2Hash.pm
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/usr/bin/perl
|
||||
package SOAP::WSDL::Expat::Message2Hash;
|
||||
use strict;
|
||||
use warnings;
|
||||
use base qw(SOAP::WSDL::Expat::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.05');
|
||||
|
||||
sub _initialize {
|
||||
my ($self, $parser) = @_;
|
||||
$self->{ parser } = $parser;
|
||||
delete $self->{ data }; # remove potential old results
|
||||
|
||||
my $characters;
|
||||
my $current = {};
|
||||
my $list = []; # node list
|
||||
my $current_part = q{}; # are we in header or body ?
|
||||
$self->{ data } = $current;
|
||||
|
||||
# use "globals" for speed
|
||||
my ($_element, $_method,
|
||||
$_class, $_parser, %_attrs) = ();
|
||||
|
||||
# no strict qw(refs);
|
||||
$parser->setHandlers(
|
||||
Start => sub {
|
||||
push @$list, $current;
|
||||
#If our element exists and is a list ref, add to it
|
||||
if ( exists $current->{ $_[1] }
|
||||
&& ( ref ($current->{ $_[1] }) eq 'ARRAY')
|
||||
) {
|
||||
push @{ $current->{ $_[1] } }, {};
|
||||
$current = $current->{ $_[1] }->[-1];
|
||||
}
|
||||
elsif ( exists $current->{ $_[1] } )
|
||||
{
|
||||
$current->{ $_[1] } = [ $current->{ $_[1] }, {} ];
|
||||
$current = $current->{ $_[1] }->[-1];
|
||||
}
|
||||
else {
|
||||
$current->{ $_[1] } = {};
|
||||
$current = $current->{ $_[1] };
|
||||
}
|
||||
return;
|
||||
},
|
||||
|
||||
Char => sub {
|
||||
$characters .= $_[1] if $_[1] !~m{ \A \s* \z}xms;
|
||||
return;
|
||||
},
|
||||
|
||||
End => sub {
|
||||
$_element = $_[1];
|
||||
|
||||
# This one easily handles ignores for us, too...
|
||||
# return if not ref $$list[-1];
|
||||
|
||||
if (length $characters) {
|
||||
if (ref $list->[-1]->{ $_element } eq 'ARRAY') {
|
||||
$list->[-1]->{ $_element }->[-1] = $characters ;
|
||||
}
|
||||
else {
|
||||
$list->[-1]->{ $_element } = $characters;
|
||||
}
|
||||
}
|
||||
$characters = q{};
|
||||
$current = pop @$list; # step up in object hierarchy...
|
||||
return;
|
||||
}
|
||||
);
|
||||
return $parser;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Expat::Message2Hash - Convert SOAP messages to perl hash refs
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::MessageParser->new({
|
||||
class_resolver => 'My::Resolver'
|
||||
});
|
||||
$parser->parse( $xml );
|
||||
my $obj = $parser->get_data();
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Real fast expat based SOAP message parser.
|
||||
|
||||
See L<SOAP::WSDL::Manual::Parser> for details.
|
||||
|
||||
=head1 Bugs and Limitations
|
||||
|
||||
=over
|
||||
|
||||
=item * Ignores all namespaces
|
||||
|
||||
=item * Ignores all attributes
|
||||
|
||||
=item * Does not handle mixed content
|
||||
|
||||
=item * The SOAP header is ignored
|
||||
|
||||
=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
|
||||
|
||||
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 $
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user