Compare commits

...
3 Commits
Author SHA1 Message Date
Martin Kutter 3de318be40 import SOAP-WSDL 2.00.06 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00.06
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.06.tar.gz
2009-12-12 19:48:54 -08:00
Martin Kutter c2ac24dd0f import SOAP-WSDL 2.00.05 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00.05
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.05.tar.gz
2009-12-12 19:48:45 -08:00
Martin Kutter c3e3d1908e import SOAP-WSDL 2.00.04 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00.04
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.04.tar.gz
2009-12-12 19:48:44 -08:00
157 changed files with 1806 additions and 1211 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ $build = Module::Build->new(
create_makefile_pl => 'small', create_makefile_pl => 'small',
dist_abstract => 'SOAP with WSDL support', dist_abstract => 'SOAP with WSDL support',
dist_name => 'SOAP-WSDL', dist_name => 'SOAP-WSDL',
dist_version => '2.00.03', dist_version => '2.00.06',
module_name => 'SOAP::WSDL', module_name => 'SOAP::WSDL',
license => 'artistic', license => 'artistic',
requires => { requires => {
+71 -2
View File
@@ -1,4 +1,4 @@
Release notes for SOAP::WSDL 2.00.03 Release notes for SOAP::WSDL 2.00.06
------- -------
I'm proud to present a new release of SOAP::WSDL. I'm proud to present a new release of SOAP::WSDL.
@@ -27,7 +27,7 @@ Features:
* SOAP::Lite like look and feel * SOAP::Lite like look and feel
o Where possible, SOAP::WSDL mimics SOAP::Lite's API to allow easy migration o Where possible, SOAP::WSDL mimics SOAP::Lite's API to allow easy migration
* XML schema based class library for creating data objects * XML schema based class library for creating data objects
* High-performance XML parser * High-performance SOAP Message parser
* Plugin support. SOAP::WSDL can be extended through plugins in various aspects. * Plugin support. SOAP::WSDL can be extended through plugins in various aspects.
The following plugins are supported: The following plugins are supported:
o Transport plugins via SOAP::WSDL::Factory::Transport o Transport plugins via SOAP::WSDL::Factory::Transport
@@ -36,6 +36,74 @@ Features:
The following changes have been made: 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 2.00.03 - May 18 2008
The following bugs have been fixed (the numbers in square brackets are the The following bugs have been fixed (the numbers in square brackets are the
@@ -56,6 +124,7 @@ The following bugs have been fixed (the numbers in square brackets are the
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921): tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
The numbers with # are CPAN RT IDs (http://rt.cpan.org/). The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
* [ 1963613 ] ComplexTypes die on ->can('FOOBAR');
* [ 1943667 ] Error parsing complexType/extension * [ 1943667 ] Error parsing complexType/extension
* [ 1960650 ] multi-level inheritance of complexTypes fails * [ 1960650 ] multi-level inheritance of complexTypes fails
* [ 1960319 ] ComplexType as_hash_ref returns objects on maximum depth * [ 1960319 ] ComplexType as_hash_ref returns objects on maximum depth
+11 -4
View File
@@ -273,14 +273,13 @@ README
t/002_parse_wsdl.t t/002_parse_wsdl.t
t/003_wsdl_based_serializer.t t/003_wsdl_based_serializer.t
t/006_client.t t/006_client.t
t/007_envelope.t
t/008_client_wsdl_complexType.t t/008_client_wsdl_complexType.t
t/009_data_classes.t t/009_data_classes.t
t/011_simpleType.t t/011_simpleType.t
t/012_element.t t/012_element.t
t/013_complexType.t t/013_complexType.t
t/016_client_object.t t/016_client_object.t
t/020_storable.t t/094_cpan_meta.t
t/095_copying.t t/095_copying.t
t/096_characters.t t/096_characters.t
t/097_kwalitee.t t/097_kwalitee.t
@@ -332,7 +331,6 @@ t/acceptance/wsdl/WSDLParser/imported.xsd
t/acceptance/wsdl/WSDLParser/xsd_import_no_location.wsdl t/acceptance/wsdl/WSDLParser/xsd_import_no_location.wsdl
t/acceptance/wsdl/WSDLParser_import_loop.wsdl t/acceptance/wsdl/WSDLParser_import_loop.wsdl
t/contributed.wsdl t/contributed.wsdl
t/Expat/03_wsdl.t
t/lib/Mod_Perl2Test.pm t/lib/Mod_Perl2Test.pm
t/lib/MyComplexType.pm t/lib/MyComplexType.pm
t/lib/MyElement.pm t/lib/MyElement.pm
@@ -362,6 +360,7 @@ t/SOAP/WSDL/05_simpleType-union.t
t/SOAP/WSDL/06_keep_alive.t t/SOAP/WSDL/06_keep_alive.t
t/SOAP/WSDL/11_helloworld.NET.t t/SOAP/WSDL/11_helloworld.NET.t
t/SOAP/WSDL/12_binding.t t/SOAP/WSDL/12_binding.t
t/SOAP/WSDL/Base.t
t/SOAP/WSDL/Client.t t/SOAP/WSDL/Client.t
t/SOAP/WSDL/Client/Base.t t/SOAP/WSDL/Client/Base.t
t/SOAP/WSDL/Definitions.t t/SOAP/WSDL/Definitions.t
@@ -375,6 +374,7 @@ t/SOAP/WSDL/Factory/Deserializer.t
t/SOAP/WSDL/Factory/Serializer.t t/SOAP/WSDL/Factory/Serializer.t
t/SOAP/WSDL/Factory/Transport.t t/SOAP/WSDL/Factory/Transport.t
t/SOAP/WSDL/Generator/Template.t t/SOAP/WSDL/Generator/Template.t
t/SOAP/WSDL/Generator/Template/XSD/Import.t
t/SOAP/WSDL/Generator/Visitor.t t/SOAP/WSDL/Generator/Visitor.t
t/SOAP/WSDL/Generator/Visitor/Typemap.t t/SOAP/WSDL/Generator/Visitor/Typemap.t
t/SOAP/WSDL/Generator/XSD.t t/SOAP/WSDL/Generator/XSD.t
@@ -403,7 +403,6 @@ t/SOAP/WSDL/XSD/Enumeration.t
t/SOAP/WSDL/XSD/Schema.t t/SOAP/WSDL/XSD/Schema.t
t/SOAP/WSDL/XSD/SimpleType.t t/SOAP/WSDL/XSD/SimpleType.t
t/SOAP/WSDL/XSD/Typelib/Attribute.t t/SOAP/WSDL/XSD/Typelib/Attribute.t
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
t/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.t t/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.t
@@ -414,8 +413,14 @@ t/SOAP/WSDL/XSD/Typelib/Builtin/date.t
t/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.t t/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.t
t/SOAP/WSDL/XSD/Typelib/Builtin/decimal.t t/SOAP/WSDL/XSD/Typelib/Builtin/decimal.t
t/SOAP/WSDL/XSD/Typelib/Builtin/double.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/ENTITY.t
t/SOAP/WSDL/XSD/Typelib/Builtin/float.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/hexBinary.t
t/SOAP/WSDL/XSD/Typelib/Builtin/ID.t t/SOAP/WSDL/XSD/Typelib/Builtin/ID.t
t/SOAP/WSDL/XSD/Typelib/Builtin/IDREF.t t/SOAP/WSDL/XSD/Typelib/Builtin/IDREF.t
@@ -435,6 +440,7 @@ t/SOAP/WSDL/XSD/Typelib/Builtin/nonPositiveInteger.t
t/SOAP/WSDL/XSD/Typelib/Builtin/normalizedString.t t/SOAP/WSDL/XSD/Typelib/Builtin/normalizedString.t
t/SOAP/WSDL/XSD/Typelib/Builtin/NOTATION.t t/SOAP/WSDL/XSD/Typelib/Builtin/NOTATION.t
t/SOAP/WSDL/XSD/Typelib/Builtin/positiveInteger.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/short.t
t/SOAP/WSDL/XSD/Typelib/Builtin/string.t t/SOAP/WSDL/XSD/Typelib/Builtin/string.t
t/SOAP/WSDL/XSD/Typelib/Builtin/time.t t/SOAP/WSDL/XSD/Typelib/Builtin/time.t
@@ -452,4 +458,5 @@ t/SOAP/WSDL_NO_MESSAGE.wsdl
t/SOAP/WSDL_NO_PORTTYPE.wsdl t/SOAP/WSDL_NO_PORTTYPE.wsdl
t/test.wsdl t/test.wsdl
TEST_COVERAGE TEST_COVERAGE
test_html.pl
TODO TODO
+82 -82
View File
@@ -1,6 +1,6 @@
--- ---
name: SOAP-WSDL name: SOAP-WSDL
version: 2.00.03 version: 2.00.06
author: author:
- 'Martin Kutter <martin.kutter@fen-net.de>' - 'Martin Kutter <martin.kutter@fen-net.de>'
abstract: SOAP with WSDL support abstract: SOAP with WSDL support
@@ -41,220 +41,220 @@ build_requires:
provides: provides:
SOAP::WSDL: SOAP::WSDL:
file: lib/SOAP/WSDL.pm file: lib/SOAP/WSDL.pm
version: 2.00.03 version: 2.00.06
SOAP::WSDL::Base: SOAP::WSDL::Base:
file: lib/SOAP/WSDL/Base.pm file: lib/SOAP/WSDL/Base.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Binding: SOAP::WSDL::Binding:
file: lib/SOAP/WSDL/Binding.pm file: lib/SOAP/WSDL/Binding.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Client: SOAP::WSDL::Client:
file: lib/SOAP/WSDL/Client.pm file: lib/SOAP/WSDL/Client.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Client::Base: SOAP::WSDL::Client::Base:
file: lib/SOAP/WSDL/Client/Base.pm file: lib/SOAP/WSDL/Client/Base.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Definitions: SOAP::WSDL::Definitions:
file: lib/SOAP/WSDL/Definitions.pm file: lib/SOAP/WSDL/Definitions.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Deserializer::Hash: SOAP::WSDL::Deserializer::Hash:
file: lib/SOAP/WSDL/Deserializer/Hash.pm file: lib/SOAP/WSDL/Deserializer/Hash.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Deserializer::SOM: SOAP::WSDL::Deserializer::SOM:
file: lib/SOAP/WSDL/Deserializer/SOM.pm file: lib/SOAP/WSDL/Deserializer/SOM.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Deserializer::XSD: SOAP::WSDL::Deserializer::XSD:
file: lib/SOAP/WSDL/Deserializer/XSD.pm file: lib/SOAP/WSDL/Deserializer/XSD.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Expat::Base: SOAP::WSDL::Expat::Base:
file: lib/SOAP/WSDL/Expat/Base.pm file: lib/SOAP/WSDL/Expat/Base.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Expat::Message2Hash: SOAP::WSDL::Expat::Message2Hash:
file: lib/SOAP/WSDL/Expat/Message2Hash.pm file: lib/SOAP/WSDL/Expat/Message2Hash.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Expat::MessageParser: SOAP::WSDL::Expat::MessageParser:
file: lib/SOAP/WSDL/Expat/MessageParser.pm file: lib/SOAP/WSDL/Expat/MessageParser.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Expat::MessageStreamParser: SOAP::WSDL::Expat::MessageStreamParser:
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Expat::WSDLParser: SOAP::WSDL::Expat::WSDLParser:
file: lib/SOAP/WSDL/Expat/WSDLParser.pm file: lib/SOAP/WSDL/Expat/WSDLParser.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Factory::Deserializer: SOAP::WSDL::Factory::Deserializer:
file: lib/SOAP/WSDL/Factory/Deserializer.pm file: lib/SOAP/WSDL/Factory/Deserializer.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Factory::Generator: SOAP::WSDL::Factory::Generator:
file: lib/SOAP/WSDL/Factory/Generator.pm file: lib/SOAP/WSDL/Factory/Generator.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Factory::Serializer: SOAP::WSDL::Factory::Serializer:
file: lib/SOAP/WSDL/Factory/Serializer.pm file: lib/SOAP/WSDL/Factory/Serializer.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Factory::Transport: SOAP::WSDL::Factory::Transport:
file: lib/SOAP/WSDL/Factory/Transport.pm file: lib/SOAP/WSDL/Factory/Transport.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Iterator::WSDL11: SOAP::WSDL::Generator::Iterator::WSDL11:
file: lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm file: lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::PrefixResolver: SOAP::WSDL::Generator::PrefixResolver:
file: lib/SOAP/WSDL/Generator/PrefixResolver.pm file: lib/SOAP/WSDL/Generator/PrefixResolver.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Template: SOAP::WSDL::Generator::Template:
file: lib/SOAP/WSDL/Generator/Template.pm file: lib/SOAP/WSDL/Generator/Template.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Template::Plugin::XSD: SOAP::WSDL::Generator::Template::Plugin::XSD:
file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Template::XSD: SOAP::WSDL::Generator::Template::XSD:
file: lib/SOAP/WSDL/Generator/Template/XSD.pm file: lib/SOAP/WSDL/Generator/Template/XSD.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Visitor: SOAP::WSDL::Generator::Visitor:
file: lib/SOAP/WSDL/Generator/Visitor.pm file: lib/SOAP/WSDL/Generator/Visitor.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Visitor::Typelib: SOAP::WSDL::Generator::Visitor::Typelib:
file: lib/SOAP/WSDL/Generator/Visitor/Typelib.pm file: lib/SOAP/WSDL/Generator/Visitor/Typelib.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Generator::Visitor::Typemap: SOAP::WSDL::Generator::Visitor::Typemap:
file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Message: SOAP::WSDL::Message:
file: lib/SOAP/WSDL/Message.pm file: lib/SOAP/WSDL/Message.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::OpMessage: SOAP::WSDL::OpMessage:
file: lib/SOAP/WSDL/OpMessage.pm file: lib/SOAP/WSDL/OpMessage.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Operation: SOAP::WSDL::Operation:
file: lib/SOAP/WSDL/Operation.pm file: lib/SOAP/WSDL/Operation.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Part: SOAP::WSDL::Part:
file: lib/SOAP/WSDL/Part.pm file: lib/SOAP/WSDL/Part.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Port: SOAP::WSDL::Port:
file: lib/SOAP/WSDL/Port.pm file: lib/SOAP/WSDL/Port.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::PortType: SOAP::WSDL::PortType:
file: lib/SOAP/WSDL/PortType.pm file: lib/SOAP/WSDL/PortType.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::SOAP::Address: SOAP::WSDL::SOAP::Address:
file: lib/SOAP/WSDL/SOAP/Address.pm file: lib/SOAP/WSDL/SOAP/Address.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::SOAP::Body: SOAP::WSDL::SOAP::Body:
file: lib/SOAP/WSDL/SOAP/Body.pm file: lib/SOAP/WSDL/SOAP/Body.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::SOAP::Header: SOAP::WSDL::SOAP::Header:
file: lib/SOAP/WSDL/SOAP/Header.pm file: lib/SOAP/WSDL/SOAP/Header.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::SOAP::HeaderFault: SOAP::WSDL::SOAP::HeaderFault:
file: lib/SOAP/WSDL/SOAP/HeaderFault.pm file: lib/SOAP/WSDL/SOAP/HeaderFault.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::SOAP::Operation: SOAP::WSDL::SOAP::Operation:
file: lib/SOAP/WSDL/SOAP/Operation.pm file: lib/SOAP/WSDL/SOAP/Operation.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::SOAP::Typelib::Fault11: SOAP::WSDL::SOAP::Typelib::Fault11:
file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Serializer::XSD: SOAP::WSDL::Serializer::XSD:
file: lib/SOAP/WSDL/Serializer/XSD.pm file: lib/SOAP/WSDL/Serializer/XSD.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Server: SOAP::WSDL::Server:
file: lib/SOAP/WSDL/Server.pm file: lib/SOAP/WSDL/Server.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Server::CGI: SOAP::WSDL::Server::CGI:
file: lib/SOAP/WSDL/Server/CGI.pm file: lib/SOAP/WSDL/Server/CGI.pm
version: 2.00.03 version: 2.00.06
SOAP::WSDL::Server::Mod_Perl2: SOAP::WSDL::Server::Mod_Perl2:
file: lib/SOAP/WSDL/Server/Mod_Perl2.pm file: lib/SOAP/WSDL/Server/Mod_Perl2.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Service: SOAP::WSDL::Service:
file: lib/SOAP/WSDL/Service.pm file: lib/SOAP/WSDL/Service.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Transport::HTTP: SOAP::WSDL::Transport::HTTP:
file: lib/SOAP/WSDL/Transport/HTTP.pm file: lib/SOAP/WSDL/Transport/HTTP.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Transport::Loopback: SOAP::WSDL::Transport::Loopback:
file: lib/SOAP/WSDL/Transport/Loopback.pm file: lib/SOAP/WSDL/Transport/Loopback.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Transport::Test: SOAP::WSDL::Transport::Test:
file: lib/SOAP/WSDL/Transport/Test.pm file: lib/SOAP/WSDL/Transport/Test.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::TypeLookup: SOAP::WSDL::TypeLookup:
file: lib/SOAP/WSDL/TypeLookup.pm file: lib/SOAP/WSDL/TypeLookup.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::Types: SOAP::WSDL::Types:
file: lib/SOAP/WSDL/Types.pm file: lib/SOAP/WSDL/Types.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Annotation: SOAP::WSDL::XSD::Annotation:
file: lib/SOAP/WSDL/XSD/Annotation.pm file: lib/SOAP/WSDL/XSD/Annotation.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Attribute: SOAP::WSDL::XSD::Attribute:
file: lib/SOAP/WSDL/XSD/Attribute.pm file: lib/SOAP/WSDL/XSD/Attribute.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::AttributeGroup: SOAP::WSDL::XSD::AttributeGroup:
file: lib/SOAP/WSDL/XSD/AttributeGroup.pm file: lib/SOAP/WSDL/XSD/AttributeGroup.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Builtin: SOAP::WSDL::XSD::Builtin:
file: lib/SOAP/WSDL/XSD/Builtin.pm file: lib/SOAP/WSDL/XSD/Builtin.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::ComplexType: SOAP::WSDL::XSD::ComplexType:
file: lib/SOAP/WSDL/XSD/ComplexType.pm file: lib/SOAP/WSDL/XSD/ComplexType.pm
version: 2.00.03 version: 2.00.06
SOAP::WSDL::XSD::Element: SOAP::WSDL::XSD::Element:
file: lib/SOAP/WSDL/XSD/Element.pm file: lib/SOAP/WSDL/XSD/Element.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Enumeration: SOAP::WSDL::XSD::Enumeration:
file: lib/SOAP/WSDL/XSD/Enumeration.pm file: lib/SOAP/WSDL/XSD/Enumeration.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::FractionDigits: SOAP::WSDL::XSD::FractionDigits:
file: lib/SOAP/WSDL/XSD/FractionDigits.pm file: lib/SOAP/WSDL/XSD/FractionDigits.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Group: SOAP::WSDL::XSD::Group:
file: lib/SOAP/WSDL/XSD/Group.pm file: lib/SOAP/WSDL/XSD/Group.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Length: SOAP::WSDL::XSD::Length:
file: lib/SOAP/WSDL/XSD/Length.pm file: lib/SOAP/WSDL/XSD/Length.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::MaxExclusive: SOAP::WSDL::XSD::MaxExclusive:
file: lib/SOAP/WSDL/XSD/MaxExclusive.pm file: lib/SOAP/WSDL/XSD/MaxExclusive.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::MaxInclusive: SOAP::WSDL::XSD::MaxInclusive:
file: lib/SOAP/WSDL/XSD/MaxInclusive.pm file: lib/SOAP/WSDL/XSD/MaxInclusive.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::MaxLength: SOAP::WSDL::XSD::MaxLength:
file: lib/SOAP/WSDL/XSD/MaxLength.pm file: lib/SOAP/WSDL/XSD/MaxLength.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::MinExclusive: SOAP::WSDL::XSD::MinExclusive:
file: lib/SOAP/WSDL/XSD/MinExclusive.pm file: lib/SOAP/WSDL/XSD/MinExclusive.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::MinInclusive: SOAP::WSDL::XSD::MinInclusive:
file: lib/SOAP/WSDL/XSD/MinInclusive.pm file: lib/SOAP/WSDL/XSD/MinInclusive.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::MinLength: SOAP::WSDL::XSD::MinLength:
file: lib/SOAP/WSDL/XSD/MinLength.pm file: lib/SOAP/WSDL/XSD/MinLength.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Pattern: SOAP::WSDL::XSD::Pattern:
file: lib/SOAP/WSDL/XSD/Pattern.pm file: lib/SOAP/WSDL/XSD/Pattern.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Schema: SOAP::WSDL::XSD::Schema:
file: lib/SOAP/WSDL/XSD/Schema.pm file: lib/SOAP/WSDL/XSD/Schema.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Schema::Builtin: SOAP::WSDL::XSD::Schema::Builtin:
file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::SimpleType: SOAP::WSDL::XSD::SimpleType:
file: lib/SOAP/WSDL/XSD/SimpleType.pm file: lib/SOAP/WSDL/XSD/SimpleType.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::TotalDigits: SOAP::WSDL::XSD::TotalDigits:
file: lib/SOAP/WSDL/XSD/TotalDigits.pm file: lib/SOAP/WSDL/XSD/TotalDigits.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Attribute: SOAP::WSDL::XSD::Typelib::Attribute:
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::AttributeSet: SOAP::WSDL::XSD::Typelib::AttributeSet:
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Builtin: SOAP::WSDL::XSD::Typelib::Builtin:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Builtin::ENTITY: SOAP::WSDL::XSD::Typelib::Builtin::ENTITY:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm
SOAP::WSDL::XSD::Typelib::Builtin::ID: SOAP::WSDL::XSD::Typelib::Builtin::ID:
@@ -279,14 +279,14 @@ provides:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
SOAP::WSDL::XSD::Typelib::Builtin::anyType: SOAP::WSDL::XSD::Typelib::Builtin::anyType:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Builtin::anyURI: SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary: SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm
SOAP::WSDL::XSD::Typelib::Builtin::boolean: SOAP::WSDL::XSD::Typelib::Builtin::boolean:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Builtin::byte: SOAP::WSDL::XSD::Typelib::Builtin::byte:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm
SOAP::WSDL::XSD::Typelib::Builtin::date: SOAP::WSDL::XSD::Typelib::Builtin::date:
@@ -339,7 +339,7 @@ provides:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm
SOAP::WSDL::XSD::Typelib::Builtin::time: SOAP::WSDL::XSD::Typelib::Builtin::time:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Builtin::token: SOAP::WSDL::XSD::Typelib::Builtin::token:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm
SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte: SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte:
@@ -352,20 +352,20 @@ provides:
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
SOAP::WSDL::XSD::Typelib::ComplexType: SOAP::WSDL::XSD::Typelib::ComplexType:
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
version: 2.1.0 version: 2.00.05
SOAP::WSDL::XSD::Typelib::Element: SOAP::WSDL::XSD::Typelib::Element:
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::SimpleType: SOAP::WSDL::XSD::Typelib::SimpleType:
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::Typelib::SimpleType::restriction: SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
version: 2.00.03 version: 2.00.05
SOAP::WSDL::XSD::WhiteSpace: SOAP::WSDL::XSD::WhiteSpace:
file: lib/SOAP/WSDL/XSD/WhiteSpace.pm file: lib/SOAP/WSDL/XSD/WhiteSpace.pm
version: 2.00.03 version: 2.00.05
generated_by: Module::Build version 0.2808 generated_by: Module::Build version 0.3
meta-spec: meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.2.html url: http://module-build.sourceforge.net/META-spec-v1.2.html
version: 1.2 version: 1.2
+2 -1
View File
@@ -1,4 +1,5 @@
# Note: this file was auto-generated by Module::Build::Compat version 0.03 # Note: this file was auto-generated by Module::Build::Compat version 0.30
require 5.8.0;
use Module::Build::Compat 0.02; use Module::Build::Compat 0.02;
Module::Build::Compat->run_build_pl(args => \@ARGV); Module::Build::Compat->run_build_pl(args => \@ARGV);
+10 -1
View File
@@ -41,4 +41,13 @@ If you don't have Module::Build installed, you may also use
make install make install
Note that Module::Build is the recommended installer - make will not run Note that Module::Build is the recommended installer - make will not run
all tests provided with SOAP-WSDL. 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.
+11 -5
View File
@@ -6,12 +6,18 @@
# Note that this shell script requires Devel::CoverX::Covered - if you # Note that this shell script requires Devel::CoverX::Covered - if you
# don't have it, comment out the line noted below # don't have it, comment out the line noted below
# #
cd t/
cover -delete perl -Ilib -It/lib -MTAP::Harness -MFile::Find::Rule -e '
find . -type f -name '*.t' | xargs -n 1 /usr/bin/perl -MDevel::Cover=-silent,1,-summary,0 -I../lib > /dev/null 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 # Devel::CoverX::Covered
covered runs # covered runs
cover -ignore_re \.t$ -ignore_re ^lib -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch" cover -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch"
+29 -10
View File
@@ -82,17 +82,17 @@ my $person = {
my $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl', my $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl',
sloppy_integers => 1, sloppy_integers => 1,
check_values => 0, check_values => 0,
check_values => 0,
validation => 0, validation => 0,
ignore_facets => 1, ignore_facets => 1,
); );
#
# Call all variants once to allow their first-time tasks to be done
#
my $call = $compile->compileClient('ListPerson'); my $call = $compile->compileClient('ListPerson');
$call->({ in => undef}); $call->({ in => undef});
# Initialize SOAP::Lite
my $deserializer = SOAP::Deserializer->new();
# Initialize SOAP::WSDL interface # Initialize SOAP::WSDL interface
my $soap = MyInterfaces::TestService::TestPort->new(); my $soap = MyInterfaces::TestService::TestPort->new();
# Load all classes - XML::Compile has created everything before, too # Load all classes - XML::Compile has created everything before, too
@@ -102,6 +102,15 @@ my $lite = SOAP::Lite->new()->default_ns('http://www.example.org/benchmark/')
->proxy('http://localhost:81/soap-wsdl-test/person.pl'); ->proxy('http://localhost:81/soap-wsdl-test/person.pl');
$lite->on_action( sub { 'http://www.example.org/benchmark/ListPerson' } ); $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 # # register for SOAP 1.1
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' ); SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
my $wsdl_xs = MyInterfaces::TestService::TestPort->new(); my $wsdl_xs = MyInterfaces::TestService::TestPort->new();
@@ -114,24 +123,34 @@ SOAP::Lite - $SOAP::Lite::VERSION
SOAP::WSDL - $SOAP::WSDL::Client::VERSION SOAP::WSDL - $SOAP::WSDL::Client::VERSION
SOAP::WSDL_XS - $SOAP::WSDL::Deserializer::XSD_XS::VERSION; SOAP::WSDL_XS - $SOAP::WSDL::Deserializer::XSD_XS::VERSION;
XML::Compile::SOAP - $XML::Compile::SOAP::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 Benchmark $n: Store result in private variable and destroy it
"; ";
$n++; $n++;
cmpthese $count, { cmpthese $count, {
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
'XML::Compile' => sub { my $result = $call->() },
'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) },
'SOAP::Lite' => sub { my $som = $lite->call('ListPerson') }, '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"; print "\nBenchmark $n: Push result on list\n";
$n++; $n++;
cmpthese $count, { cmpthese $count, {
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
'XML::Compile' => sub { push @data, $call->() },
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') }, '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 = (); @data = ();
+5 -5
View File
@@ -5,7 +5,7 @@ use lib '../../SOAP-WSDL_XS/blib/arch';
use strict; use strict;
use Benchmark; use Benchmark;
use Storable; use Storable;
#use SOAP::WSDL::Deserializer::XSD_XS; use SOAP::WSDL::Deserializer::XSD_XS;
use SOAP::WSDL::Factory::Deserializer; use SOAP::WSDL::Factory::Deserializer;
# # register for SOAP 1.1 # # register for SOAP 1.1
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' ); SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
@@ -16,10 +16,10 @@ my @data = ();
my $soap = MyInterfaces::TestService::TestPort->new(); my $soap = MyInterfaces::TestService::TestPort->new();
# Load all classes - XML::Compile has created everything before, too # Load all classes - XML::Compile has created everything before, too
#timethis 100, sub { $soap->ListPerson({}) }; timethis 150, sub { $soap->ListPerson({}) };
#timethis 50, sub { push @data, $soap->ListPerson({}) }; timethis 300, sub { push @data, $soap->ListPerson({}) };
#@data = (); @data = ();
# timethis 50, sub { push @data, $soap->ListPerson({}) }; timethis 300, sub { push @data, $soap->ListPerson({}) };
# for (1..50) { push @data, $soap->ListPerson({}) }; # for (1..50) { push @data, $soap->ListPerson({}) };
#print $soap->ListPerson({}); #print $soap->ListPerson({});
+24 -8
View File
@@ -10,13 +10,13 @@ use Term::ReadKey;
my %opt = ( my %opt = (
url => '', url => '',
prefix => undef, prefix => 'My',
attribute_prefix => 'MyAttributes', attribute_prefix => undef,
type_prefix => 'MyTypes', type_prefix => undef,
element_prefix => 'MyElements', element_prefix => undef,
typemap_prefix => 'MyTypemaps', typemap_prefix => undef,
interface_prefix => 'MyInterfaces', interface_prefix => undef,
server_prefix => 'MyServer', server_prefix => undef,
base_path => 'lib/', base_path => 'lib/',
proxy => undef, proxy => undef,
generator => 'XSD', generator => 'XSD',
@@ -91,6 +91,20 @@ my $parser = SOAP::WSDL::Expat::WSDLParser->new({
user_agent => $lwp, 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 $definitions = $parser->parse_uri( $url );
my %typemap = (); my %typemap = ();
@@ -150,7 +164,9 @@ wsdl2perl.pl - create perl bindings for SOAP webservices.
NAME SHORT DESCRITPION NAME SHORT DESCRITPION
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
prefix p Prefix for both type and element classes. prefix p Prefix for 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. attribute_prefix a Prefix for XML attribute classes.
Default: MyAttributes Default: MyAttributes
type_prefix t Prefix for type classes. type_prefix t Prefix for type classes.
+34 -1
View File
@@ -1,3 +1,4 @@
package MyElements::CountCookies; package MyElements::CountCookies;
use strict; use strict;
use warnings; use warnings;
@@ -17,13 +18,30 @@ use base qw(
SOAP::WSDL::XSD::Typelib::ComplexType 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 } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -36,6 +54,21 @@ MyElements::CountCookies
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
CountCookies from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
+44 -6
View File
@@ -1,3 +1,4 @@
package MyElements::CountCookiesResponse; package MyElements::CountCookiesResponse;
use strict; use strict;
use warnings; use warnings;
@@ -16,6 +17,14 @@ use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::ComplexType 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 Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
@@ -26,14 +35,18 @@ Class::Std::initialize();
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>); my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
__PACKAGE__->_factory( __PACKAGE__->_factory(
[ qw( [ qw( CountCookiesResult
CountCookiesResult
) ], ) ],
{ {
CountCookiesResult => \%CountCookiesResult_of, 'CountCookiesResult' => \%CountCookiesResult_of,
}, },
{ {
CountCookiesResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int', 'CountCookiesResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
},
{
'CountCookiesResult' => 'CountCookiesResult',
} }
); );
@@ -44,11 +57,12 @@ __PACKAGE__->_factory(
} # end of BLOCK } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -61,6 +75,30 @@ MyElements::CountCookiesResponse
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
CountCookiesResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
+34 -1
View File
@@ -1,3 +1,4 @@
package MyElements::GetFortuneCookie; package MyElements::GetFortuneCookie;
use strict; use strict;
use warnings; use warnings;
@@ -17,13 +18,30 @@ use base qw(
SOAP::WSDL::XSD::Typelib::ComplexType 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 } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -36,6 +54,21 @@ MyElements::GetFortuneCookie
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
GetFortuneCookie from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
@@ -1,3 +1,4 @@
package MyElements::GetFortuneCookieResponse; package MyElements::GetFortuneCookieResponse;
use strict; use strict;
use warnings; use warnings;
@@ -16,6 +17,14 @@ use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::ComplexType 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 Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
@@ -26,14 +35,18 @@ Class::Std::initialize();
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>); my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
__PACKAGE__->_factory( __PACKAGE__->_factory(
[ qw( [ qw( GetFortuneCookieResult
GetFortuneCookieResult
) ], ) ],
{ {
GetFortuneCookieResult => \%GetFortuneCookieResult_of, 'GetFortuneCookieResult' => \%GetFortuneCookieResult_of,
}, },
{ {
GetFortuneCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string', 'GetFortuneCookieResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
},
{
'GetFortuneCookieResult' => 'GetFortuneCookieResult',
} }
); );
@@ -44,11 +57,12 @@ __PACKAGE__->_factory(
} # end of BLOCK } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -61,6 +75,30 @@ MyElements::GetFortuneCookieResponse
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
GetFortuneCookieResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
+44 -6
View File
@@ -1,3 +1,4 @@
package MyElements::GetSpecificCookie; package MyElements::GetSpecificCookie;
use strict; use strict;
use warnings; use warnings;
@@ -16,6 +17,14 @@ use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::ComplexType 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 Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
@@ -26,14 +35,18 @@ Class::Std::initialize();
my %index_of :ATTR(:get<index>); my %index_of :ATTR(:get<index>);
__PACKAGE__->_factory( __PACKAGE__->_factory(
[ qw( [ qw( index
index
) ], ) ],
{ {
index => \%index_of, 'index' => \%index_of,
}, },
{ {
index => 'SOAP::WSDL::XSD::Typelib::Builtin::int', 'index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
},
{
'index' => 'index',
} }
); );
@@ -44,11 +57,12 @@ __PACKAGE__->_factory(
} # end of BLOCK } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -61,6 +75,30 @@ MyElements::GetSpecificCookie
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
GetSpecificCookie from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
@@ -1,3 +1,4 @@
package MyElements::GetSpecificCookieResponse; package MyElements::GetSpecificCookieResponse;
use strict; use strict;
use warnings; use warnings;
@@ -16,6 +17,14 @@ use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::ComplexType 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 Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
@@ -26,14 +35,18 @@ Class::Std::initialize();
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>); my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
__PACKAGE__->_factory( __PACKAGE__->_factory(
[ qw( [ qw( GetSpecificCookieResult
GetSpecificCookieResult
) ], ) ],
{ {
GetSpecificCookieResult => \%GetSpecificCookieResult_of, 'GetSpecificCookieResult' => \%GetSpecificCookieResult_of,
}, },
{ {
GetSpecificCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string', 'GetSpecificCookieResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
},
{
'GetSpecificCookieResult' => 'GetSpecificCookieResult',
} }
); );
@@ -44,11 +57,12 @@ __PACKAGE__->_factory(
} # end of BLOCK } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -61,6 +75,30 @@ MyElements::GetSpecificCookieResponse
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
GetSpecificCookieResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
+8 -3
View File
@@ -1,3 +1,4 @@
package MyElements::int; package MyElements::int;
use strict; use strict;
use warnings; use warnings;
@@ -14,14 +15,12 @@ __PACKAGE__->__set_ref();
use base qw( use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::Builtin::int SOAP::WSDL::XSD::Typelib::Builtin::int
); );
}
} # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -34,6 +33,12 @@ MyElements::int
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
int from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. int from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
=head1 METHODS =head1 METHODS
=head2 new =head2 new
+34 -1
View File
@@ -1,3 +1,4 @@
package MyElements::readNodeCount; package MyElements::readNodeCount;
use strict; use strict;
use warnings; use warnings;
@@ -17,13 +18,30 @@ use base qw(
SOAP::WSDL::XSD::Typelib::ComplexType 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 } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -36,6 +54,21 @@ MyElements::readNodeCount
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
readNodeCount from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
@@ -1,3 +1,4 @@
package MyElements::readNodeCountResponse; package MyElements::readNodeCountResponse;
use strict; use strict;
use warnings; use warnings;
@@ -16,6 +17,14 @@ use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::ComplexType 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 Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
@@ -26,14 +35,18 @@ Class::Std::initialize();
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>); my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
__PACKAGE__->_factory( __PACKAGE__->_factory(
[ qw( [ qw( readNodeCountResult
readNodeCountResult
) ], ) ],
{ {
readNodeCountResult => \%readNodeCountResult_of, 'readNodeCountResult' => \%readNodeCountResult_of,
}, },
{ {
readNodeCountResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int', 'readNodeCountResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
},
{
'readNodeCountResult' => 'readNodeCountResult',
} }
); );
@@ -44,11 +57,12 @@ __PACKAGE__->_factory(
} # end of BLOCK } # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -61,6 +75,30 @@ MyElements::readNodeCountResponse
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
readNodeCountResponse from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx. 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 =head1 METHODS
=head2 new =head2 new
+11 -6
View File
@@ -1,27 +1,26 @@
package MyElements::string; package MyElements::string;
use strict; use strict;
use warnings; use warnings;
{ # BLOCK to scope variables { # BLOCK to scope variables
sub get_xmlns { 'http://www.webserviceX.NET' } sub get_xmlns { 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx' }
__PACKAGE__->__set_name('string'); __PACKAGE__->__set_name('string');
__PACKAGE__->__set_nillable(true); __PACKAGE__->__set_nillable(1);
__PACKAGE__->__set_minOccurs(); __PACKAGE__->__set_minOccurs();
__PACKAGE__->__set_maxOccurs(); __PACKAGE__->__set_maxOccurs();
__PACKAGE__->__set_ref(); __PACKAGE__->__set_ref();
use base qw( use base qw(
SOAP::WSDL::XSD::Typelib::Element SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::Builtin::string SOAP::WSDL::XSD::Typelib::Builtin::string
); );
}
} # end of BLOCK
1; 1;
# __END__
=pod =pod
@@ -32,7 +31,13 @@ MyElements::string
=head1 DESCRIPTION =head1 DESCRIPTION
Perl data type class for the XML Schema defined element Perl data type class for the XML Schema defined element
string from the namespace http://www.webserviceX.NET. string from the namespace http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
=head1 METHODS =head1 METHODS
@@ -13,6 +13,8 @@ sub START {
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy}; $_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
$_[0]->set_class_resolver('MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie') $_[0]->set_class_resolver('MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie')
if not $_[2]->{class_resolver}; if not $_[2]->{class_resolver};
$_[0]->set_prefix($_[2]->{use_prefix}) if exists $_[2]->{use_prefix};
} }
sub readNodeCount { sub readNodeCount {
@@ -24,10 +26,11 @@ sub readNodeCount {
style => 'document', style => 'document',
body => { body => {
'use' => 'literal',
namespace => '', 'use' => 'literal',
encodingStyle => '', namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
parts => [qw( MyElements::readNodeCount )], encodingStyle => '',
parts => [qw( MyElements::readNodeCount )],
}, },
header => { header => {
@@ -38,6 +41,7 @@ sub readNodeCount {
}, $body, $header); }, $body, $header);
} }
sub GetFortuneCookie { sub GetFortuneCookie {
my ($self, $body, $header) = @_; my ($self, $body, $header) = @_;
die "GetFortuneCookie must be called as object method (\$self is <$self>)" if not blessed($self); die "GetFortuneCookie must be called as object method (\$self is <$self>)" if not blessed($self);
@@ -47,10 +51,11 @@ sub GetFortuneCookie {
style => 'document', style => 'document',
body => { body => {
'use' => 'literal',
namespace => '', 'use' => 'literal',
encodingStyle => '', namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
parts => [qw( MyElements::GetFortuneCookie )], encodingStyle => '',
parts => [qw( MyElements::GetFortuneCookie )],
}, },
header => { header => {
@@ -61,6 +66,7 @@ sub GetFortuneCookie {
}, $body, $header); }, $body, $header);
} }
sub CountCookies { sub CountCookies {
my ($self, $body, $header) = @_; my ($self, $body, $header) = @_;
die "CountCookies must be called as object method (\$self is <$self>)" if not blessed($self); die "CountCookies must be called as object method (\$self is <$self>)" if not blessed($self);
@@ -70,10 +76,11 @@ sub CountCookies {
style => 'document', style => 'document',
body => { body => {
'use' => 'literal',
namespace => '', 'use' => 'literal',
encodingStyle => '', namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
parts => [qw( MyElements::CountCookies )], encodingStyle => '',
parts => [qw( MyElements::CountCookies )],
}, },
header => { header => {
@@ -84,6 +91,7 @@ sub CountCookies {
}, $body, $header); }, $body, $header);
} }
sub GetSpecificCookie { sub GetSpecificCookie {
my ($self, $body, $header) = @_; my ($self, $body, $header) = @_;
die "GetSpecificCookie must be called as object method (\$self is <$self>)" if not blessed($self); die "GetSpecificCookie must be called as object method (\$self is <$self>)" if not blessed($self);
@@ -93,10 +101,11 @@ sub GetSpecificCookie {
style => 'document', style => 'document',
body => { body => {
'use' => 'literal',
namespace => '', 'use' => 'literal',
encodingStyle => '', namespace => 'http://schemas.xmlsoap.org/wsdl/soap/',
parts => [qw( MyElements::GetSpecificCookie )], encodingStyle => '',
parts => [qw( MyElements::GetSpecificCookie )],
}, },
header => { header => {
@@ -109,6 +118,7 @@ sub GetSpecificCookie {
1; 1;
@@ -119,21 +129,20 @@ __END__
=head1 NAME =head1 NAME
MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap - SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie Web Service MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap - SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie Web Service
=head1 SYNOPSIS =head1 SYNOPSIS
use MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap; 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 $interface = MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap->new();
my $response; my $response;
$response = $interface->readNodeCount(); $response = $interface->readNodeCount();
$response = $interface->GetFortuneCookie(); $response = $interface->GetFortuneCookie();
$response = $interface->CountCookies(); $response = $interface->CountCookies();
$response = $interface->GetSpecificCookie(); $response = $interface->GetSpecificCookie();
=head1 DESCRIPTION =head1 DESCRIPTION
@@ -168,42 +177,58 @@ 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 You may pass any combination of objects, hash and list refs to these
methods, as long as you meet the structure. 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 =head3 readNodeCount
Display the number of nodes specified in fortune XML document Display the number of nodes specified in fortune XML document
$interface->readNodeCount(,, Returns a L<MyElements::readNodeCountResponse|MyElements::readNodeCountResponse> object.
$response = $interface->readNodeCount(,,
); );
=head3 GetFortuneCookie =head3 GetFortuneCookie
Get a random fortune cookie from the XML document Get a random fortune cookie from the XML document
$interface->GetFortuneCookie(,, Returns a L<MyElements::GetFortuneCookieResponse|MyElements::GetFortuneCookieResponse> object.
$response = $interface->GetFortuneCookie(,,
); );
=head3 CountCookies =head3 CountCookies
Count the actual number of nodes in the XML document of fortunes Count the actual number of nodes in the XML document of fortunes
$interface->CountCookies(,, Returns a L<MyElements::CountCookiesResponse|MyElements::CountCookiesResponse> object.
$response = $interface->CountCookies(,,
); );
=head3 GetSpecificCookie =head3 GetSpecificCookie
Get a specific cookie by the XML node number Get a specific cookie by the XML node number
$interface->GetSpecificCookie( { Returns a L<MyElements::GetSpecificCookieResponse|MyElements::GetSpecificCookieResponse> object.
$response = $interface->GetSpecificCookie( {
index => $some_value, # int index => $some_value, # int
},, },,
); );
=head1 AUTHOR =head1 AUTHOR
Generated by SOAP::WSDL on Sun Dec 16 19:58:30 2007 Generated by SOAP::WSDL on Wed Dec 3 22:05:20 2008
=pod =cut
@@ -1,3 +1,4 @@
package MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie; package MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie;
use strict; use strict;
use warnings; use warnings;
@@ -38,11 +39,13 @@ sub get_typemap {
__END__ __END__
__END__
=pod =pod
=head1 NAME =head1 NAME
MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie; - typemap for ::FullerData_x0020_Fortune_x0020_Cookie; MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie - typemap for FullerData_x0020_Fortune_x0020_Cookie
=head1 DESCRIPTION =head1 DESCRIPTION
+45 -21
View File
@@ -10,15 +10,14 @@ use Carp;
use Scalar::Util qw(blessed); use Scalar::Util qw(blessed);
use SOAP::WSDL::Client; use SOAP::WSDL::Client;
use SOAP::WSDL::Expat::WSDLParser; use SOAP::WSDL::Expat::WSDLParser;
use Class::Std::Fast; use Class::Std::Fast constructor => 'none';
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType; use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
use LWP::UserAgent; use LWP::UserAgent;
use version; our $VERSION= qv('2.00.03'); use version; our $VERSION = qv('2.00.06');
my %no_dispatch_of :ATTR(:name<no_dispatch>); my %no_dispatch_of :ATTR(:name<no_dispatch>);
my %wsdl_of :ATTR(:name<wsdl>); my %wsdl_of :ATTR(:name<wsdl>);
my %proxy_of :ATTR(:name<proxy>);
my %autotype_of :ATTR(:name<autotype>); my %autotype_of :ATTR(:name<autotype>);
my %outputxml_of :ATTR(:name<outputxml> :default<0>); my %outputxml_of :ATTR(:name<outputxml> :default<0>);
my %outputtree_of :ATTR(:name<outputtree>); my %outputtree_of :ATTR(:name<outputtree>);
@@ -42,7 +41,6 @@ my %LOOKUP = (
no_dispatch => \%no_dispatch_of, no_dispatch => \%no_dispatch_of,
class_resolver => \%class_resolver_of, class_resolver => \%class_resolver_of,
wsdl => \%wsdl_of, wsdl => \%wsdl_of,
proxy => \%proxy_of,
autotype => \%autotype_of, autotype => \%autotype_of,
outputxml => \%outputxml_of, outputxml => \%outputxml_of,
outputtree => \%outputtree_of, outputtree => \%outputtree_of,
@@ -94,12 +92,30 @@ for my $method (keys %LOOKUP ) {
} }
my $ident = ident $self; my $ident = ident $self;
$self->wsdlinit() if ($wsdl_of{ $ident });
$client_of{ $ident } = SOAP::WSDL::Client->new(); $client_of{ $ident } = SOAP::WSDL::Client->new();
$self->wsdlinit() if ($wsdl_of{ $ident });
return $self; return $self;
} }
} }
sub set_proxy {
my $self = shift;
return $self->get_client()->set_proxy(@_);
}
sub get_proxy {
my $self = shift;
return $self->get_client()->get_proxy();
}
sub proxy {
my $self = shift;
if (@_) {
return $self->set_proxy(@_);
}
return $self->get_proxy();
}
sub wsdlinit { sub wsdlinit {
my ($self, %opt) = @_; my ($self, %opt) = @_;
my $ident = ident $self; my $ident = ident $self;
@@ -132,6 +148,15 @@ sub wsdlinit {
$servicename_of{ $ident } = $opt{servicename} if $opt{servicename}; $servicename_of{ $ident } = $opt{servicename} if $opt{servicename};
$portname_of{ $ident } = $opt{portname} if $opt{portname}; $portname_of{ $ident } = $opt{portname} if $opt{portname};
$self->_wsdl_init_methods();
# pass-through keep_alive if we need it...
$self->get_client()->set_proxy(
$port_of{ $ident }->first_address()->get_location(),
$keep_alive_of{ $ident } ? (keep_alive => 1) : (),
);
return $self; return $self;
} ## end sub wsdlinit } ## end sub wsdlinit
@@ -151,6 +176,7 @@ sub _wsdl_get_port :PRIVATE {
? $service_of{ $ident }->get_port( $ns, $portname_of{ $ident } ) ? $service_of{ $ident }->get_port( $ns, $portname_of{ $ident } )
: $port_of{ $ident } = $service_of{ $ident }->get_port()->[ 0 ]; : $port_of{ $ident } = $service_of{ $ident }->get_port()->[ 0 ];
} }
sub _wsdl_get_binding :PRIVATE { sub _wsdl_get_binding :PRIVATE {
my $self = shift; my $self = shift;
my $ident = ident $self; my $ident = ident $self;
@@ -160,6 +186,7 @@ sub _wsdl_get_binding :PRIVATE {
or croak "no binding found for ", $port->get_binding(); or croak "no binding found for ", $port->get_binding();
return $binding_of{ $ident }; return $binding_of{ $ident };
} }
sub _wsdl_get_portType :PRIVATE { sub _wsdl_get_portType :PRIVATE {
my $self = shift; my $self = shift;
my $ident = ident $self; my $ident = ident $self;
@@ -169,6 +196,7 @@ sub _wsdl_get_portType :PRIVATE {
or croak "cannot find portType for " . $binding->get_type(); or croak "cannot find portType for " . $binding->get_type();
return $porttype_of{ $ident }; return $porttype_of{ $ident };
} }
sub _wsdl_init_methods :PRIVATE { sub _wsdl_init_methods :PRIVATE {
my $self = shift; my $self = shift;
my $ident = ident $self; my $ident = ident $self;
@@ -242,7 +270,7 @@ sub _wsdl_init_methods :PRIVATE {
# on_action is a no-op and just here for compatibility reasons. # on_action is a no-op and just here for compatibility reasons.
# It returns the first parameter to allow method chaining. # It returns the first parameter to allow method chaining.
sub on_action { return shift }; sub on_action { return shift }
sub call { sub call {
my ($self, $method, @data_from) = @_; my ($self, $method, @data_from) = @_;
@@ -259,12 +287,6 @@ sub call {
my $client = $client_of{ $ident }; my $client = $client_of{ $ident };
# pass-through keep_alive if we need it...
$client->set_proxy( $proxy_of{ $ident }
|| $port_of{ $ident }->first_address()->get_location(),
$keep_alive_of{ $ident } ? (keep_alive => 1) : (),
);
$client->set_no_dispatch( $no_dispatch_of{ $ident } ); $client->set_no_dispatch( $no_dispatch_of{ $ident } );
$client->set_outputxml( $outputxml_of{ $ident } ? 1 : 0 ); $client->set_outputxml( $outputxml_of{ $ident } ? 1 : 0 );
@@ -277,7 +299,7 @@ sub call {
&& ( ! $no_dispatch_of{ $ident } ) ) { && ( ! $no_dispatch_of{ $ident } ) ) {
require SOAP::WSDL::Deserializer::SOM; require SOAP::WSDL::Deserializer::SOM;
$client->set_deserializer( SOAP::WSDL::Deserializer::SOM->new() ); $client->set_deserializer( SOAP::WSDL::Deserializer::SOM->new() );
}; }
my $method_info = $method_info_of{ $ident }->{ $method }; my $method_info = $method_info_of{ $ident }->{ $method };
@@ -772,8 +794,6 @@ Peter Orvos, Mark Overmeer, Jon Robens, Isidro Vila Verde and Glenn Wood
(in alphabetical order) spotted bugs and/or suggested improvements in (in alphabetical order) spotted bugs and/or suggested improvements in
the 1.2x releases. the 1.2x releases.
Noah Robin contirbuted lots of documentation fixes, and the mod_perl server.
JT Justman and Noah Robin provided early feedback and bug reports for JT Justman and Noah Robin provided early feedback and bug reports for
the 2.xx pre-releases. the 2.xx pre-releases.
@@ -786,13 +806,17 @@ Matt S. Trout encouraged me "to get a non-dev-release out."
CPAN Testers provided most valuable (automated) feedback. Thanks a lot. CPAN Testers provided most valuable (automated) feedback. Thanks a lot.
Numerous people sent me their real-world WSDL files for testing. Thank you. Numerous people sent me their real-world WSDL files and error reports for
testing. Thank you.
Noah Robin contributed lots of documentation fixes, and the mod_perl server,
and eventually joined SOAP::WSDL's developement. Thanks.
Mark Overmeer wrote XML::Compile::SOAP - competition is good for business.
Paul Kulchenko and Byrne Reese wrote and maintained SOAP::Lite and Paul Kulchenko and Byrne Reese wrote and maintained SOAP::Lite and
thus provided a base (and counterpart) for SOAP::WSDL. thus provided a base (and counterpart) for SOAP::WSDL.
Mark Overmeer wrote XML::Compile::SOAP - competition is good for business.
=head1 LICENSE AND COPYRIGHT =head1 LICENSE AND COPYRIGHT
Copyright 2004-2008 Martin Kutter. Copyright 2004-2008 Martin Kutter.
@@ -806,9 +830,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 755 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: WSDL.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: WSDL.pm 755 2008-12-03 21:36:54Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
=cut =cut
+51 -35
View File
@@ -1,20 +1,21 @@
package SOAP::WSDL::Base; package SOAP::WSDL::Base;
use strict; use strict; use warnings;
use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use List::Util qw(first); use List::Util;
use Scalar::Util;
use Carp qw(croak carp confess); use Carp qw(croak carp confess);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %id_of :ATTR(:name<id> :default<()>); my %id_of :ATTR(:name<id> :default<()>);
my %lang_of :ATTR(:name<lang> :default<()>); my %lang_of :ATTR(:name<lang> :default<()>);
my %name_of :ATTR(:name<name> :default<()>); my %name_of :ATTR(:name<name> :default<()>);
my %namespace_of :ATTR(:name<namespace> :default<()>);
my %documentation_of :ATTR(:name<documentation> :default<()>); my %documentation_of :ATTR(:name<documentation> :default<()>);
my %annotation_of :ATTR(:name<annotation> :default<()>); my %annotation_of :ATTR(:name<annotation> :default<()>);
my %targetNamespace_of :ATTR(:name<targetNamespace> :default<()>); my %targetNamespace_of :ATTR(:name<targetNamespace> :default<()>);
my %xmlns_of :ATTR(:name<xmlns> :default<{}>); my %xmlns_of :ATTR(:name<xmlns> :default<{}>);
my %parent_of :ATTR(:name<parent> :default<()>); my %parent_of :ATTR(:get<parent> :default<()>);
my %namespaces_of :ATTR(:default<{}>); my %namespaces_of :ATTR(:default<{}>);
@@ -22,34 +23,42 @@ sub namespaces {
return shift->get_xmlns(); 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 { sub START {
my ($self, $ident, $arg_ref) = @_; my ($self, $ident, $arg_ref) = @_;
#$xmlns_of{ $ident }->{ '#default' } = $self->get_xmlns()->{ '#default' };
$xmlns_of{ $ident }->{ 'xml' } = 'http://www.w3.org/XML/1998/namespace'; $xmlns_of{ $ident }->{ 'xml' } = 'http://www.w3.org/XML/1998/namespace';
$namespaces_of{ $ident }->{ '#default' } = $self->get_xmlns()->{ '#default' }; $namespaces_of{ $ident }->{ '#default' } = $self->get_xmlns()->{ '#default' };
$namespaces_of{ $ident }->{ 'xml' } = 'http://www.w3.org/XML/1998/namespace'; $namespaces_of{ $ident }->{ 'xml' } = 'http://www.w3.org/XML/1998/namespace';
} }
sub DEMOLISH { #
my $self = shift; # set_parent is hand-implemented to break up (weaken) the circular reference
# delete upward references # between an object and it's parent
delete $parent_of{ ${ $self } }; #
return; sub set_parent {
$parent_of{ ${ $_[0]} } = $_[1];
Scalar::Util::weaken($parent_of{ ${ $_[0]} });
} }
sub STORABLE_freeze_pre :CUMULATIVE {}; # _accept is here to be called by visitor.
sub STORABLE_freeze_post :CUMULATIVE {}; # The visitor pattern is a level of indirection - here the visitor calls
sub STORABLE_thaw_pre :CUMULATIVE {}; # $object->_accept($visitor) on each object, which in turn calls
sub STORABLE_thaw_post :CUMULATIVE { return $_[0] }; # $visitor->visit_$class( $object ) where $class is the object's class.
#
sub _accept { sub _accept {
my $self = shift; my $self = shift;
my $class = ref $self; my $class = ref $self;
$class =~ s{ \A SOAP::WSDL:: }{}xms; $class =~ s{ \A SOAP::WSDL:: }{}xms;
$class =~ s{ (:? :: ) }{_}gxms; $class =~ s{ (:? :: ) }{_}gxms;
my $method = "visit_$class"; my $method = "visit_$class";
no strict qw(refs); ## no critic ProhibitNoStrict no strict qw(refs);
return shift->$method( $self ); return shift->$method( $self );
} }
@@ -64,13 +73,12 @@ sub AUTOMETHOD {
if ($subname =~s{^push_}{}xms) { if ($subname =~s{^push_}{}xms) {
my $getter = "get_$subname"; my $getter = "get_$subname";
my $setter = "set_$subname"; my $setter = "set_$subname";
## Checking here is paranoid - will fail fatally if # Checking here is paranoid - will fail fatally if there is no setter.
## there is no setter... # And we would have to check getters, too.
## And we would have to check getters, too. # Maybe do it the Conway way via the Symbol table...
## Maybe do it the Conway way via the Symbol table... # ... can is way slow...
## ... can is way slow...
return sub { return sub {
no strict qw(refs); ## no critic ProhibitNoStrict no strict qw(refs);
my $old_value = $self->$getter(); my $old_value = $self->$getter();
# Listify if not a list ref # Listify if not a list ref
$old_value = $old_value ? [ $old_value ] : [] if not ref $old_value; $old_value = $old_value ? [ $old_value ] : [] if not ref $old_value;
@@ -84,7 +92,7 @@ sub AUTOMETHOD {
elsif ($subname =~s {^find_}{get_}xms) { elsif ($subname =~s {^find_}{get_}xms) {
@values = @{ $values[0] } if ref $values[0] eq 'ARRAY'; @values = @{ $values[0] } if ref $values[0] eq 'ARRAY';
return sub { return sub {
return first { return List::Util::first {
$_->get_targetNamespace() eq $values[0] && $_->get_targetNamespace() eq $values[0] &&
$_->get_name() eq $values[1] $_->get_name() eq $values[1]
} }
@@ -100,24 +108,29 @@ sub AUTOMETHOD {
}; };
} }
# return if called from can();
my @caller = caller(2);
return if ($caller[3] eq 'Class::Std::Fast::__ANON__');
# confess "$subname not found in class " . ref $self;
return; return;
} }
sub init { sub init {
my ($self, @args) = @_; my ($self, @args) = @_;
foreach my $value (@args) foreach my $value (@args) {
{
croak @args if (not defined ($value->{ Name })); croak @args if (not defined ($value->{ Name }));
if ($value->{ Name } =~m{^xmlns\:}xms) { if ($value->{ Name } =~m{^xmlns\:}xms) {
# add namespaces # add namespaces
$xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value }; $xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value };
next; 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 $name = $value->{ LocalName };
my $method = "set_$name"; my $method = "set_$name";
$self->$method( $value->{ Value } ); $self->$method( $value->{ Value } );
@@ -128,12 +141,15 @@ sub init {
sub expand { sub expand {
my ($self, $qname) = @_; my ($self, $qname) = @_;
my $ns_of = $self->namespaces(); my $ns_of = $self->namespaces();
my $parent;
if (not $qname=~m{:}xm) { if (not $qname=~m{:}xm) {
if (defined $ns_of->{ '#default' }) { if (defined $ns_of->{ '#default' }) {
return $self->get_targetNamespace(), $qname; # TODO check. Returning the targetNamespace for the default ns
# return $ns_of->{ '#default' }, $qname; # is probably wrong
#return $self->get_targetNamespace(), $qname;
return $ns_of->{ '#default' }, $qname;
} }
if (my $parent = $self->get_parent()) { if ($parent = $self->get_parent()) {
return $parent->expand($qname); return $parent->expand($qname);
} }
die "un-prefixed element name <$qname> found, but no default namespace set\n" die "un-prefixed element name <$qname> found, but no default namespace set\n"
@@ -142,7 +158,7 @@ sub expand {
my ($prefix, $localname) = split /:/x, $qname; my ($prefix, $localname) = split /:/x, $qname;
return ($ns_of->{ $prefix }, $localname) if ($ns_of->{ $prefix }); return ($ns_of->{ $prefix }, $localname) if ($ns_of->{ $prefix });
if (my $parent = $self->get_parent()) { if ($parent = $self->get_parent()) {
return $parent->expand($qname); return $parent->expand($qname);
} }
croak "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are " croak "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are "
+2 -2
View File
@@ -2,10 +2,10 @@ package SOAP::WSDL::Binding;
use strict; use strict;
use warnings; use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use List::Util qw(first);
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %operation_of :ATTR(:name<operation> :default<()>); my %operation_of :ATTR(:name<operation> :default<()>);
my %type_of :ATTR(:name<type> :default<()>); my %type_of :ATTR(:name<type> :default<()>);
+6 -6
View File
@@ -11,7 +11,7 @@ use SOAP::WSDL::Factory::Serializer;
use SOAP::WSDL::Factory::Transport; use SOAP::WSDL::Factory::Transport;
use SOAP::WSDL::Expat::MessageParser; use SOAP::WSDL::Expat::MessageParser;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>); my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>); my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
@@ -20,10 +20,10 @@ my %outputxml_of :ATTR(:name<outputxml> :default<()>);
my %transport_of :ATTR(:name<transport> :default<()>); my %transport_of :ATTR(:name<transport> :default<()>);
my %endpoint_of :ATTR(:name<endpoint> :default<()>); my %endpoint_of :ATTR(:name<endpoint> :default<()>);
my %soap_version_of :ATTR(:get<soap_version> :init_attr<soap_version> :default<'1.1'>); 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 %on_action_of :ATTR(:name<on_action> :default<()>);
my %content_type_of :ATTR(:name<content_type> :default<text/xml; charset=utf8>); #/#trick editors my %content_type_of :ATTR(:name<content_type> :default<text/xml; charset=utf-8>); #/#trick editors
my %serializer_of :ATTR(:name<serializer> :default<()>); my %serializer_of :ATTR(:name<serializer> :default<()>);
my %deserializer_of :ATTR(:name<deserializer> :default<()>); my %deserializer_of :ATTR(:name<deserializer> :default<()>);
@@ -395,10 +395,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 744 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Client.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Client.pm 744 2008-10-15 16:58:45Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
=cut =cut
+14 -7
View File
@@ -4,7 +4,7 @@ use warnings;
use base 'SOAP::WSDL::Client'; use base 'SOAP::WSDL::Client';
use Scalar::Util qw(blessed); use Scalar::Util qw(blessed);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
sub call { sub call {
my ($self, $method, $body, $header) = @_; my ($self, $method, $body, $header) = @_;
@@ -22,7 +22,7 @@ sub call {
# parameters given # parameters given
my @part_from = (); my @part_from = ();
foreach my $class (@{ $method->{ body }->{ parts } }) { foreach my $class (@{ $method->{ body }->{ parts } }) {
eval "require $class" || die $@; eval "require $class" || die $@; ## no critic (ProhibitStringyEval)
push @part_from, $class->new(shift(@body_from) || {}); push @part_from, $class->new(shift(@body_from) || {});
} }
@@ -33,10 +33,10 @@ sub call {
# if we have a header # if we have a header
if (%{ $method->{ header } }) { if (%{ $method->{ header } }) {
# trat non object special - as above, but only for one # treat non object special - as above, but only for one
if (not blessed $header) { if (not blessed $header) {
my $class = $method->{ header }->{ parts }->[0]; my $class = $method->{ header }->{ parts }->[0];
eval "require $class" || die $@; eval "require $class" || die $@; ## no critic (ProhibitStringyEval)
$header = $class->new($header); $header = $class->new($header);
} }
} }
@@ -65,6 +65,13 @@ SOAP::WSDL::Client::Base - Factory class for WSDL-based SOAP access
Factory class for creating interface classes. Should probably be renamed to Factory class for creating interface classes. Should probably be renamed to
SOAP::WSDL::Factory::Interface... 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 =head1 LICENSE AND COPYRIGHT
Copyright 2004-2007 Martin Kutter. Copyright 2004-2007 Martin Kutter.
@@ -78,9 +85,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Base.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Base.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
=cut =cut
+10 -13
View File
@@ -1,26 +1,22 @@
package SOAP::WSDL::Definitions; package SOAP::WSDL::Definitions;
use utf8;
use strict; use strict;
use warnings; use warnings;
use Carp;
use File::Basename;
use File::Path;
use List::Util qw(first); use List::Util qw(first);
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %types_of :ATTR(:name<types> :default<[]>); my %types_of :ATTR(:name<types> :default<[]>);
my %message_of :ATTR(:name<message> :default<[]>); my %message_of :ATTR(:name<message> :default<[]>);
my %portType_of :ATTR(:name<portType> :default<[]>); my %portType_of :ATTR(:name<portType> :default<[]>);
my %binding_of :ATTR(:name<binding> :default<[]>); my %binding_of :ATTR(:name<binding> :default<[]>);
my %service_of :ATTR(:name<service> :default<[]>); my %service_of :ATTR(:name<service> :default<[]>);
my %namespace_of :ATTR(:name<namespace> :default<()>); my %namespace_of :ATTR(:name<namespace> :default<()>);
# must be attr for Class::Std::Fast::Storable # must be attr for Class::Std::Fast::Storable
my %attributes_of :ATTR(); #my %attributes_of :ATTR();
%attributes_of = ( my %attributes_of = (
binding => \%binding_of, binding => \%binding_of,
message => \%message_of, message => \%message_of,
portType => \%portType_of, portType => \%portType_of,
@@ -44,6 +40,7 @@ BLOCK: {
} }
} }
1; 1;
=pod =pod
@@ -72,7 +69,7 @@ Returns the service matching the namespace/localname pair passed as arguments.
Accessors/Mutators for accessing / setting the E<gt>bindingE<lt> child Accessors/Mutators for accessing / setting the E<gt>bindingE<lt> child
element(s). element(s).
=head2 find_service =head2 find_binding
Returns the binding matching the namespace/localname pair passed as arguments. Returns the binding matching the namespace/localname pair passed as arguments.
@@ -94,7 +91,7 @@ Returns the portType matching the namespace/localname pair passed as arguments.
Accessors/Mutators for accessing / setting the E<gt>messageE<lt> child Accessors/Mutators for accessing / setting the E<gt>messageE<lt> child
element(s). element(s).
=head2 find_service =head2 find_message
Returns the message matching the namespace/localname pair passed as arguments. Returns the message matching the namespace/localname pair passed as arguments.
@@ -118,10 +115,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Definitions.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Definitions.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
=cut =cut
+16 -5
View File
@@ -8,7 +8,7 @@ use SOAP::WSDL::Expat::Message2Hash;
use SOAP::WSDL::Factory::Deserializer; use SOAP::WSDL::Factory::Deserializer;
SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ ); SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ );
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
sub BUILD { sub BUILD {
my ($self, $ident, $args_of_ref) = @_; my ($self, $ident, $args_of_ref) = @_;
@@ -139,9 +139,20 @@ a parse error appears
=back =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 =head1 LICENSE AND COPYRIGHT
Copyright 2004-2007 Martin Kutter. Copyright 2004-2008 Martin Kutter.
This file is part of SOAP-WSDL. You may distribute/modify it under This file is part of SOAP-WSDL. You may distribute/modify it under
the same terms as perl itself. the same terms as perl itself.
@@ -152,9 +163,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Hash.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Hash.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/Hash.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/Hash.pm $
=cut =cut
+32 -6
View File
@@ -2,7 +2,7 @@ package SOAP::WSDL::Deserializer::SOM;
use strict; use strict;
use warnings; use warnings;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
our @ISA; our @ISA;
eval { eval {
@@ -13,6 +13,18 @@ or die "Cannot load SOAP::Lite.
Cannot deserialize to SOM object without SOAP::Lite. Cannot deserialize to SOM object without SOAP::Lite.
Please install 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 { sub generate_fault {
my ($self, $args_from_ref) = @_; my ($self, $args_from_ref) = @_;
# code, message, detail, actor # code, message, detail, actor
@@ -66,6 +78,17 @@ This may be XML including mixed content, attachements and other XML data not
SOAP::WSDL::Deserializer::SOM is a subclass of L<SOAP::Deserializer|SOAP::Deserializer> SOAP::WSDL::Deserializer::SOM is a subclass of L<SOAP::Deserializer|SOAP::Deserializer>
from the L<SOAP::Lite|SOAP::Lite> package. 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 =head1 USAGE
SOAP::WSDL::Deserializer will not autoregister itself - to use it for a particular SOAP::WSDL::Deserializer will not autoregister itself - to use it for a particular
@@ -85,8 +108,8 @@ SOAP version just use the following lines:
=item * No on_fault handler =item * No on_fault handler
You cannot specify what to do when an error occurs - SOAP::WSDL will die You cannot specify what to do when an error occurs - SOAP::WSDL will return
with a SOAP::Fault object on transport errors. a SOAP::Fault object on transport errors.
=back =back
@@ -99,6 +122,9 @@ with a SOAP::Fault object on transport errors.
SOAP::WSDL::Deserializer::SOM will die with a SOAP::Fault object on calls SOAP::WSDL::Deserializer::SOM will die with a SOAP::Fault object on calls
to generate_fault. to generate_fault.
This also means that a SOAP::Fault may be thrown as exception when using
=back =back
=head1 LICENSE AND COPYRIGHT =head1 LICENSE AND COPYRIGHT
@@ -114,9 +140,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: SOM.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: SOM.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/SOM.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/SOM.pm $
=cut =cut
+4 -4
View File
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
use SOAP::WSDL::SOAP::Typelib::Fault11; use SOAP::WSDL::SOAP::Typelib::Fault11;
use SOAP::WSDL::Expat::MessageParser; use SOAP::WSDL::Expat::MessageParser;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>); my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
@@ -99,9 +99,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: XSD.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: XSD.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
=cut =cut
+9 -1
View File
@@ -6,7 +6,7 @@ use XML::Parser::Expat;
# TODO: convert to Class::Std::Fast based class - hash based classes suck. # TODO: convert to Class::Std::Fast based class - hash based classes suck.
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
sub new { sub new {
my ($class, $arg_ref) = @_; my ($class, $arg_ref) = @_;
@@ -35,17 +35,23 @@ sub get_uri { return $_[0]->{ uri }; }
sub set_user_agent { $_[0]->{ user_agent } = $_[1]; } sub set_user_agent { $_[0]->{ user_agent } = $_[1]; }
sub get_user_agent { return $_[0]->{ user_agent }; } sub get_user_agent { return $_[0]->{ user_agent }; }
# Mark a URI as "already parsed"
sub set_parsed { sub set_parsed {
my ($self, $uri) = @_; my ($self, $uri) = @_;
$self->{ parsed }->{ $uri } = 1; $self->{ parsed }->{ $uri } = 1;
return; return;
} }
# returns true if a specific URI has already been parsed
sub is_parsed { sub is_parsed {
my ($self, $uri) = @_; my ($self, $uri) = @_;
return exists $self->{ parsed }->{ $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 { sub parse_uri {
my $self = shift; my $self = shift;
my $uri = shift; my $uri = shift;
@@ -74,6 +80,7 @@ sub parse {
$_[0]->{ parser }->release(); $_[0]->{ parser }->release();
}; };
$_[0]->{ parser }->xpcroak( $@ ) if $@; $_[0]->{ parser }->xpcroak( $@ ) if $@;
delete $_[0]->{ parser };
return $_[0]->{ data }; return $_[0]->{ data };
} }
@@ -83,6 +90,7 @@ sub parsefile {
$_[0]->{ parser }->release(); $_[0]->{ parser }->release();
}; };
$_[0]->{ parser }->xpcroak( $@ ) if $@; $_[0]->{ parser }->xpcroak( $@ ) if $@;
delete $_[0]->{ parser };
return $_[0]->{ data }; return $_[0]->{ data };
} }
+1 -1
View File
@@ -4,7 +4,7 @@ use strict;
use warnings; use warnings;
use base qw(SOAP::WSDL::Expat::Base); use base qw(SOAP::WSDL::Expat::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
sub _initialize { sub _initialize {
my ($self, $parser) = @_; my ($self, $parser) = @_;
+25 -21
View File
@@ -1,19 +1,20 @@
#!/usr/bin/perl #!/usr/bin/perl
package SOAP::WSDL::Expat::MessageParser; package SOAP::WSDL::Expat::MessageParser;
use strict; use strict; use warnings;
use warnings;
use Carp qw(croak confess);
use version; our $VERSION = qv('2.00.03');
use SOAP::WSDL::XSD::Typelib::Builtin; use SOAP::WSDL::XSD::Typelib::Builtin;
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType; use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
use base qw(SOAP::WSDL::Expat::Base); use base qw(SOAP::WSDL::Expat::Base);
require Class::Std::Fast; BEGIN { require Class::Std::Fast };
use version; our $VERSION = qv('2.00.05');
# GLOBALS
my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF(); my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF();
# keep track of classes loaded
my %LOADED_OF = (); my %LOADED_OF = ();
sub new { sub new {
@@ -46,7 +47,10 @@ sub class_resolver {
sub load_classes { sub load_classes {
my $self = shift; my $self = shift;
for (values %{ $self->{ class_resolver }->get_typemap }) { return if $LOADED_OF{ $self->{ class_resolver } };
# requires sorting to make sub-packages load after their parent
for (sort values %{ $self->{ class_resolver }->get_typemap }) {
no strict qw(refs); no strict qw(refs);
my $class = $_; my $class = $_;
@@ -54,9 +58,10 @@ sub load_classes {
next if $class eq '__SKIP__'; next if $class eq '__SKIP__';
next if defined *{ "$class\::" }; # check if namespace exists next if defined *{ "$class\::" }; # check if namespace exists
# Require takes a bareword or a file name - we have to take
# the filname road here...
$class =~s{ :: }{/}xmsg; $class =~s{ :: }{/}xmsg;
$class .= '.pm'; require "$class.pm"; ## no critic (RequireBarewordIncludes)
require $class;
} }
$LOADED_OF{ $self->{ class_resolver } } = 1; $LOADED_OF{ $self->{ class_resolver } } = 1;
} }
@@ -106,16 +111,12 @@ sub _initialize {
: (); : ();
# use "globals" for speed # use "globals" for speed
my ($_prefix, $_method, my ($_prefix, $_method, $_class, $_leaf) = ();
$_class, $_leaf) = ();
my $char_handler = sub { my $char_handler = sub {
return if (!$_leaf); # we only want characters in leaf nodes return if (!$_leaf); # we only want characters in leaf nodes
$characters .= $_[1]; # add to characters
$characters .= $_[1]; return; # return void
# if $_[1] =~m{ [^\s] }xms;
return;
}; };
no strict qw(refs); no strict qw(refs);
@@ -194,6 +195,9 @@ sub _initialize {
} }
} }
$depth++; $depth++;
# TODO: Skip content of anyType / any stuff
return; return;
}, },
@@ -319,11 +323,11 @@ the same terms as perl itself
=head1 Repository information =head1 Repository information
$Id: MessageParser.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: MessageParser.pm 728 2008-07-13 19:28:50Z kutterma $
$LastChangedDate: 2008-05-18 22:17:56 +0200 (So, 18 Mai 2008) $ $LastChangedDate: 2008-07-13 21:28:50 +0200 (So, 13 Jul 2008) $
$LastChangedRevision: 677 $ $LastChangedRevision: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
+4 -4
View File
@@ -6,7 +6,7 @@ use XML::Parser::Expat;
use SOAP::WSDL::Expat::MessageParser; use SOAP::WSDL::Expat::MessageParser;
use base qw(SOAP::WSDL::Expat::MessageParser); use base qw(SOAP::WSDL::Expat::MessageParser);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
sub parse_start { sub parse_start {
my $self = shift; my $self = shift;
@@ -69,9 +69,9 @@ the same terms as perl itself
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: MessageStreamParser.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: MessageStreamParser.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
=cut =cut
+55 -29
View File
@@ -5,7 +5,17 @@ use Carp;
use SOAP::WSDL::TypeLookup; use SOAP::WSDL::TypeLookup;
use base qw(SOAP::WSDL::Expat::Base); use base qw(SOAP::WSDL::Expat::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#
# Import child elements of a WSDL / XML Schema tree into the current tree
#
# Set the targetNamespace of the imported nodes to $import_namespace
#
# SYNOPSIS
#
# $self->_import_children($name, $imported, $imported, $import_namespace)
#
sub _import_children { sub _import_children {
my ($self, $name, $imported, $importer, $import_namespace) = @_; my ($self, $name, $imported, $importer, $import_namespace) = @_;
@@ -140,7 +150,9 @@ sub _initialize {
# TODO skip non-XML Schema namespace tags # TODO skip non-XML Schema namespace tags
$parser->setHandlers( $parser->setHandlers(
Start => sub { Start => sub {
my ($parser, $localname, %attrs) = @_; # handle attrs as list - expat uses dual-vars for looking
# up namespace information, and hash keys don't allow dual vars...
my ($parser, $localname, @attrs) = @_;
$characters = q{}; $characters = q{};
my $action = SOAP::WSDL::TypeLookup->lookup( my $action = SOAP::WSDL::TypeLookup->lookup(
@@ -154,10 +166,11 @@ sub _initialize {
eval "require $action->{ class }"; eval "require $action->{ class }";
croak $@ if ($@); croak $@ if ($@);
my $obj = $action->{ class }->new({ parent => $current, my $obj = $action->{ class }->new({
# xmlns => { '#default' => $parser->namespace($localname) } parent => $current,
namespace => $parser->namespace($localname),
}) })
->init( _fixup_attrs( $parser, %attrs ) ); ->init( _fixup_attrs( $parser, @attrs ) );
if ($current) { if ($current) {
# inherit namespace, but don't override # inherit namespace, but don't override
@@ -173,14 +186,12 @@ sub _initialize {
# remember element for stepping back # remember element for stepping back
push @{ $list }, $current; push @{ $list }, $current;
} }
else {
$self->{ data } = $obj;
}
# set new element (step down) # set new element (step down)
$current = $obj; $current = $obj;
} }
elsif ($action->{ type } eq 'PARENT') { elsif ($action->{ type } eq 'PARENT') {
$current->init( _fixup_attrs($parser, %attrs) ); $current->init( _fixup_attrs($parser, @attrs) );
} }
elsif ($action->{ type } eq 'METHOD') { elsif ($action->{ type } eq 'METHOD') {
my $method = $action->{ method }; my $method = $action->{ method };
@@ -196,12 +207,12 @@ sub _initialize {
? ref $action->{ value } ? ref $action->{ value }
? @{ $action->{ value } } ? @{ $action->{ value } }
: ($action->{ value }) : ($action->{ value })
: _fixup_attrs($parser, %attrs) : _fixup_attrs($parser, @attrs)
); );
} }
elsif ($action->{type} eq 'HANDLER') { elsif ($action->{type} eq 'HANDLER') {
my $method = $self->can($action->{method}); my $method = $self->can($action->{method});
$method->($self, $current, %attrs); $method->($self, $current, @attrs);
} }
else { else {
# TODO replace by hash lookup of known namespaces. # TODO replace by hash lookup of known namespaces.
@@ -227,6 +238,11 @@ sub _initialize {
$localname $localname
) || {}; ) || {};
if (! defined $list->[-1]) {
$self->{ data } = $current;
return;
}
return if not ($action->{ type }); return if not ($action->{ type });
if ( $action->{ type } eq 'CLASS' ) { if ( $action->{ type } eq 'CLASS' ) {
$current = pop @{ $list }; $current = pop @{ $list };
@@ -249,30 +265,40 @@ sub _initialize {
# make attrs SAX style # make attrs SAX style
sub _fixup_attrs { sub _fixup_attrs {
my ($parser, %attrs_of) = @_; my ($parser, @attrs) = @_;
my @attrs_from = map { my @attr_key_from = ();
$_ = my @attr_value_from = ();
{
Name => $_, while (@attrs) {
Value => $attrs_of{ $_ }, push @attr_key_from, shift @attrs;
LocalName => $_ push @attr_value_from, shift @attrs;
} }
} keys %attrs_of;
my @attrs_from;
# add xmlns: attrs. expat eats them. # add xmlns: attrs. expat eats them.
#
# add namespaces before attributes: Attributes may be namespace-qualified
#
push @attrs_from, map { push @attrs_from, map {
# ignore xmlns=FOO namespaces - must be XML schema
# # Other nodes should be ignored somewhere else
# ($_ eq '#default')
# ? ()
# :
{ {
Name => "xmlns:$_", Name => "xmlns:$_",
Value => $parser->expand_ns_prefix( $_ ), Value => $parser->expand_ns_prefix( $_ ),
LocalName => $_ LocalName => $_
} }
} $parser->new_ns_prefixes(); } $parser->new_ns_prefixes();
push @attrs_from, map {
{
Name => defined $parser->namespace($_)
? $parser->namespace($_) . '|' . $_
: '|' . $_,
Value => shift @attr_value_from, # $attrs_of{ $_ },
LocalName => $_
}
} @attr_key_from;
return @attrs_from; return @attrs_from;
} }
@@ -310,11 +336,11 @@ the same terms as perl itself
=head1 Repository information =head1 Repository information
$Id: WSDLParser.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: WSDLParser.pm 728 2008-07-13 19:28:50Z kutterma $
$LastChangedDate: 2008-05-18 22:17:56 +0200 (So, 18 Mai 2008) $ $LastChangedDate: 2008-07-13 21:28:50 +0200 (So, 13 Jul 2008) $
$LastChangedRevision: 677 $ $LastChangedRevision: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
+1 -1
View File
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Deserializer;
use strict; use strict;
use warnings; use warnings;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %DESERIALIZER = ( my %DESERIALIZER = (
'1.1' => 'SOAP::WSDL::Deserializer::XSD', '1.1' => 'SOAP::WSDL::Deserializer::XSD',
+1 -1
View File
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Generator;
use strict; use strict;
use warnings; use warnings;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %GENERATOR = ( my %GENERATOR = (
'XSD' => 'SOAP::WSDL::Generator::Template::XSD', 'XSD' => 'SOAP::WSDL::Generator::Template::XSD',
+4 -4
View File
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Serializer;
use strict; use strict;
use warnings; use warnings;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %SERIALIZER = ( my %SERIALIZER = (
'1.1' => 'SOAP::WSDL::Serializer::XSD', '1.1' => 'SOAP::WSDL::Serializer::XSD',
@@ -138,9 +138,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Serializer.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Serializer.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
=cut =cut
+8 -8
View File
@@ -1,7 +1,7 @@
package SOAP::WSDL::Factory::Transport; package SOAP::WSDL::Factory::Transport;
use strict; use strict;
use warnings; use warnings;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %registered_transport_of = (); my %registered_transport_of = ();
@@ -39,7 +39,7 @@ sub get_transport {
if (defined $registered_transport_of{ $scheme }) { if (defined $registered_transport_of{ $scheme }) {
no strict qw(refs); no strict qw(refs);
defined %{ "$registered_transport_of{ $scheme }::" } or $registered_transport_of{ $scheme }->can('new') or
eval "require $registered_transport_of{ $scheme }" eval "require $registered_transport_of{ $scheme }"
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@"; or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
@@ -60,11 +60,11 @@ sub get_transport {
no strict qw(refs); no strict qw(refs);
# behaves interestingly different under different versions of perl # behaves interestingly different under different versions of perl
# maybe true even if it's not available # maybe true even if it's not available
defined %{ "$SOAP_LITE_TRANSPORT_OF{ $scheme }::" } my $protocol_class = $SOAP_LITE_TRANSPORT_OF{ $scheme } . '::Client';
$protocol_class->can('new')
or eval "require $SOAP_LITE_TRANSPORT_OF{ $scheme }" or eval "require $SOAP_LITE_TRANSPORT_OF{ $scheme }"
or last SOAP_Lite; or last SOAP_Lite;
my $protocol_class = $SOAP_LITE_TRANSPORT_OF{ $scheme } . '::Client';
# may fail if it's not available # may fail if it's not available
my $transport = eval { $protocol_class->new( %attrs ) } my $transport = eval { $protocol_class->new( %attrs ) }
or last SOAP_Lite; or last SOAP_Lite;
@@ -74,7 +74,7 @@ sub get_transport {
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) { if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
no strict qw(refs); no strict qw(refs);
defined %{ "$SOAP_WSDL_TRANSPORT_OF{ $scheme }::"} $SOAP_WSDL_TRANSPORT_OF{ $scheme }->can('new')
or eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }" or eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@"; or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs ); return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs );
@@ -243,9 +243,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Transport.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Transport.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
=cut =cut
+3 -2
View File
@@ -2,7 +2,7 @@ package SOAP::WSDL::Generator::Iterator::WSDL11;
use strict; use warnings; use strict; use warnings;
use Class::Std::Fast; use Class::Std::Fast;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %definitions_of :ATTR(:name<definitions> :default<[]>); my %definitions_of :ATTR(:name<definitions> :default<[]>);
my %nodes_of :ATTR(:name<nodes> :default<[]>); my %nodes_of :ATTR(:name<nodes> :default<[]>);
@@ -74,7 +74,8 @@ my %METHOD_OF = (
? do { ? do {
die "unsupported global type <" die "unsupported global type <"
. $node->get_type . "> found in part ". $node->get_name(); . $node->get_type . "> found in part ". $node->get_name();
$types->find_type( $node->expand($node->get_type) ) ## use this once we can auto-generate an element for RPC bindings
# $types->find_type( $node->expand($node->get_type) )
} }
: (), : (),
$node->get_element() $node->get_element()
+2 -2
View File
@@ -3,7 +3,7 @@ use strict; use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %namespace_prefix_map_of :ATTR(:name<namespace_prefix_map> :default<{}>); my %namespace_prefix_map_of :ATTR(:name<namespace_prefix_map> :default<{}>);
my %namespace_map_of :ATTR(:name<namespace_map> :default<{}>); my %namespace_map_of :ATTR(:name<namespace_map> :default<{}>);
@@ -128,7 +128,7 @@ You cannot suffix your types by some rule yet...
Copyright 2008 Martin Kutter. Copyright 2008 Martin Kutter.
This library is free software. You may distribute/modify it under This file is part of SOAP-WSDL. You may distribute/modify it under
the same terms as perl itself the same terms as perl itself
=head1 AUTHOR =head1 AUTHOR
+5 -4
View File
@@ -1,11 +1,11 @@
package SOAP::WSDL::Generator::Template; package SOAP::WSDL::Generator::Template;
use strict; use strict; use warnings;
use Template; use Template;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use Carp; use Carp;
use SOAP::WSDL::Generator::PrefixResolver; use SOAP::WSDL::Generator::PrefixResolver;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %tt_of :ATTR(:get<tt>); my %tt_of :ATTR(:get<tt>);
my %definitions_of :ATTR(:name<definitions> :default<()>); my %definitions_of :ATTR(:name<definitions> :default<()>);
@@ -39,7 +39,8 @@ sub _process :PROTECTED {
INCLUDE_PATH => $INCLUDE_PATH_of{ $ident }, INCLUDE_PATH => $INCLUDE_PATH_of{ $ident },
OUTPUT_PATH => $OUTPUT_PATH_of{ $ident }, OUTPUT_PATH => $OUTPUT_PATH_of{ $ident },
PLUGIN_BASE => 'SOAP::WSDL::Generator::Template::Plugin', PLUGIN_BASE => 'SOAP::WSDL::Generator::Template::Plugin',
); )
or die Template->error();
$tt->process( $template, $tt->process( $template,
{ {
@@ -68,4 +69,4 @@ sub _process :PROTECTED {
or croak $INCLUDE_PATH_of{ $ident }, '\\', $template, ' ', $tt->error(); or croak $INCLUDE_PATH_of{ $ident }, '\\', $template, ' ', $tt->error();
} }
1; 1;
@@ -3,8 +3,8 @@ use strict;
use warnings; use warnings;
use Carp qw(confess); use Carp qw(confess);
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use Scalar::Util qw(blessed);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %namespace_prefix_map_of :ATTR(:name<namespace_prefix_map> :default<{}>); my %namespace_prefix_map_of :ATTR(:name<namespace_prefix_map> :default<{}>);
my %namespace_map_of :ATTR(:name<namespace_map> :default<{}>); my %namespace_map_of :ATTR(:name<namespace_map> :default<{}>);
@@ -155,6 +155,8 @@ sub element_name {
my $self = shift; my $self = shift;
my $element = shift; my $element = shift;
confess "no element object" unless blessed $element;
my $name = $element->get_name(); my $name = $element->get_name();
if (! $name) { if (! $name) {
while (my $ref = $element->get_ref()) { while (my $ref = $element->get_ref()) {
+5 -2
View File
@@ -1,11 +1,11 @@
package SOAP::WSDL::Generator::Template::XSD; package SOAP::WSDL::Generator::Template::XSD;
use strict; use strict; use warnings;
use Template; use Template;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use File::Basename; use File::Basename;
use File::Spec; use File::Spec;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
use SOAP::WSDL::Generator::Visitor::Typemap; use SOAP::WSDL::Generator::Visitor::Typemap;
use SOAP::WSDL::Generator::Visitor::Typelib; use SOAP::WSDL::Generator::Visitor::Typelib;
@@ -205,6 +205,7 @@ sub visit_XSD_Element {
my $output = defined $output_of{ ident $self } my $output = defined $output_of{ ident $self }
? $output_of{ ident $self } ? $output_of{ ident $self }
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($element) ); : $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($element) );
warn "Creating element class $output \n";
$self->_process('element.tt', { element => $element } , $output); $self->_process('element.tt', { element => $element } , $output);
} }
@@ -213,6 +214,7 @@ sub visit_XSD_SimpleType {
my $output = defined $output_of{ ident $self } my $output = defined $output_of{ ident $self }
? $output_of{ ident $self } ? $output_of{ ident $self }
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) ); : $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) );
warn "Creating simpleType class $output \n";
$self->_process('simpleType.tt', { simpleType => $type } , $output); $self->_process('simpleType.tt', { simpleType => $type } , $output);
} }
@@ -221,6 +223,7 @@ sub visit_XSD_ComplexType {
my $output = defined $output_of{ ident $self } my $output = defined $output_of{ ident $self }
? $output_of{ ident $self } ? $output_of{ ident $self }
: $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) ); : $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) );
warn "Creating complexType class $output \n";
$self->_process('complexType.tt', { complexType => $type } , $output); $self->_process('complexType.tt', { complexType => $type } , $output);
} }
@@ -4,6 +4,16 @@
[% type = definitions.find_portType( binding.expand( binding.get_type ) ); [% type = definitions.find_portType( binding.expand( binding.get_type ) );
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name ); port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
port_op.get_documentation %] port_op.get_documentation();
$interface->[% operation.get_name %]([% INCLUDE Interface/POD/Message.tt %] ); # for now we only document the first response part - document/literal
# doesn't allow more.
response_name = port_op.first_output.get_message();
response_part = definitions.find_message( port_op.first_output.expand( response_name ) ).get_part();
response_body_element = definitions.first_types.find_element( response_part.0.expand( response_part.0.get_element ) );
response_body_class = XSD.create_xsd_name(response_body_element);
%]
Returns a L<[% response_body_class %]|[% response_body_class %]> object.
$response = $interface->[% operation.get_name %]([% INCLUDE Interface/POD/Message.tt %] );
@@ -1,12 +1,12 @@
[% IF (complexType.get_variety == 'restriction'); [% IF (complexType.get_derivation == 'restriction');
INCLUDE complexType/POD/restriction.tt(complexType = complexType); INCLUDE complexType/POD/restriction.tt(complexType = complexType);
ELSIF (complexType.get_variety == 'extension'); ELSIF (complexType.get_derivation == 'extension');
#THROW NOT_IMPLEMENTED, "${ complexType.get_name } - complexType complexContent extension not implemented yet"; #THROW NOT_IMPLEMENTED, "${ complexType.get_name } - complexType complexContent extension not implemented yet";
%] %]
# No documentation generated for complexContent / extension yet # No documentation generated for complexContent / extension yet
[% [%
ELSE; ELSE;
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }"; THROW UNKNOWN, "unknown derivation ${ complexType.get_derivation }";
END; END;
%] %]
@@ -30,14 +30,17 @@ __PACKAGE__->_factory(
{ {
[% FOREACH element = complexType.get_element; [% FOREACH element = complexType.get_element;
IF (ref = element.get_ref); IF (ref = element.get_ref);
element = definitions.first_types.find_element(element.expand( element.get_ref )); ref_element = definitions.first_types.find_element(element.expand( ref ));
END; -%]
IF (type = element.get_type); '[% XSD.perl_var_name(XSD.element_name(ref_element)) %]' => '[% XSD.create_xsd_name(ref_element) %]',
[% ELSIF (type = element.get_type);
element_type = definitions.first_types.find_type(complexType.expand( type )); element_type = definitions.first_types.find_type(complexType.expand( type ));
IF (! element_type); IF (! element_type);
type_name = complexType.expand( type ); type_name = complexType.expand( type );
THROW NOT_FOUND, "${ type_name.0 } ${ type_name.1 } not found"; THROW NOT_FOUND, "${ type_name.0 } ${ type_name.1 } not found";
END; -%] END;
-%]
'[% XSD.perl_var_name(XSD.element_name(element)) %]' => '[% XSD.create_xsd_name(element_type) %]', '[% XSD.perl_var_name(XSD.element_name(element)) %]' => '[% XSD.create_xsd_name(element_type) %]',
[% ELSE; [% ELSE;
IF (element.first_simpleType); IF (element.first_simpleType);
@@ -7,6 +7,10 @@ ELSIF (complexType.get_variety == 'sequence');
ELSIF (complexType.get_variety == 'all'); ELSIF (complexType.get_variety == 'all');
INCLUDE complexType/extension.tt(complexType = complexType); INCLUDE complexType/extension.tt(complexType = complexType);
ELSE; ELSE;
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }"; IF (complexType.get_variety);
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
ELSE -%]
# empty variety
[% END;
END; END;
%] %]
@@ -22,7 +22,7 @@ element_list = [];
# copy complexType ref # copy complexType ref
base_type = complexType; base_type = complexType;
base_name=base_type.expand( base_type.get_base ); base_name = base_type.expand( base_type.get_base );
base_type = definitions.first_types.find_type( base_name ); base_type = definitions.first_types.find_type( base_name );
# add a use base for first to setup inheritance # add a use base for first to setup inheritance
@@ -31,13 +31,17 @@ use base qw([% XSD.create_xsd_name( base_type ) %]);
[% [%
# loop forever # loop forever
WHILE (1); WHILE (1);
IF (complexType.get_variety == 'extension');
# wrap statement in IF to avoid printing
IF (complexType.set_variety( base_type.get_variety )); END;
END;
# make a copy. We don't want to modify the original list here... # make a copy. We don't want to modify the original list here...
FOREACH element = base_type.get_element.reverse; FOREACH element = base_type.get_element.reverse;
element_list.unshift(element); element_list.unshift(element);
END; END;
# get next base type if there is one...
# get next base type IF (base_type.get_base);
IF (base_name=base_type.expand( base_type.get_base )); base_name=base_type.expand( base_type.get_base );
# set new base_type # set new base_type
base_type = definitions.first_types.find_type( base_name ); base_type = definitions.first_types.find_type( base_name );
ELSE; ELSE;
@@ -59,8 +63,11 @@ END;
# set derived element list # set derived element list
# wrap in IF; END; to prevent it getting printed # wrap in IF; END; to prevent it getting printed
IF (complexType.set_element( element_list )); END; IF ( complexType.set_element( element_list ) ); END;
-%]
# Variety: [% complexType.get_variety %]
[%
INCLUDE complexType/variety.tt(complexType = complexType); INCLUDE complexType/variety.tt(complexType = complexType);
# restore original element list # restore original element list
@@ -76,6 +76,38 @@ Perl data type class for the XML Schema defined element
[% INCLUDE POD/annotation.tt(node = element) %] [% INCLUDE POD/annotation.tt(node = element) %]
[% IF (complexType = element.first_complexType);
IF (complexType.get_element); %]
[% head1 %] PROPERTIES
The following properties may be accessed using get_PROPERTY / set_PROPERTY
methods:
=over
[% FOREACH child_element = complexType.get_element -%]
=item * [% XSD.perl_var_name(XSD.element_name(child_element)) %]
$element->set_[% XSD.perl_var_name(XSD.element_name(child_element)) %]($data);
$element->get_[% XSD.perl_var_name(XSD.element_name(child_element)) %]();
[% IF (XSD.perl_var_name(XSD.element_name(child_element)) == child_element.get_name); %]
[% ELSE %]
Note: The name of this property has been altered, because it didn't match
perl's notion of variable/subroutine names. The altered name is used in
perl code only, XML output uses the original name:
[% child_element.get_name %]
[% END %]
=back
[% END;
END;
END; -%]
[% head1 %] METHODS [% head1 %] METHODS
[% head2 %] new [% head2 %] new
@@ -4,11 +4,11 @@ use base qw(
[% [%
base_type = definitions.get_types.0.find_type(simpleType.expand(base)); base_type = definitions.get_types.0.find_type(simpleType.expand(base));
IF ! base_type; IF ! base_type;
THROW NOT_FOUND "No base type in " _ simpleType.get_parent.get_name; THROW NOT_FOUND "base type $base not found." _ simpleType.get_parent.get_name;
END; END;
XSD.create_xsd_name(base_type) %]); XSD.create_xsd_name(base_type) %]);
[% ELSIF (type = simpleType.first_simpleType() ); [% ELSIF (type = simpleType.first_simpleType() );
INCLUDE simpleType/atomicType.tt(type = type); INCLUDE simpleType/atomicType.tt(type = type);
ELSE; ELSE;
THROW "neither base nor atomic type - don't know what to do" %] THROW "neither base nor atomic type - don't know what to do" %]
[% END %] [% END %]
+1 -1
View File
@@ -3,7 +3,7 @@ use strict;
use warnings; use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %definitions_of :ATTR(:name<definitions> :default<()>); my %definitions_of :ATTR(:name<definitions> :default<()>);
my %type_prefix_of :ATTR(:name<type_prefix> :default<()>); my %type_prefix_of :ATTR(:name<type_prefix> :default<()>);
+1 -1
View File
@@ -5,7 +5,7 @@ use base qw(SOAP::WSDL::Generator::Visitor
SOAP::WSDL::Generator::Template SOAP::WSDL::Generator::Template
); );
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
1; 1;
+1 -1
View File
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Generator::Visitor); use base qw(SOAP::WSDL::Generator::Visitor);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %path_of :ATTR(:name<path> :default<[]>); my %path_of :ATTR(:name<path> :default<[]>);
my %typemap_of :ATTR(:name<typemap> :default<()>); my %typemap_of :ATTR(:name<typemap> :default<()>);
+10 -1
View File
@@ -32,6 +32,15 @@ this backend:
=head3 Accessing HTTP(S) webservices protected by NTLM authentication =head3 Accessing HTTP(S) webservices protected by NTLM authentication
You need the L<NTLM|NTLM> distribution installed to access webservices protected
by NTLM authentication. More specifically, you need the Authen::NTLM module
from this distribution. Note that this is different from the Authen::NTML
distribution by Yee Man Chan also available from CPAN.
Your user credentials usually need to include the windows domain like this:
testdomain\testuser
Besides passing user credentials as when accessing a web service protected Besides passing user credentials as when accessing a web service protected
by basic or digest authentication, you also need to enforce connection by basic or digest authentication, you also need to enforce connection
keep_alive on the transport backens. keep_alive on the transport backens.
@@ -130,4 +139,4 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
$Id: $ $Id: $
$HeadURL: $ $HeadURL: $
=cut =cut
+1 -1
View File
@@ -93,7 +93,7 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
$Rev: 391 $ $Rev: 391 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Glossary.pod 391 2007-11-17 21:56:13Z kutterma $ $Id: Glossary.pod 391 2007-11-17 21:56:13Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/Glossary.pod $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/Glossary.pod $
=cut =cut
+1 -1
View File
@@ -241,7 +241,7 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
$Rev: 391 $ $Rev: 391 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Parser.pod 391 2007-11-17 21:56:13Z kutterma $ $Id: Parser.pod 391 2007-11-17 21:56:13Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/Parser.pod $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/Parser.pod $
=cut =cut
+1 -1
View File
@@ -1255,7 +1255,7 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
$Rev: 562 $ $Rev: 562 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: WS_I.pod 562 2008-02-22 20:32:17Z kutterma $ $Id: WS_I.pod 562 2008-02-22 20:32:17Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/WS_I.pod $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/WS_I.pod $
=cut =cut
+2 -4
View File
@@ -90,10 +90,8 @@ can just say
Of course this will only work if MyTypes::NewType has a superset of the old Of course this will only work if MyTypes::NewType has a superset of the old
object class' elements. object class' elements.
.
Future versions will restrict the data returned to the child element's data - Note that XML attribute data is not included in the hash ref output yet.
you should not expect XML attributes to be returned through hash refs.
=head1 HOW IT WORKS =head1 HOW IT WORKS
@@ -405,7 +403,7 @@ supported (yet).
=item * import =item * import
The import includion element requires the schemaLocation attribute for The import inclusion element requires the schemaLocation attribute for
resolving the XML schema to import. Support for the import element is resolving the XML schema to import. Support for the import element is
implemented in L<SOAP::WSDL::Expat::WSDLParser|SOAP::WSDL::Expat::WSDLParser>, implemented in L<SOAP::WSDL::Expat::WSDLParser|SOAP::WSDL::Expat::WSDLParser>,
so alternative parsers may or may not support the import element. so alternative parsers may or may not support the import element.
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %part_of :ATTR(:name<part> :default<[]>); my %part_of :ATTR(:name<part> :default<[]>);
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %body_of :ATTR(:name<body> :default<[]>); my %body_of :ATTR(:name<body> :default<[]>);
my %header_of :ATTR(:name<header> :default<[]>); my %header_of :ATTR(:name<header> :default<[]>);
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %operation_of :ATTR(:name<operation> :default<()>); my %operation_of :ATTR(:name<operation> :default<()>);
my %input_of :ATTR(:name<input> :default<[]>); my %input_of :ATTR(:name<input> :default<[]>);
+1 -1
View File
@@ -6,7 +6,7 @@ use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %element_of :ATTR(:name<element> :default<()>); my %element_of :ATTR(:name<element> :default<()>);
my %type_of :ATTR(:name<type> :default<()>); my %type_of :ATTR(:name<type> :default<()>);
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %binding_of :ATTR(:name<binding> :default<()>); my %binding_of :ATTR(:name<binding> :default<()>);
my %address_of :ATTR(:name<address> :default<()>); my %address_of :ATTR(:name<address> :default<()>);
+15 -22
View File
@@ -2,33 +2,26 @@ package SOAP::WSDL::PortType;
use strict; use strict;
use warnings; use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use List::Util;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %operation_of :ATTR(:name<operation> :default<()>); my %operation_of :ATTR(:name<operation> :default<()>);
my %attributes_of :ATTR(); #
#=head2 find_operation
#
#$port_type->find_operation($namespace, $name)
#
#Returns the PortType's operation object matching the given namespace and
#name
#
%attributes_of = ( sub find_operation {
operation => \%operation_of, return List::Util::first {
); ( $_->get_targetNamespace() eq $_[1] ) && ( $_->get_name() eq $_[2] )
} @{ $operation_of{ ${ $_[0] } } };
# Function factory - we could be writing this method for all %attribute };
# keys, too, but that's just C&P (eehm, Copy & Paste...)
foreach my $method(keys %attributes_of ) {
no strict qw(refs); ## no critic ProhibitNoStrict
# ... btw, we mean this method here...
*{ "find_$method" } = sub {
my ($self, @args) = @_;
my @found_at = grep {
$_->get_targetNamespace() eq $args[0] &&
$_->get_name() eq $args[1]
}
@{ $attributes_of{ $method }->{ ident $self } };
return $found_at[0];
};
}
1; 1;
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %location :ATTR(:name<location> :default<()>); my %location :ATTR(:name<location> :default<()>);
1; 1;
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %use_of :ATTR(:name<use> :default<q{}>); my %use_of :ATTR(:name<use> :default<q{}>);
my %namespace_of :ATTR(:name<namespace> :default<q{}>); my %namespace_of :ATTR(:name<namespace> :default<q{}>);
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %use_of :ATTR(:name<use> :default<q{}>); my %use_of :ATTR(:name<use> :default<q{}>);
my %namespace_of :ATTR(:name<namespace> :default<q{}>); my %namespace_of :ATTR(:name<namespace> :default<q{}>);
+1 -1
View File
@@ -3,6 +3,6 @@ use strict;
use warnings; use warnings;
use base qw(SOAP::WSDL::Header); use base qw(SOAP::WSDL::Header);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
1; 1;
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %style_of :ATTR(:name<style> :default<()>); my %style_of :ATTR(:name<style> :default<()>);
my %soapAction_of :ATTR(:name<soapAction> :default<()>); my %soapAction_of :ATTR(:name<soapAction> :default<()>);
+5 -5
View File
@@ -3,7 +3,7 @@ use strict;
use warnings; use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
use SOAP::WSDL::XSD::Typelib::ComplexType; use SOAP::WSDL::XSD::Typelib::ComplexType;
use SOAP::WSDL::XSD::Typelib::Element; use SOAP::WSDL::XSD::Typelib::Element;
@@ -37,7 +37,7 @@ __PACKAGE__->_factory(
sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' }; sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' };
__PACKAGE__->__set_name('Fault'); __PACKAGE__->__set_name('Fault');
__PACKAGE__->__set_nillable(); __PACKAGE__->__set_nillable(0);
__PACKAGE__->__set_minOccurs(); __PACKAGE__->__set_minOccurs();
__PACKAGE__->__set_maxOccurs(); __PACKAGE__->__set_maxOccurs();
__PACKAGE__->__set_ref(''); __PACKAGE__->__set_ref('');
@@ -101,10 +101,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 728 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Fault11.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: Fault11.pm 728 2008-07-13 19:28:50Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm $
=cut =cut
+10 -7
View File
@@ -5,7 +5,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use Scalar::Util qw(blessed); use Scalar::Util qw(blessed);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
use SOAP::WSDL::Factory::Serializer; use SOAP::WSDL::Factory::Serializer;
@@ -50,7 +50,7 @@ sub serialize {
} }
sub serialize_header { sub serialize_header {
my ($self, $name, $data, $opt) = @_; my ($self, $method, $data, $opt) = @_;
# header is optional. Leave out if there's no header data # header is optional. Leave out if there's no header data
return q{} if not $data; return q{} if not $data;
@@ -62,8 +62,11 @@ sub serialize_header {
} }
sub serialize_body { sub serialize_body {
my ($self, $name, $data, $opt) = @_; my ($self, $method, $data, $opt) = @_;
$data->__set_name("$opt->{prefix}:$name") if $opt->{prefix};
# TODO This one wipes out the old class' XML name globally
# Fix in some more appropriate place...
$data->__set_name("$opt->{prefix}:" . $data->__get_name() ) if $opt->{prefix};
# Body is NOT optional. Serialize to empty body # Body is NOT optional. Serialize to empty body
# if we have no data. # if we have no data.
@@ -129,10 +132,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 735 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: XSD.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: XSD.pm 735 2008-08-14 07:36:54Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Serializer/XSD.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Serializer/XSD.pm $
=cut =cut
+33 -1
View File
@@ -6,7 +6,7 @@ use Scalar::Util qw(blessed);
use SOAP::WSDL::Factory::Deserializer; use SOAP::WSDL::Factory::Deserializer;
use SOAP::WSDL::Factory::Serializer; use SOAP::WSDL::Factory::Serializer;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %dispatch_to_of :ATTR(:name<dispatch_to> :default<()>); my %dispatch_to_of :ATTR(:name<dispatch_to> :default<()>);
my %action_map_ref_of :ATTR(:name<action_map_ref> :default<{}>); my %action_map_ref_of :ATTR(:name<action_map_ref> :default<{}>);
@@ -199,6 +199,38 @@ SOAP::Server's deserializer create one for you:
You may use any other object as exception, provided it has a You may use any other object as exception, provided it has a
serialize() method which returns the object's XML representation. serialize() method which returns the object's XML representation.
=head2 Subclassing
To write a transport-specific SOAP Server, you should subclass
SOAP::WSDL::Server.
See the C<SOAP::WSDL::Server::*> modules for examples.
A SOAP Server must call the following method to actually handle the request:
=head3 handle
Handles the SOAP request.
Returns the response message as XML.
Expects a C<HTTP::Request> object as only parameter.
You may use any other object as parameter, as long as it implements the
following methods:
=over
=item * header
Called as header('SOAPAction'). Must return the corresponding HTTP header.
=item * content
Returns the request message
=back
=head1 LICENSE AND COPYRIGHT =head1 LICENSE AND COPYRIGHT
Copyright 2004-2008 Martin Kutter. Copyright 2004-2008 Martin Kutter.
+4 -2
View File
@@ -2,6 +2,8 @@ package SOAP::WSDL::Server::CGI;
use strict; use strict;
use warnings; use warnings;
use Encode;
use HTTP::Request; use HTTP::Request;
use HTTP::Response; use HTTP::Response;
use HTTP::Status; use HTTP::Status;
@@ -12,7 +14,7 @@ use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Server); use base qw(SOAP::WSDL::Server);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.06');
# mostly copied from SOAP::Lite. Unfortunately we can't use SOAP::Lite's CGI # mostly copied from SOAP::Lite. Unfortunately we can't use SOAP::Lite's CGI
# server directly - we would have to swap out it's base class... # server directly - we would have to swap out it's base class...
@@ -80,7 +82,7 @@ sub handle {
else { else {
$response = HTTP::Response->new(200); $response = HTTP::Response->new(200);
$response->header('Content-type' => 'text/xml; charset="utf-8"'); $response->header('Content-type' => 'text/xml; charset="utf-8"');
$response->content( $response_message ); $response->content( encode('utf8', $response_message ) );
{ {
use bytes; use bytes;
$response->header('Content-length', length $response_message); $response->header('Content-length', length $response_message);
+3 -3
View File
@@ -16,7 +16,7 @@ use Apache2::Const -compile => qw(
HTTP_LENGTH_REQUIRED HTTP_LENGTH_REQUIRED
); );
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %LOADED_OF = (); my %LOADED_OF = ();
@@ -266,8 +266,8 @@ Thanks!
=head1 LICENSE AND COPYRIGHT =head1 LICENSE AND COPYRIGHT
This library is free software. You may distribute/modify it under This file is part of SOAP-WSDL. You may distribute/modify it under
the same terms as perl itself. the same terms as perl itself
=head1 AUTHOR =head1 AUTHOR
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %port_of :ATTR(:name<port> :default<[]>); my %port_of :ATTR(:name<port> :default<[]>);
+9 -8
View File
@@ -1,8 +1,8 @@
package SOAP::WSDL::Transport::HTTP; package SOAP::WSDL::Transport::HTTP;
use strict; use strict; use warnings;
use base qw(LWP::UserAgent); use base qw(LWP::UserAgent);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
# create methods normally inherited from SOAP::Client # create methods normally inherited from SOAP::Client
SUBFACTORY: { SUBFACTORY: {
@@ -23,9 +23,10 @@ sub send_receive {
$encoding = defined($encoding) $encoding = defined($encoding)
? lc($encoding) ? lc($encoding)
: 'utf8'; : 'utf-8';
$content_type = 'text/xml' if not defined($content_type); $content_type = "text/xml; charset=$encoding"
if not defined($content_type);
# what's this all about? # what's this all about?
# unfortunately combination of LWP and Perl 5.6.1 and later has bug # unfortunately combination of LWP and Perl 5.6.1 and later has bug
# in sending multibyte characters. LWP uses length() to calculate # in sending multibyte characters. LWP uses length() to calculate
@@ -48,7 +49,7 @@ sub send_receive {
my $request = HTTP::Request->new( 'POST', my $request = HTTP::Request->new( 'POST',
$endpoint, $endpoint,
[ 'Content-Type', "$content_type; charset=$encoding", [ 'Content-Type', "$content_type",
'Content-Length', $bytelength, 'Content-Length', $bytelength,
'SOAPAction', $soap_action, 'SOAPAction', $soap_action,
], ],
@@ -90,10 +91,10 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 677 $ $Rev: 744 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: HTTP.pm 677 2008-05-18 20:17:56Z kutterma $ $Id: HTTP.pm 744 2008-10-15 16:58:45Z kutterma $
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Transport/HTTP.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Transport/HTTP.pm $
=cut =cut
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'basic'; use Class::Std::Fast::Storable constructor => 'basic';
use SOAP::WSDL::Factory::Transport; use SOAP::WSDL::Factory::Transport;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
# register on loading # register on loading
SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ ); SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use SOAP::WSDL::Factory::Transport; use SOAP::WSDL::Factory::Transport;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ ); SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );
SOAP::WSDL::Factory::Transport->register( https => __PACKAGE__ ); SOAP::WSDL::Factory::Transport->register( https => __PACKAGE__ );
+1 -1
View File
@@ -2,7 +2,7 @@ package SOAP::WSDL::TypeLookup;
use strict; use strict;
use warnings; use warnings;
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %TYPE_FROM = ( my %TYPE_FROM = (
# wsdl: # wsdl:
+1 -1
View File
@@ -5,7 +5,7 @@ use SOAP::WSDL::XSD::Schema::Builtin;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
my %schema_of :ATTR(:name<schema> :default<[]>); my %schema_of :ATTR(:name<schema> :default<[]>);
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<enumeration value=""> #<enumeration value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<attribute #<attribute
# default = string # default = string
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<attributeGroup #<attributeGroup
# id = ID # id = ID
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
# only used in SOAP::WSDL - will be obsolete once SOAP::WSDL uses the # only used in SOAP::WSDL - will be obsolete once SOAP::WSDL uses the
# generative approach, too # generative approach, too
+4 -4
View File
@@ -1,12 +1,11 @@
package SOAP::WSDL::XSD::ComplexType; package SOAP::WSDL::XSD::ComplexType;
use strict; use strict;
use warnings; use warnings;
use Carp;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use Scalar::Util qw(blessed); use Scalar::Util qw(blessed);
use base qw/SOAP::WSDL::Base/; use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.06');
# id provided by Base # id provided by Base
# name provided by Base # name provided by Base
@@ -26,12 +25,13 @@ my %maxInclusive :ATTR(:name<maxInclusive> :default<[]>);
my %attribute_of :ATTR(:name<attribute> :default<()>); my %attribute_of :ATTR(:name<attribute> :default<()>);
my %element_of :ATTR(:name<element> :default<()>); my %element_of :ATTR(:name<element> :default<[]>);
my %group_of :ATTR(:name<group> :default<()>); my %group_of :ATTR(:name<group> :default<()>);
my %variety_of :ATTR(:name<variety> :default<()>); my %variety_of :ATTR(:name<variety> :default<()>);
my %base_of :ATTR(:name<base> :default<()>); my %base_of :ATTR(:name<base> :default<()>);
my %itemType_of :ATTR(:name<itemType> :default<()>); my %itemType_of :ATTR(:name<itemType> :default<()>);
my %abstract_of :ATTR(:name<abstract> :default<()>); my %abstract_of :ATTR(:name<abstract> :default<()>);
my %final_of :ATTR(:name<final> :default<()>);
my %mixed_of :ATTR(:name<mixed> :default<()>); # default is false my %mixed_of :ATTR(:name<mixed> :default<()>); # default is false
my %derivation_of :ATTR(:name<derivation> :default<()>); my %derivation_of :ATTR(:name<derivation> :default<()>);
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
# id provided by Base # id provided by Base
# name provided by Base # name provided by Base
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<enumeration value=""> #<enumeration value="">
+1 -2
View File
@@ -4,8 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<pattern value=""> #<pattern value="">
# id provided by Base # id provided by Base
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<xs:group name="myModelGroup"> #<xs:group name="myModelGroup">
# <xs:sequence> # <xs:sequence>
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<minExclusive value=""> #<minExclusive value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<minExclusive value=""> #<minExclusive value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<minExclusive value=""> #<minExclusive value="">
+2 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<maxLength value=""> #<maxLength value="">
@@ -14,5 +14,6 @@ use version; our $VERSION = qv('2.00.03');
# may be defined as atomic simpleType # may be defined as atomic simpleType
my %value_of :ATTR(:name<value> :default<()>); my %value_of :ATTR(:name<value> :default<()>);
my %fixed_of :ATTR(:name<fixed> :default<()>);
1; 1;
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<minExclusive value=""> #<minExclusive value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<minExclusive value=""> #<minExclusive value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<minExclusive value=""> #<minExclusive value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
#<pattern value=""> #<pattern value="">
+1 -1
View File
@@ -4,7 +4,7 @@ use warnings;
use Class::Std::Fast::Storable; use Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.03'); use version; our $VERSION = qv('2.00.05');
# child elements # child elements
my %attributeGroup_of :ATTR(:name<attributeGroup> :default<[]>); my %attributeGroup_of :ATTR(:name<attributeGroup> :default<[]>);

Some files were not shown because too many files have changed in this diff Show More