import SOAP-WSDL 2.00.10 from CPAN

git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00.10
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.10.tar.gz
This commit is contained in:
Martin Kutter
2009-05-15 14:52:28 -08:00
committed by Michael G. Schwern
parent 3b30e8d0e2
commit 9023aa06a4
97 changed files with 895 additions and 375 deletions

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.09', dist_version => '2.00.10',
module_name => 'SOAP::WSDL', module_name => 'SOAP::WSDL',
license => 'artistic', license => 'artistic',
requires => { requires => {

31
Changes
View File

@@ -1,4 +1,4 @@
Release notes for SOAP::WSDL 2.00.07 Release notes for SOAP::WSDL 2.00.10
------- -------
I'm proud to present a new release of SOAP::WSDL. I'm proud to present a new release of SOAP::WSDL.
@@ -37,6 +37,35 @@ Features:
The following changes have been made: The following changes have been made:
2.00.10 - May 15 2009
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/).
* #44546: XML Schema types with names cuase errors when including anonymous types
SOAP::WSDL now handles element names with "." correctly
* #45037 ComplexTypes' elements in different namespaces not serialized
correctly
SOAP::WSDL now serializes elements in different namespaces correctly
* #43769 Fault11 serialization issue when passed Element for detail
The detail fault element is now automatically wrapped into an appropriate
detail object and serialized correctly.
Note that passing a list as details content is not supported yet.
* #43674 Fault not caught/propagated in SOAP::WSDL::Client::call
Deserializer faults in SOAP::WSDL::Client now propagate correctly to the
caller.
The following uncategorized improvements have been made:
* improved Java example: Commented test class
* improved documentation: Added Cookbook entry for HTTP Negotiate Authentication
(Kerberos).
2.00.09 - Feb 22 2009 2.00.09 - Feb 22 2009
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

View File

@@ -197,6 +197,7 @@ lib/SOAP/WSDL/SOAP/Body.pm
lib/SOAP/WSDL/SOAP/Header.pm lib/SOAP/WSDL/SOAP/Header.pm
lib/SOAP/WSDL/SOAP/HeaderFault.pm lib/SOAP/WSDL/SOAP/HeaderFault.pm
lib/SOAP/WSDL/SOAP/Operation.pm lib/SOAP/WSDL/SOAP/Operation.pm
lib/SOAP/WSDL/SOAP/Typelib/Fault.pm
lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
lib/SOAP/WSDL/Transport/HTTP.pm lib/SOAP/WSDL/Transport/HTTP.pm
lib/SOAP/WSDL/Transport/Loopback.pm lib/SOAP/WSDL/Transport/Loopback.pm

171
META.yml
View File

@@ -1,12 +1,12 @@
--- ---
name: SOAP-WSDL name: SOAP-WSDL
version: 2.00.09 version: 2.00.10
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
license: artistic license: artistic
resources: resources:
license: ~ license: http://opensource.org/licenses/artistic-license.php
requires: requires:
Class::Std::Fast: 0.0.5 Class::Std::Fast: 0.0.5
Data::Dumper: 0 Data::Dumper: 0
@@ -41,220 +41,225 @@ build_requires:
provides: provides:
SOAP::WSDL: SOAP::WSDL:
file: lib/SOAP/WSDL.pm file: lib/SOAP/WSDL.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Base: SOAP::WSDL::Base:
file: lib/SOAP/WSDL/Base.pm file: lib/SOAP/WSDL/Base.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Binding: SOAP::WSDL::Binding:
file: lib/SOAP/WSDL/Binding.pm file: lib/SOAP/WSDL/Binding.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Client: SOAP::WSDL::Client:
file: lib/SOAP/WSDL/Client.pm file: lib/SOAP/WSDL/Client.pm
version: 2.00.09 version: 2.00.10
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.09 version: 2.00.10
SOAP::WSDL::Definitions: SOAP::WSDL::Definitions:
file: lib/SOAP/WSDL/Definitions.pm file: lib/SOAP/WSDL/Definitions.pm
version: 2.00.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
SOAP::WSDL::Message: SOAP::WSDL::Message:
file: lib/SOAP/WSDL/Message.pm file: lib/SOAP/WSDL/Message.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::OpMessage: SOAP::WSDL::OpMessage:
file: lib/SOAP/WSDL/OpMessage.pm file: lib/SOAP/WSDL/OpMessage.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Operation: SOAP::WSDL::Operation:
file: lib/SOAP/WSDL/Operation.pm file: lib/SOAP/WSDL/Operation.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Part: SOAP::WSDL::Part:
file: lib/SOAP/WSDL/Part.pm file: lib/SOAP/WSDL/Part.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Port: SOAP::WSDL::Port:
file: lib/SOAP/WSDL/Port.pm file: lib/SOAP/WSDL/Port.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::PortType: SOAP::WSDL::PortType:
file: lib/SOAP/WSDL/PortType.pm file: lib/SOAP/WSDL/PortType.pm
version: 2.00.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
SOAP::WSDL::SOAP::Typelib::Fault:
file: lib/SOAP/WSDL/SOAP/Typelib/Fault.pm
version: 2.00.10
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.09 version: 2.00.10
SOAP::WSDL::SOAP::Typelib::Fault11Detail:
file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
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.09 version: 2.00.10
SOAP::WSDL::Server: SOAP::WSDL::Server:
file: lib/SOAP/WSDL/Server.pm file: lib/SOAP/WSDL/Server.pm
version: 2.00.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
SOAP::WSDL::Server::Simple: SOAP::WSDL::Server::Simple:
file: lib/SOAP/WSDL/Server/Simple.pm file: lib/SOAP/WSDL/Server/Simple.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Service: SOAP::WSDL::Service:
file: lib/SOAP/WSDL/Service.pm file: lib/SOAP/WSDL/Service.pm
version: 2.00.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
SOAP::WSDL::TypeLookup: SOAP::WSDL::TypeLookup:
file: lib/SOAP/WSDL/TypeLookup.pm file: lib/SOAP/WSDL/TypeLookup.pm
version: 2.00.09 version: 2.00.10
SOAP::WSDL::Types: SOAP::WSDL::Types:
file: lib/SOAP/WSDL/Types.pm file: lib/SOAP/WSDL/Types.pm
version: 2.00.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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 +284,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.09 version: 2.00.10
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.09 version: 2.00.10
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 +344,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.09 version: 2.00.10
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 +357,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.00.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
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.09 version: 2.00.10
generated_by: Module::Build version 0.31012 generated_by: Module::Build version 0.280801
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

View File

@@ -1,4 +1,4 @@
# Note: this file was auto-generated by Module::Build::Compat version 0.31012 # Note: this file was auto-generated by Module::Build::Compat version 0.2808_01
require 5.8.0; require 5.8.0;
use Module::Build::Compat 0.02; use Module::Build::Compat 0.02;

View File

@@ -7,10 +7,25 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
// Spring JUnit Test runner
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
// load spring context from here
@ContextConfiguration(locations = { "classpath:test-context.xml"}) @ContextConfiguration(locations = { "classpath:test-context.xml"})
/** Test class for the HelloWorld service
*
* It's more of a integration test, not a Unit test (though using
* JUnit4).
*
* Fire up the SOAP server in example/server/hello_simple.pl before
* running - the test will fail if it can't find the appropriate SOAP server
* at http://localhost:8081/
*
*/
public class HelloWorldTest { public class HelloWorldTest {
// soapClient bean automatically provided by spring
@Autowired @Autowired
private Service1Soap soapClient; private Service1Soap soapClient;

View File

@@ -14,7 +14,7 @@ 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.09'); use version; our $VERSION = qv('2.00.10');
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>);
@@ -831,9 +831,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: WSDL.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: WSDL.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

View File

@@ -5,7 +5,7 @@ use List::Util;
use Scalar::Util; use Scalar::Util;
use Carp qw(croak carp confess); use Carp qw(croak carp confess);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

View File

@@ -5,7 +5,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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);
@@ -171,20 +171,29 @@ sub call {
# Try deserializing response - there may be some, # Try deserializing response - there may be some,
# even if transport did not succeed (got a 500 response) # even if transport did not succeed (got a 500 response)
if ( $response ) { if ( $response ) {
my ($result_body, $result_header) = eval { # as our faults are false, returning a success marker is the only
$deserializer_of{ $ident }->deserialize( $response ); # reliable way of determining whether the deserializer succeeded.
# Custom deserializers may return an empty list, or undef,
# and $@ is not guaranteed to be undefined.
my ($success, $result_body, $result_header) = eval {
(1, $deserializer_of{ $ident }->deserialize( $response ));
}; };
if (not $@) { if (defined $success) {
return wantarray return wantarray
? ($result_body, $result_header) ? ($result_body, $result_header)
: $result_body; : $result_body;
} }
return $deserializer_of{ $ident }->generate_fault({ elsif (blessed $@) { #}&& $@->isa('SOAP::WSDL::SOAP::Typelib::Fault11')) {
code => 'soap:Server', return $@;
role => 'urn:localhost', }
message => "Error deserializing message: $@. \n" else {
. "Message was: \n$response" return $deserializer_of{ $ident }->generate_fault({
}); code => 'soap:Server',
role => 'urn:localhost',
message => "Error deserializing message: $@. \n"
. "Message was: \n$response"
});
}
}; };
# if we had no success (Transport layer error status code) # if we had no success (Transport layer error status code)
@@ -400,9 +409,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Client.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Client.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
sub call { sub call {
my ($self, $method, $body, $header) = @_; my ($self, $method, $body, $header) = @_;
@@ -85,9 +85,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Base.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Base.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

View File

@@ -5,7 +5,7 @@ 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.09'); use version; our $VERSION = qv('2.00.10');
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<[]>);
@@ -115,9 +115,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Definitions.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Definitions.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
sub BUILD { sub BUILD {
my ($self, $ident, $args_of_ref) = @_; my ($self, $ident, $args_of_ref) = @_;
@@ -163,9 +163,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Hash.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Hash.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
our @ISA; our @ISA;
eval { eval {
@@ -140,9 +140,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: SOM.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: SOM.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>); my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
my %strict_of :ATTR(:get<strict> :init_arg<strict> :default<1>); my %strict_of :ATTR(:get<strict> :init_arg<strict> :default<1>);
@@ -126,9 +126,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: XSD.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: XSD.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
sub new { sub new {
my ($class, $arg_ref) = @_; my ($class, $arg_ref) = @_;

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.09'); use version; our $VERSION = qv('2.00.10');
sub _initialize { sub _initialize {
my ($self, $parser) = @_; my ($self, $parser) = @_;

View File

@@ -9,7 +9,7 @@ use base qw(SOAP::WSDL::Expat::Base);
BEGIN { require Class::Std::Fast }; BEGIN { require Class::Std::Fast };
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
# GLOBALS # GLOBALS
my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF(); my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF();
@@ -330,10 +330,10 @@ the same terms as perl itself
=head1 Repository information =head1 Repository information
$Id: MessageParser.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: MessageParser.pm 851 2009-05-15 22:45:18Z kutterma $
$LastChangedDate: 2009-02-23 22:12:24 +0100 (Mo, 23 Feb 2009) $ $LastChangedDate: 2009-05-16 00:45:18 +0200 (Sa, 16. Mai 2009) $
$LastChangedRevision: 805 $ $LastChangedRevision: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$HeadURL: https://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 $

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.09'); use version; our $VERSION = qv('2.00.10');
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: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: MessageStreamParser.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: MessageStreamParser.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

View File

@@ -5,7 +5,7 @@ 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.09'); use version; our $VERSION = qv('2.00.10');
# #
# Import child elements of a WSDL / XML Schema tree into the current tree # Import child elements of a WSDL / XML Schema tree into the current tree
@@ -367,10 +367,10 @@ the same terms as perl itself
=head1 Repository information =head1 Repository information
$Id: WSDLParser.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: WSDLParser.pm 851 2009-05-15 22:45:18Z kutterma $
$LastChangedDate: 2009-02-23 22:12:24 +0100 (Mo, 23 Feb 2009) $ $LastChangedDate: 2009-05-16 00:45:18 +0200 (Sa, 16. Mai 2009) $
$LastChangedRevision: 805 $ $LastChangedRevision: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$HeadURL: https://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 $

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.09'); use version; our $VERSION = qv('2.00.10');
my %DESERIALIZER = ( my %DESERIALIZER = (
'1.1' => 'SOAP::WSDL::Deserializer::XSD', '1.1' => 'SOAP::WSDL::Deserializer::XSD',

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.09'); use version; our $VERSION = qv('2.00.10');
my %GENERATOR = ( my %GENERATOR = (
'XSD' => 'SOAP::WSDL::Generator::Template::XSD', 'XSD' => 'SOAP::WSDL::Generator::Template::XSD',

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.09'); use version; our $VERSION = qv('2.00.10');
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: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Serializer.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Serializer.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
my %registered_transport_of = (); my %registered_transport_of = ();
@@ -243,9 +243,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Transport.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Transport.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
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<[]>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<{}>);

View File

@@ -1,11 +1,11 @@
package SOAP::WSDL::Generator::Template; package SOAP::WSDL::Generator::Template;
use strict; use warnings; use strict; use warnings;
use Template; use Template 2.18;
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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

View File

@@ -4,7 +4,7 @@ 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 Scalar::Util qw(blessed);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
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<{}>);
@@ -129,8 +129,10 @@ sub create_subpackage_name {
my $type = ref $arg_ref eq 'HASH' ? $arg_ref->{ value } : $arg_ref; my $type = ref $arg_ref eq 'HASH' ? $arg_ref->{ value } : $arg_ref;
my @name_from = $type->get_name() || (); ; my @name_from = $type->get_name() || (); ;
my $parent = $type;
my $top_node = $parent; # search for top node in tree (the one directly below the Schema)
my $parent = $type;
my $top_node = $parent;
if (! $parent->get_parent()->isa('SOAP::WSDL::XSD::Schema') ) { if (! $parent->get_parent()->isa('SOAP::WSDL::XSD::Schema') ) {
NAMES: while ($parent = $parent->get_parent()) { NAMES: while ($parent = $parent->get_parent()) {
$top_node = $parent; $top_node = $parent;
@@ -141,9 +143,13 @@ sub create_subpackage_name {
} }
} }
# create name for top node # create name for top node
die "FOO" if not defined $top_node; die "No top node found" if not defined $top_node;
my $top_node_name = $self->create_xsd_name($top_node); my $top_node_name = $self->create_xsd_name($top_node);
my $package_name = join('::_', $top_node_name , (@name_from) ? join('::', @name_from) : () ); my $package_name = join('::_', $top_node_name , (@name_from) ? join('::', @name_from) : () );
# replace dots by :: in name - subpackage names may include dots, too
$package_name =~s{\.}{::}xg;
return $package_name; return $package_name;
} }

View File

@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
use File::Basename; use File::Basename;
use File::Spec; use File::Spec;
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
use SOAP::WSDL::Generator::Visitor::Typemap; use SOAP::WSDL::Generator::Visitor::Typemap;
use SOAP::WSDL::Generator::Template::Plugin::XSD; use SOAP::WSDL::Generator::Template::Plugin::XSD;

View File

@@ -1,4 +1,5 @@
[% USE XSD -%] [% USE XSD;
USE Dumper -%]
package [% XSD.create_xsd_name(complexType) %]; package [% XSD.create_xsd_name(complexType) %];
use strict; use strict;
use warnings; use warnings;
@@ -12,6 +13,8 @@ __PACKAGE__->_set_element_form_qualified([%-
IF complexType.schema.get_elementFormDefault == 'qualified' IF complexType.schema.get_elementFormDefault == 'qualified'
-%]1[% ELSE %]0[% END %]); -%]1[% ELSE %]0[% END %]);
sub get_xmlns { '[% complexType.get_targetNamespace %]' };
[% INCLUDE complexType/contentModel.tt %] [% INCLUDE complexType/contentModel.tt %]
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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

View File

@@ -32,15 +32,28 @@ this backend:
=head3 Accessing HTTP(S) webservices protected by NTLM authentication =head3 Accessing HTTP(S) webservices protected by NTLM authentication
If you want to connect to a windows server using some Windows Domain Login, please
consider using Kerberos instead of the (older) NTLM mechanism - see below.
Kerberos and NTLM are (currently) mutually exclusive - when LWP::Authen::Negotiate
is installed, it will always be queried (and will always raise an error), even
if you don't want to use it. See http://rt.cpan.org/Public/Bug/Display.html?id=32826
for details.
You need the L<NTLM|NTLM> distribution installed to access webservices protected You need the L<NTLM|NTLM> distribution installed to access webservices protected
by NTLM authentication. More specifically, you need the Authen::NTLM module by NTLM authentication. More specifically, you need the Authen::NTLM module
from this distribution. Note that this is different from the Authen::NTML from this distribution. Note that this is different from the Authen::NTML
distribution by Yee Man Chan also available from CPAN. distribution by Yee Man Chan also available from CPAN.
Your user credentials usually need to include the windows domain like this: Your user credentials usually need to include the windows domain or the
windows hostname like this:
testdomain\testuser testdomain\testuser
or
\\testhost\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.
@@ -56,6 +69,57 @@ You may, of course, decide to just hack the generated class. Be advised that
subclassing might be a more appropriate solution - re-generating overwrites subclassing might be a more appropriate solution - re-generating overwrites
changes in interface classes. changes in interface classes.
=head3 Accessing HTTP(S) webservices protected by NTLMv2
There are different variants of NTLM, and by default Authen::NTLM uses the v1 variant.
NTLM is a connection-based handshake authentication protocol, which requires
three or more requests on the same connection:
Request POST
Response 401 Unauthorized
WWW-Authenticate: NTLM
Request Authorization: NTLM <base64-encoded type-1-message>
Response 401 Unauthorized
WWW-Authenticate: NTLM <base64-encoded type-2-message>
Request Authorization: NTLM <base64-encoded type-3-message>
Response 200 Ok
If you try to access a NTLMv2 protected web service and switch on LWP::Debug by
saying
use LWP::Debug qw(+);
you should see at least two lines containing something like
Authorization NTLM TlRMTVNTUAABAAAAB7IAAAAAAAAAAAAAAwADACAAAABmb28=
...
Authorization NTLM TlRMTVNTUAABAAAAB7IAAAAAAAAAAAAAAw ... much longer ... ADACAAAABmb28=
If you're talking to a Server using NTLMv2 exclusively, you will only the first line
in the debug output, and then an error.
To explicitely enable NTLMv2, do the following in your client:
use Authen::NTLM;
ntlmv2(1);
This globally enables the use of NTLMv2. Note that this is a global setting: All
clients running in the same perl interpreter will be affected. This can
cause unexpected issues when running under mod_perl.
=head3 Accessing webservices protected by HTTP Kerberos Authentication
Use the L<LWP::Authen::Negotiate|LWP::Authen::Negotiate> plugin from CPAN. You
need to set up GSSAPI to perform the Kerberos authentication, though. How to do
this is implementation specific (MIT or Heimdahl). See your Kerberos/GSSAPI
documentation for details.
(Newer) Windows Web Services usually allow to use both the Negotiate (Kerberos)
and NTLM authentication scheme.
=head3 Accessing HTTPS webservices protected by certificate authentication =head3 Accessing HTTPS webservices protected by certificate authentication
You need Crypt::SSLeay installed to access HTTPS webservices. You need Crypt::SSLeay installed to access HTTPS webservices.

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.09'); use version; our $VERSION = qv('2.00.10');
my %part_of :ATTR(:name<part> :default<[]>); my %part_of :ATTR(:name<part> :default<[]>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<[]>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<[]>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

View File

@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
use List::Util; use List::Util;
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
my %operation_of :ATTR(:name<operation> :default<()>); my %operation_of :ATTR(:name<operation> :default<()>);

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.09'); use version; our $VERSION = qv('2.00.10');
my %location :ATTR(:name<location> :default<()>); my %location :ATTR(:name<location> :default<()>);
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.09'); use version; our $VERSION = qv('2.00.10');
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{}>);

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.09'); use version; our $VERSION = qv('2.00.10');
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{}>);

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.09'); use version; our $VERSION = qv('2.00.10');
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.09'); use version; our $VERSION = qv('2.00.10');
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<()>);

View File

@@ -0,0 +1,8 @@
package SOAP::WSDL::SOAP::Typelib::Fault;
use strict;
use warnings;
use Class::Std::Fast::Storable constructor => 'none';
use version; our $VERSION = qv('2.00.10');
1;

View File

@@ -1,51 +1,102 @@
package SOAP::WSDL::SOAP::Typelib::Fault11; package SOAP::WSDL::SOAP::Typelib::Fault11;
use strict; {
use warnings; use strict;
use Class::Std::Fast::Storable constructor => 'none'; use warnings;
use Class::Std::Fast::Storable constructor => 'none';
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
use SOAP::WSDL::XSD::Typelib::ComplexType; use Scalar::Util qw(blessed);
use SOAP::WSDL::XSD::Typelib::Element;
use base qw( use SOAP::WSDL::XSD::Typelib::ComplexType;
SOAP::WSDL::XSD::Typelib::Element use SOAP::WSDL::XSD::Typelib::Element;
SOAP::WSDL::XSD::Typelib::ComplexType
);
my %faultcode_of :ATTR(:get<faultcode>); use base qw(
my %faultstring_of :ATTR(:get<faultstring>); SOAP::WSDL::SOAP::Typelib::Fault
my %faultactor_of :ATTR(:get<faultactor>); SOAP::WSDL::XSD::Typelib::Element
my %detail_of :ATTR(:get<detail>); SOAP::WSDL::XSD::Typelib::ComplexType
);
__PACKAGE__->_factory( my %faultcode_of : ATTR(:get<faultcode>);
[ qw(faultcode faultstring faultactor detail) ], my %faultstring_of : ATTR(:get<faultstring>);
{ my %faultactor_of : ATTR(:get<faultactor>);
faultcode => \%faultcode_of, my %detail_of : ATTR(:get<detail>);
faultstring => \%faultstring_of,
faultactor => \%faultactor_of, __PACKAGE__->_factory(
detail => \%detail_of, [qw(faultcode faultstring faultactor detail)],
}, {
{ faultcode => \%faultcode_of,
faultcode => 'SOAP::WSDL::XSD::Typelib::Builtin::QName', faultstring => \%faultstring_of,
faultstring => 'SOAP::WSDL::XSD::Typelib::Builtin::string', faultactor => \%faultactor_of,
faultactor => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI', detail => \%detail_of,
detail => 'SOAP::WSDL::XSD::Typelib::Builtin::anyType', },
{
faultcode => 'SOAP::WSDL::XSD::Typelib::Builtin::QName',
faultstring => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
faultactor => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
detail => 'SOAP::WSDL::SOAP::Typelib::Fault11Detail',
} );
sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' }
__PACKAGE__->__set_name('Fault');
__PACKAGE__->__set_nillable(0);
__PACKAGE__->__set_minOccurs();
__PACKAGE__->__set_maxOccurs();
__PACKAGE__->__set_ref('');
# always return false in boolean context - a fault is never true...
sub as_bool : BOOLIFY {
return;
} }
);
sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' }; # override set_detail to allow "auto-vivification" of a details object
# must be implemented via symbol table operation - _factory adds
# methods via symbol table, too.
__PACKAGE__->__set_name('Fault'); # BLOCK to scope warnings
__PACKAGE__->__set_nillable(0); {
__PACKAGE__->__set_minOccurs(); no warnings qw(redefine);
__PACKAGE__->__set_maxOccurs(); my $set_detail_sub = \&set_detail;
__PACKAGE__->__set_ref(''); *set_detail = sub {
my ( $self, $detail ) = @_;
# always return false in boolean context - a fault is never true... # create SOAP::WSDL::SOAP::Typelib::Fault11Detail wrapper if there
sub as_bool : BOOLIFY { return; } # is none
if ( not blessed $detail
or
not $detail->isa('SOAP::WSDL::SOAP::Typelib::Fault11Detail') )
{
$detail = SOAP::WSDL::SOAP::Typelib::Fault11Detail->new(
{value => $detail} );
}
# call original method
$set_detail_sub->( $self, $detail );
};
}
Class::Std::initialize();
}
package SOAP::WSDL::SOAP::Typelib::Fault11Detail;
{
use strict;
use warnings;
use Class::Std::Fast::Storable constructor => 'none';
use base qw(
SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType
);
sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' }
__PACKAGE__->__set_name('Fault');
__PACKAGE__->__set_nillable(0);
__PACKAGE__->__set_minOccurs();
__PACKAGE__->__set_maxOccurs();
Class::Std::initialize();
}
Class::Std::initialize();
1; 1;
=pod =pod
@@ -88,6 +139,16 @@ Getter/setter for object's faultactor property.
Getter/setter for detail object's detail property. Getter/setter for detail object's detail property.
The detail element is a SOAP::WSDL::SOAP::Typelib::Fault11Detail object.
This class is automatically loaded when using
SOAP::WSDL::SOAP::Typelib::Fault11, so you can't B<use> it separately.
Any string or object not of this class will be automatically wrapped into
a detail object.
Note that passing a list of detail object is currently not supported (though
the SOAP1.1 note allows this).
=head1 LICENSE AND COPYRIGHT =head1 LICENSE AND COPYRIGHT
Copyright 2007 Martin Kutter. All rights reserved. Copyright 2007 Martin Kutter. All rights reserved.
@@ -101,9 +162,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Fault11.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Fault11.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
use SOAP::WSDL::Factory::Serializer; use SOAP::WSDL::Factory::Serializer;
@@ -132,9 +132,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: XSD.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: XSD.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
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<{}>);

View File

@@ -14,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.09'); use version; our $VERSION = qv('2.00.10');
# 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...

View File

@@ -16,7 +16,7 @@ use Apache2::Const -compile => qw(
HTTP_LENGTH_REQUIRED HTTP_LENGTH_REQUIRED
); );
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
my %LOADED_OF = (); my %LOADED_OF = ();

View File

@@ -14,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.09'); use version; our $VERSION = qv('2.00.10');
# 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...

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.09'); use version; our $VERSION = qv('2.00.10');
my %port_of :ATTR(:name<port> :default<[]>); my %port_of :ATTR(:name<port> :default<[]>);

View File

@@ -2,7 +2,7 @@ package SOAP::WSDL::Transport::HTTP;
use strict; use warnings; use strict; use warnings;
use base qw(LWP::UserAgent); use base qw(LWP::UserAgent);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
# create methods normally inherited from SOAP::Client # create methods normally inherited from SOAP::Client
SUBFACTORY: { SUBFACTORY: {
@@ -95,9 +95,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: HTTP.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: HTTP.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://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

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.09'); use version; our $VERSION = qv('2.00.10');
# register on loading # register on loading
SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ ); SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );

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.09'); use version; our $VERSION = qv('2.00.10');
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__ );

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.09'); use version; our $VERSION = qv('2.00.10');
my %TYPE_FROM = ( my %TYPE_FROM = (
# wsdl: # wsdl:

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.09'); use version; our $VERSION = qv('2.00.10');
my %schema_of :ATTR(:name<schema> :default<[]>); my %schema_of :ATTR(:name<schema> :default<[]>);

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.09'); use version; our $VERSION = qv('2.00.10');
#<enumeration value=""> #<enumeration value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<attribute #<attribute
# default = string # default = string

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.09'); use version; our $VERSION = qv('2.00.10');
#<attributeGroup #<attributeGroup
# id = ID # id = ID

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.09'); use version; our $VERSION = qv('2.00.10');
# 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

View File

@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
use Scalar::Util qw(blessed); use Scalar::Util qw(blessed);
use base qw(SOAP::WSDL::Base); use base qw(SOAP::WSDL::Base);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
# id provided by Base # id provided by Base
# name provided by Base # name provided by Base

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.09'); use version; our $VERSION = qv('2.00.10');
# id provided by Base # id provided by Base
# name provided by Base # name provided by Base

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.09'); use version; our $VERSION = qv('2.00.10');
#<enumeration value=""> #<enumeration value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<pattern value=""> #<pattern value="">
# id provided by Base # id provided by Base

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.09'); use version; our $VERSION = qv('2.00.10');
#<xs:group name="myModelGroup"> #<xs:group name="myModelGroup">
# <xs:sequence> # <xs:sequence>

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.09'); use version; our $VERSION = qv('2.00.10');
#<minExclusive value=""> #<minExclusive value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<minExclusive value=""> #<minExclusive value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<minExclusive value=""> #<minExclusive value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<maxLength value=""> #<maxLength value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<minExclusive value=""> #<minExclusive value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<minExclusive value=""> #<minExclusive value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<minExclusive value=""> #<minExclusive value="">

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.09'); use version; our $VERSION = qv('2.00.10');
#<pattern value=""> #<pattern value="">

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.09'); use version; our $VERSION = qv('2.00.10');
# child elements # child elements
my %attributeGroup_of :ATTR(:name<attributeGroup> :default<[]>); my %attributeGroup_of :ATTR(:name<attributeGroup> :default<[]>);

View File

@@ -6,7 +6,7 @@ use SOAP::WSDL::XSD::Schema;
use SOAP::WSDL::XSD::Builtin; use SOAP::WSDL::XSD::Builtin;
use base qw(SOAP::WSDL::XSD::Schema); use base qw(SOAP::WSDL::XSD::Schema);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
# all builtin types - add validation (e.g. content restrictions) later... # all builtin types - add validation (e.g. content restrictions) later...
my %BUILTINS = ( my %BUILTINS = (
@@ -103,9 +103,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Builtin.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Builtin.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Schema/Builtin.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Schema/Builtin.pm $
=cut =cut

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.09'); use version; our $VERSION = qv('2.00.10');
my %length_of :ATTR(:name<length> :default<[]>); my %length_of :ATTR(:name<length> :default<[]>);
my %minLength_of :ATTR(:name<minLength> :default<[]>); my %minLength_of :ATTR(:name<minLength> :default<[]>);

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.09'); use version; our $VERSION = qv('2.00.10');
#<totalDigits value=""> #<totalDigits value="">

View File

@@ -4,7 +4,7 @@ use warnings;
use base qw(SOAP::WSDL::XSD::Typelib::Element); use base qw(SOAP::WSDL::XSD::Typelib::Element);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
sub start_tag { sub start_tag {
# my ($self, $opt, $value) = @_; # my ($self, $opt, $value) = @_;

View File

@@ -3,7 +3,7 @@ use strict;
use warnings; use warnings;
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
sub serialize { sub serialize {
# we work on @_ for performance. # we work on @_ for performance.

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.09'); use version; our $VERSION = qv('2.00.10');
use SOAP::WSDL::XSD::Typelib::Builtin::anyType; use SOAP::WSDL::XSD::Typelib::Builtin::anyType;
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType; use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;

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.09'); use version; our $VERSION = qv('2.00.10');
sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' }; sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' };

View File

@@ -3,7 +3,7 @@ use strict;
use warnings; use warnings;
use Class::Std::Fast::Storable constructor => 'none', cache => 1; use Class::Std::Fast::Storable constructor => 'none', cache => 1;
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType); use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType);

View File

@@ -6,7 +6,7 @@ use Date::Format;
use Class::Std::Fast::Storable constructor => 'none', cache => 1; use Class::Std::Fast::Storable constructor => 'none', cache => 1;
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType); use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
sub set_value { sub set_value {
# use set_value from base class if we have a XML-Time format # use set_value from base class if we have a XML-Time format

View File

@@ -10,7 +10,7 @@ require Class::Std::Fast::Storable;
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType); use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
# remove in 2.1 # remove in 2.1
our $AS_HASH_REF_WITHOUT_ATTRIBUTES = 0; our $AS_HASH_REF_WITHOUT_ATTRIBUTES = 0;
@@ -23,7 +23,10 @@ my %NAMES_OF; # XML names of elements in a class
# XML Attribute handling # XML Attribute handling
my %xml_attr_of :ATTR(); my %xml_attr_of :ATTR();
# Namespace handling
my %xmlns_of :ATTR();
# don't you ever dare to use this ! # don't you ever dare to use this !
our $___attributes_of_ref = \%ATTRIBUTES_OF; our $___attributes_of_ref = \%ATTRIBUTES_OF;
@@ -319,6 +322,7 @@ sub _factory {
*{ "$class\::_serialize" } = sub { *{ "$class\::_serialize" } = sub {
my $ident = ${ $_[0] }; my $ident = ${ $_[0] };
my $option_ref = $_[1]; my $option_ref = $_[1];
# return concatenated return value of serialize call of all # return concatenated return value of serialize call of all
# elements retrieved from get_elements expanding list refs. # elements retrieved from get_elements expanding list refs.
return \join q{} , map { return \join q{} , map {
@@ -327,7 +331,7 @@ sub _factory {
# do we have some content # do we have some content
if (defined $element) { if (defined $element) {
$element = [ $element ] if not ref $element eq 'ARRAY'; $element = [ $element ] if not ref $element eq 'ARRAY';
# from 2.00.09 on $NAMES_OF is filled - use || $_; for # from 2.00.10 on $NAMES_OF is filled - use || $_; for
# backward compatibility # backward compatibility
my $name = $NAMES_OF{$class}->{$_} || $_; my $name = $NAMES_OF{$class}->{$_} || $_;
my $target_namespace = $_[0]->get_xmlns(); my $target_namespace = $_[0]->get_xmlns();
@@ -345,19 +349,45 @@ sub _factory {
# serialize complextype elments (of other types) with their # serialize complextype elments (of other types) with their
# serializer, but add element tags around. # serializer, but add element tags around.
else { else {
# TODO: check whether we have to handle # default for undef is true
# types from different namespaces special, too if (! defined $ELEMENT_FORM_QUALIFIED_OF{ $class }
if (!defined $ELEMENT_FORM_QUALIFIED_OF{ $class }
or $ELEMENT_FORM_QUALIFIED_OF{ $class } or $ELEMENT_FORM_QUALIFIED_OF{ $class }
) { ) {
join q{}, $_->start_tag({ name => $name , %{ $option_ref } }) # handle types from different namespaces
, $_->serialize($option_ref) #
, $_->end_tag({ name => $name , %{ $option_ref } }); # serialize with last namespace put on stack
# if the last namespace is a change from the
# before-last
#
if (
exists $option_ref->{ xmlns_stack }
&& (scalar @{ $option_ref->{ xmlns_stack } } >= 2)
&& ($option_ref->{ xmlns_stack }->[-1] ne $option_ref->{ xmlns_stack }->[-2])) {
# warn "New namespace: ", $option_ref->{ xmlns_stack }->[-1];
join q{}, $_->start_tag({ name => $name ,
xmlns => $option_ref->{ xmlns_stack }->[-1],
%{ $option_ref } })
, $_->serialize($option_ref)
, $_->end_tag({ name => $name , %{ $option_ref } });
}
else {
join q{}, $_->start_tag({ name => $name , %{ $option_ref } })
, $_->serialize($option_ref)
, $_->end_tag({ name => $name , %{ $option_ref } });
}
} }
else { else {
# remove xmlns option if there is one # in elementFormDefault="unqualified" mode,
my $set_xmlns = delete $option_ref->{xmlns} # the serialize method has to set
if (exists $option_ref->{xmlns}); # xmnlns="" on all elements inside a ComplexType
#
# Other serializers usually use prefixes
# for "unqualified" and just omit all prefixes
# for inner elements
# check whether we "had" a xmlns around
my $set_xmlns = delete $option_ref->{xmlns};
# serialize start tag with xmlns="" if out parent # serialize start tag with xmlns="" if out parent
# did not do that # did not do that
join q{}, $_->start_tag({ join q{}, $_->start_tag({
@@ -400,10 +430,14 @@ sub __get_attr_class {};
sub __serialize_complex { sub __serialize_complex {
# we work on @_ for performance. # we work on @_ for performance.
$_[1] ||= {}; # $option_ref $_[1] ||= {}; # $option_ref
push @{ $_[1]->{ xmlns_stack } }, $_[0]->get_xmlns();
# get content first (pass by reference to avoid copying) # get content first (pass by reference to avoid copying)
my $content_ref = $_[0]->_serialize($_[1]); # option_ref my $content_ref = $_[0]->_serialize($_[1]); # option_ref
pop @{ $_[1]->{ xmlns_stack } };
# do we have a empty element ? # do we have a empty element ?
return $_[0]->start_tag({ %{ $_[1] }, empty => 1 }) return $_[0]->start_tag({ %{ $_[1] }, empty => 1 })
if not length ${ $content_ref }; if not length ${ $content_ref };
@@ -411,6 +445,10 @@ sub __serialize_complex {
return join q{}, $_[0]->start_tag($_[1]), ${ $content_ref }, $_[0]->end_tag(); return join q{}, $_[0]->start_tag($_[1]), ${ $content_ref }, $_[0]->end_tag();
} }
sub get_xmlns {
return q{}
}
1; 1;
__END__ __END__
@@ -633,9 +671,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: ComplexType.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: ComplexType.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
=cut =cut

View File

@@ -2,7 +2,7 @@ package SOAP::WSDL::XSD::Typelib::Element;
use strict; use warnings; use strict; use warnings;
use Class::Std::Fast::Storable constructor => 'none'; use Class::Std::Fast::Storable constructor => 'none';
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
my %NAME; my %NAME;
my %NILLABLE; my %NILLABLE;
@@ -177,9 +177,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: Element.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: Element.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/Element.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/Element.pm $
=cut =cut

View File

@@ -2,14 +2,14 @@ package SOAP::WSDL::XSD::Typelib::SimpleType;
use strict; use warnings; use strict; use warnings;
use SOAP::WSDL::XSD::Typelib::Builtin; use SOAP::WSDL::XSD::Typelib::Builtin;
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
package SOAP::WSDL::XSD::Typelib::SimpleType::restriction; package SOAP::WSDL::XSD::Typelib::SimpleType::restriction;
use strict; use strict;
use SOAP::WSDL::XSD::Typelib::Builtin; use SOAP::WSDL::XSD::Typelib::Builtin;
use base qw(SOAP::WSDL::XSD::Typelib::SimpleType); use base qw(SOAP::WSDL::XSD::Typelib::SimpleType);
use version; our $VERSION = qv('2.00.09'); use version; our $VERSION = qv('2.00.10');
1; 1;
__END__ __END__
@@ -132,9 +132,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
=head1 REPOSITORY INFORMATION =head1 REPOSITORY INFORMATION
$Rev: 805 $ $Rev: 851 $
$LastChangedBy: kutterma $ $LastChangedBy: kutterma $
$Id: SimpleType.pm 805 2009-02-23 21:12:24Z kutterma $ $Id: SimpleType.pm 851 2009-05-15 22:45:18Z kutterma $
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm $
=cut =cut

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.09'); use version; our $VERSION = qv('2.00.10');
#<pattern value=""> #<pattern value="">

0
t/CodeFirst/ComplexType.pm Normal file → Executable file
View File

0
t/CodeFirst/element.pm Normal file → Executable file
View File

0
t/CodeFirst/sequence.pm Normal file → Executable file
View File

77
t/CodeFirst/test.pl Normal file → Executable file
View File

@@ -5,26 +5,85 @@ use lib '../lib';
use base q{CodeFirst}; use base q{CodeFirst};
sub test :WebMethod( sub test :WebMethod(
action => "test", name => "sayHello",
returns => "bar", action => "uri:helloWorld/sayHello",
header => "bam", request_body => "CodeFirst::HelloRequest",
body => "baz" response_body => "CodeFirst::HelloResponse"
) { ) {
# return either [ \%body, \%header ]
# or \%body
# or [ Body->new(), Header->new ]
# or even [ Body->new(), [ Header1->new(), Header2->new() ]]
# or any combination of that
return [{
},
{
}];
} }
=pod
... would translate to
<element name="test">
<complexType>
<sequence>
<element name="testRequest" type="bam"/>
</sequence>
</complexType>
</element>
=cut
=pod
sub test2 :WebMethod( sub test2 :WebMethod(
action => "test2", action => "test2",
returns => "bar", request_header => "bar",
header => "bam", reqest_body => "bam",
body => "baz" response_header => "bam",
response_body => "baz"
) { ) {
} }
=cut
package main; package main;
use Data::Dumper; use Data::Dumper;
my $test = testCodeFirst->new(); my $test = testCodeFirst->new();
# print Dumper $test->_action_map;
print Dumper $test->get_transport()->get_action_map_ref(); # print Dumper $test->_action_map;
# print Dumper $test->get_transport()->get_action_map_ref();
#print $test->get_wsdl("http://localhost/foo")->toString();
use CodeFirst::Serializer;
use CodeFirst::Deserializer;
use CodeFirst::HelloResponse;
use CodeFirst::HelloRequest;
my $serializer = CodeFirst::Serializer->new();
#print $serializer->serialize("sayHelloResponse", "uri:MooseX.SOAP.CodeFirst", CodeFirst::HelloResponse->new(
# Result => "Test"
#))->toString;
#
my $xml = $serializer->serialize("sayHello", "uri:MooseX.SOAP.testCodeFirst", CodeFirst::HelloRequest->new(
Name => 'Flint',
GivenName => 'Erol',
))->toString;
#print "\n\n";
print $xml, "\n";
print $test->get_wsdl()->toString(), "\n";
my $deserializer = CodeFirst::Deserializer->new();
$deserializer->schema( $test->schema );
print Dumper $deserializer->deserialize($xml, 'CodeFirst::HelloRequest');
1; 1;

View File

@@ -1,66 +1,96 @@
package FaultDeserializer;
use strict; use strict;
use warnings; use warnings;
use Test::More tests => 15; use SOAP::WSDL::SOAP::Typelib::Fault11;
sub new { bless {}, shift }
sub deserialize {
die SOAP::WSDL::SOAP::Typelib::Fault11->new( {} );
}
package main;
use strict;
use warnings;
use Test::More tests => 16;
use SOAP::WSDL::Transport::Loopback;
use Scalar::Util qw(blessed);
use_ok qw(SOAP::WSDL::Client); use_ok qw(SOAP::WSDL::Client);
{ {
no warnings qw(redefine once); no warnings qw(redefine once);
*SOAP::WSDL::Factory::Transport::get_transport = sub { *SOAP::WSDL::Factory::Transport::get_transport = sub {
my ($self, $url , %args_of) = @_; my ( $self, $url, %args_of ) = @_;
if (%args_of) { if (%args_of) {
is $args_of{foo}, 'bar'; is $args_of{foo}, 'bar';
} }
}; };
} }
ok my $client = SOAP::WSDL::Client->new();
ok $client = SOAP::WSDL::Client->new({ sub test_client_basics {
proxy => 'http://localhost', ok my $client = SOAP::WSDL::Client->new();
}); ok $client = SOAP::WSDL::Client->new( {proxy => 'http://localhost',} );
is $client->get_content_type(), 'text/xml; charset=utf-8';
is $client->get_endpoint(), 'http://localhost';
$client->set_proxy( 'http://localhost', foo => 'bar', );
is $client->get_content_type(), 'text/xml; charset=utf-8'; #TODO is this behaviour still required? declare as deprecated and remove...
$client->set_proxy( ['http://localhost', foo => 'bar',] );
is $client->get_endpoint(), 'http://localhost'; is $client->get_proxy(), $client->get_transport(),
'get_proxy returns same as get_transport';
$client->set_proxy('http://localhost', ok $client->set_soap_version('1.1');
foo => 'bar', is $client->get_soap_version(), '1.1';
);
#TODO is this behaviour still required? declare as deprecated and remove... $client->set_deserializer_args( {strict => 0} );
$client->set_proxy( is $client->get_deserializer_args()->{strict}, 0;
[ 'http://localhost', }
foo => 'bar',
]
);
sub test_call {
my $client = SOAP::WSDL::Client->new();
$client->no_dispatch(1);
$client->set_serializer('main');
my $serialize = $client->call(
{operation => 'testMethod'},
{foo => 'bar'},
{bar => 'baz'} );
is $serialize->{body}->{foo}, 'bar';
is $serialize->{header}->{bar}, 'baz';
is $client->get_proxy(), $client->get_transport(), 'get_proxy returns same as get_transport'; # Old calling style compatibility test - foo => bar is body...
$serialize = $client->call( {operation => 'testMethod'}, foo => 'bar' );
is $serialize->{body}->{foo}, 'bar';
ok $client->set_soap_version('1.1'); # Old calling style compatibility test - foo => bar is body...
is $client->get_soap_version(), '1.1'; $serialize = $client->call( 'testMethod', foo => 'bar' );
is $serialize->{body}->{foo}, 'bar';
$client->no_dispatch(1); }
$client->set_serializer('main');
my $serialize = $client->call({
operation => 'testMethod'
}, { foo => 'bar'}, { bar => 'baz'});
is $serialize->{ body }->{ foo }, 'bar';
is $serialize->{ header }->{ bar }, 'baz';
# Old calling style compatibility test - foo => bar is body...
$serialize = $client->call({
operation => 'testMethod'
}, foo => 'bar');
is $serialize->{ body }->{ foo }, 'bar';
# Old calling style compatibility test - foo => bar is body...
$serialize = $client->call('testMethod', foo => 'bar');
is $serialize->{ body }->{ foo }, 'bar';
sub serialize { sub serialize {
my $self = shift; my $self = shift;
return shift; return shift;
} }
$client->set_deserializer_args({ strict => 0 });
is $client->get_deserializer_args()->{ strict }, 0; sub test_deserializer_fault {
my $client = SOAP::WSDL::Client->new();
$client->set_deserializer( FaultDeserializer->new() );
$client->set_transport( SOAP::WSDL::Transport::Loopback->new() );
my $fault = $client->call(
{operation => 'testMethod'},
{foo => 'bar'},
{bar => 'baz'} );
ok( (blessed $fault and $fault->isa('SOAP::WSDL::SOAP::Typelib::Fault11')),
'Return fault on throwing during deserialization ' . $@);
}
test_client_basics();
test_call();
test_deserializer_fault();

View File

@@ -1,4 +1,4 @@
use Test::More tests => 14; use Test::More tests => 15;
use File::Basename qw(dirname); use File::Basename qw(dirname);
use File::Spec; use File::Spec;
use File::Path; use File::Path;
@@ -63,6 +63,8 @@ use_ok qw(MyInterfaces::My::SOAP::testService::testPort);
use_ok qw(MyServer::My::SOAP::testService::testPort); use_ok qw(MyServer::My::SOAP::testService::testPort);
use_ok qw(MyTypes::testComplexTypeRestriction); use_ok qw(MyTypes::testComplexTypeRestriction);
use_ok qw(MyTypes::testComplexTypeAll); use_ok qw(MyTypes::testComplexTypeAll);
# type with dot in name including atomic type
use_ok qw(MyTypes::test::ComplexTypeElementAtomicSimpleType);
SKIP: { SKIP: {
eval { require Test::Pod::Content; } eval { require Test::Pod::Content; }
or skip 'Cannot test pod content without Test::Pod::Content', 6; or skip 'Cannot test pod content without Test::Pod::Content', 6;

View File

@@ -73,16 +73,18 @@ __PACKAGE__->_factory(
); );
package MyElementSimpleContent; package MyElementSimpleContent;
use base qw( {
SOAP::WSDL::XSD::Typelib::Element use base qw(
SOAP::WSDL::XSD::Typelib::ComplexType SOAP::WSDL::XSD::Typelib::Element
SOAP::WSDL::XSD::Typelib::Builtin::string SOAP::WSDL::XSD::Typelib::ComplexType
); SOAP::WSDL::XSD::Typelib::Builtin::string
);
__PACKAGE__->__set_name( 'MyElementSimpleContent' ); __PACKAGE__->__set_name( 'MyElementSimpleContent' );
sub __get_attr_class { 'MyElement::_ATTR' };
sub __get_attr_class { 'MyElement::_ATTR' };
sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' }
}
package main; package main;
use Test::More tests => 127; use Test::More tests => 127;
use Storable; use Storable;
@@ -392,4 +394,4 @@ ok ! exists $obj->as_hash_ref(1)->{ xmlattr };
local $SOAP::WSDL::XSD::Typelib::ComplexType::AS_HASH_REF_WITHOUT_ATTRIBUTES = 1; local $SOAP::WSDL::XSD::Typelib::ComplexType::AS_HASH_REF_WITHOUT_ATTRIBUTES = 1;
ok ! exists $obj->as_hash_ref()->{ xmlattr }; ok ! exists $obj->as_hash_ref()->{ xmlattr };
ok ! exists $obj->as_hash_ref(1)->{ xmlattr }; ok ! exists $obj->as_hash_ref(1)->{ xmlattr };
} }

View File

@@ -104,7 +104,7 @@
</xsd:complexContent> </xsd:complexContent>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="testComplexTypeChoice"> <xsd:complexType name="test.ComplexTypeChoice">
<xsd:annotation> <xsd:annotation>
<xsd:documentation>ComplexType Test</xsd:documentation> <xsd:documentation>ComplexType Test</xsd:documentation>
</xsd:annotation> </xsd:annotation>
@@ -179,14 +179,14 @@
<xsd:element name="Header" type="tns:testComplexTypeSequence" /> <xsd:element name="Header" type="tns:testComplexTypeSequence" />
<xsd:element name="testHeader" type="tns:testComplexTypeSequence" /> <xsd:element name="testHeader" type="tns:testComplexTypeSequence" />
<xsd:element name="testChoice" type="tns:testComplexTypeChoice" /> <xsd:element name="test.Choice" type="tns:test.ComplexTypeChoice" />
<xsd:complexType name="testComplexTypeElementAtomicSimpleType"> <xsd:complexType name="test.ComplexTypeElementAtomicSimpleType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="testString" type="xsd:string" <xsd:element name="testString" type="xsd:string"
minOccurs="0" /> minOccurs="0" />
<xsd:element name="testAtomicSimpleTypeElement" <xsd:element name="test.AtomicSimpleTypeElement"
minOccurs="0"> minOccurs="0">
<xsd:simpleType> <xsd:simpleType>
<xsd:restriction base="xsd:decimal"> <xsd:restriction base="xsd:decimal">
@@ -209,7 +209,7 @@
</xsd:schema> </xsd:schema>
</types> </types>
<message name="testChoice"> <message name="testChoice">
<part name="parameters" element="tns:testChoice" /> <part name="parameters" element="tns:test.Choice" />
</message> </message>
<message name="testRequest"> <message name="testRequest">
<part name="testAll" element="tns:testElementString" /> <part name="testAll" element="tns:testElementString" />
@@ -219,7 +219,7 @@
</message> </message>
<message name="testMultiPartWarning"> <message name="testMultiPartWarning">
<part name="testAll" element="tns:testElementString" /> <part name="testAll" element="tns:testElementString" />
<part name="parameters" element="tns:testChoice" /> <part name="parameters" element="tns:test.Choice" />
</message> </message>
<message name="testHeaderRequest"> <message name="testHeaderRequest">
<part name="testBody" element="tns:testHeader" /> <part name="testBody" element="tns:testHeader" />

270
t/lib/CodeFirst.pm Normal file → Executable file
View File

@@ -1,63 +1,251 @@
package CodeFirst; package CodeFirst;
use strict; use Moose;
use warnings;
use Carp; use Carp;
use Class::Std::Fast::Storable;
use Scalar::Util qw(blessed); use Scalar::Util qw(blessed);
use XML::LibXML;
use parent qw(Attribute::Handlers);
our $VERSION = 0.1; our $VERSION = 0.1;
$Carp::Internal{attributes}++;
my %ACTION_MAP_OF; my %ACTION_MAP_OF;
my %ACTION_DATA_OF;
my %SCHEMA_DATA_OF;
my %transport_class_of :ATTR(:name<transport_class> :default<SOAP::WSDL::Server::CGI>); has 'schema' => is => 'rw';
my %transport_of : ATTR(:name<transport> :default<()>);
my %dispatch_to : ATTR(:name<dispatch_to> :default<()>);
sub START { has 'typeMap' => is => 'rw',
my ( $self, $ident, $arg_ref ) = @_; isa => 'CodeFirst::Types',
my $class = ref $self; default => sub { CodeFirst::Types->new() };
eval "require $transport_class_of{ $ident }"
or die "Cannot load transport class $transport_class_of{ $ident }: $@";
$transport_of{$ident} = $transport_class_of{$ident}->new( {
action_map_ref => $ACTION_MAP_OF{$class},
dispatch_to => $self
} );
}
sub handle { sub WebMethod : ATTR {
$transport_of{${$_[0]}}->handle( @_[1 .. $#_] ); my (
} $class, $symbol, $referent, $attr,
$data, $phase, $filename, $linenum
) = @_;
sub _action_map { my %parameter_of;
my $class = ref $_[0]; eval { %parameter_of = @{$data} };
return $ACTION_MAP_OF{$class};
}
no warnings qw(redefine);
sub MODIFY_CODE_ATTRIBUTES {
my ( $class, $code, @attribute_from ) = @_;
my ($content) = grep { $_ =~ m{^WebMethod}xms } @attribute_from
or return @attribute_from;
$content =~ s{^WebMethod}{}xms;
my %parameter_of = eval $content;
if ($@) { if ($@) {
die "Cannot parse :WebMethod arguments: $@ at " . Carp::shortmess; die "Cannot parse :WebMethod arguments: $@ at " . Carp::shortmess;
} }
$ACTION_MAP_OF{$class}->{$parameter_of{action}} = $code; $ACTION_MAP_OF{$class}->{$parameter_of{action}} = $symbol;
# print Dumper \%ACTION_MAP_OF; $ACTION_DATA_OF{$class}->{$parameter_of{action}} = {
name => $parameter_of{name},
request => {
body => $parameter_of{request_body},
header => $parameter_of{request_header},
},
response => {
body => $parameter_of{response_body},
header => $parameter_of{response_header},
}};
return Class::Std::Fast::MODIFY_CODE_ATTRIBUTES( $class, $code, $SCHEMA_DATA_OF{$class}->{$parameter_of{request_header}} = undef
@attribute_from ); if ( $parameter_of{request_header} );
$SCHEMA_DATA_OF{$class}->{$parameter_of{request_body}} = undef
if ( $parameter_of{request_body} );
$SCHEMA_DATA_OF{$class}->{$parameter_of{response_header}} = undef
if ( $parameter_of{response_header} );
$SCHEMA_DATA_OF{$class}->{$parameter_of{response_body}} = undef
if ( $parameter_of{response_body} );
#use Data::Dumper;
#print Dumper \%ACTION_DATA_OF;
#return Class::Std::Fast::MODIFY_CODE_ATTRIBUTES( $class, $code,
# @attribute_from );
return; # @attribute_from;
}
sub get_wsdl {
my $self = shift;
my $class = ref $self;
my $address = shift;
my $className = $class;
$className =~ s{::}{.}xg;
my XML::LibXML::Document $doc = XML::LibXML::Document->new();
my $root = XML::LibXML::Element->new("definitions");
$root->setNamespace( 'http://schemas.xmlsoap.org/wsdl/', undef, 1 );
$root->setNamespace( 'http://www.w3.org/2001/XMLSchema', 'xs', 0 );
$root->setNamespace( 'http://schemas.xmlsoap.org/wsdl/soap/', 'soap', 0 );
$root->setNamespace( 'uri:MooseX.SOAP.' . $className, 'tns', 0 );
$root->setAttribute( 'targetNamespace', 'uri:MooseX.SOAP.' . $className );
$doc->setDocumentElement($root);
my $type = XML::LibXML::Element->new('types');
$root->appendChild($type);
my $schema = $self->create_schema($className);
$type->appendChild($schema);
my $portType = XML::LibXML::Element->new('portType');
$portType->setAttribute( 'name', $className . 'SOAP11' );
my $binding = XML::LibXML::Element->new('binding');
$binding->setAttribute( 'name', $className . 'SOAP11Binding' );
$binding->setAttribute( 'type', 'tns:' . $className . 'SOAP11' );
# <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
# style="document" />
my $soapBinding = XML::LibXML::Element->new('binding');
$soapBinding->setNamespace( 'http://schemas.xmlsoap.org/wsdl/soap/',
'soap', 1 );
$soapBinding->setAttribute( 'transport',
'http://schemas.xmlsoap.org/soap/http' );
$soapBinding->setAttribute( 'style', 'document' );
$binding->appendChild($soapBinding);
for my $method ( keys %{$ACTION_DATA_OF{$class}} ) {
my $methodName = $ACTION_DATA_OF{$class}->{$method}->{name};
my $inElement = XML::LibXML::Element->new('element');
$inElement->setAttribute( 'name', $methodName );
$schema->appendChild($inElement);
my $outElement = XML::LibXML::Element->new('element');
$outElement->setAttribute( 'name', $methodName . 'Response' );
$schema->appendChild($outElement);
my $inMessage = XML::LibXML::Element->new('message');
$inMessage->setAttribute( 'name', $methodName . 'SoapIn' );
$root->appendChild($inMessage);
my $inMessageBodyPart = XML::LibXML::Element->new('part');
$inMessageBodyPart->setAttribute( 'name', 'input' );
$inMessageBodyPart->setAttribute( 'element', 'tns:' . $methodName );
$inMessage->appendChild($inMessageBodyPart);
my $outMessage = XML::LibXML::Element->new('message');
$outMessage->setAttribute( 'name', $methodName . 'SoapOut' );
$root->appendChild($outMessage);
my $outMessageBodyPart = XML::LibXML::Element->new('part');
$outMessageBodyPart->setAttribute( 'name', 'output' );
$outMessageBodyPart->setAttribute( 'element',
'tns:' . $methodName . 'Response' );
$outMessage->appendChild($outMessageBodyPart);
my $portOperation = XML::LibXML::Element->new('operation');
$portOperation->setAttribute( 'name', $methodName );
$portType->appendChild($portOperation);
my $inputMessage = XML::LibXML::Element->new('input');
$inputMessage->setAttribute( 'message',
'tns:' . $methodName . 'SoapIn' );
$portOperation->appendChild($inputMessage);
my $outputMessage = XML::LibXML::Element->new('output');
$outputMessage->setAttribute( 'message',
'tns:' . $methodName . 'SoapOut' );
$portOperation->appendChild($outputMessage);
my $bindingOperation = XML::LibXML::Element->new('operation');
$bindingOperation->setAttribute( 'name', $methodName );
$binding->appendChild($bindingOperation);
my $soapOperation = XML::LibXML::Element->new('operation');
$soapOperation->setNamespace( 'http://schemas.xmlsoap.org/wsdl/soap/',
'soap', 1 );
$soapOperation->setAttribute( 'soapAction', $method );
$soapOperation->setAttribute( 'style', 'document' );
$bindingOperation->appendChild($soapOperation);
my $bindingInput = XML::LibXML::Element->new('input');
$bindingOperation->appendChild($bindingInput);
my $soapInputBody = XML::LibXML::Element->new('body');
$soapInputBody->setNamespace( 'http://schemas.xmlsoap.org/wsdl/soap/',
'soap', 1 );
$soapInputBody->setAttribute( 'use', 'literal' );
$bindingInput->appendChild($soapInputBody);
my $bindingOutput = XML::LibXML::Element->new('output');
$bindingOperation->appendChild($bindingOutput);
my $soapOutputBody = XML::LibXML::Element->new('body');
$soapOutputBody->setNamespace(
'http://schemas.xmlsoap.org/wsdl/soap/',
'soap', 1 );
$soapOutputBody->setAttribute( 'use', 'literal' );
$bindingOutput->appendChild($soapOutputBody);
}
$root->appendChild($portType);
$root->appendChild($binding);
my $service = XML::LibXML::Element->new('service');
$service->setAttribute( 'name', $className );
$root->appendChild($service);
my $port = XML::LibXML::Element->new('port');
$port->setAttribute( 'name', $className . 'PortSOAP' );
$port->setAttribute( 'binding', 'tns:' . $className . 'SOAP11Binding' );
my $soapAddress = XML::LibXML::Element->new('address');
$soapAddress->setNamespace( 'http://schemas.xmlsoap.org/wsdl/soap/',
'soap', 1 );
$soapAddress->setAttribute( 'location', $address );
$port->appendChild($soapAddress);
$service->appendChild($port);
$self->schema($schema);
return $doc;
}
sub create_schema {
my ( $self, $className ) = @_;
my $class = ref $self;
my $schema = XML::LibXML::Element->new('schema');
$schema->setAttribute( 'targetNamespace',
'uri:MooseX.SOAP.' . $className );
$schema->setNamespace( 'http://www.w3.org/2001/XMLSchema', undef, 1 );
$schema->setNamespace( 'http://www.w3.org/2001/XMLSchema', 'xs', 0 );
$schema->setNamespace( 'uri:MooseX.SOAP.' . $className, 'tns', 0 );
for my $type ( keys %{$SCHEMA_DATA_OF{$class}} ) {
eval "require $type";
$schema->appendChild( $self->create_xsd_type($type) );
}
return $schema;
}
sub create_xsd_type {
my $self = shift;
my $type = shift;
my $name = $type;
$name =~ s{::}{\.}xg;
my $node = XML::LibXML::Element->new('complexType');
$node->setNamespace( 'http://www.w3.org/2001/XMLSchema', undef, 1 );
$node->setAttribute( 'name', $name );
my $sequence = XML::LibXML::Element->new('sequence');
$node->appendChild($sequence);
my $typeMap = $self->typeMap->types();
for my $attribute ( reverse $type->meta()->get_all_attributes() ) {
my $attributeNode = XML::LibXML::Element->new('element');
$attributeNode->setAttribute( 'name', $attribute->name );
$attributeNode->setAttribute( 'type',
$typeMap->{$attribute->type_constraint} );
$sequence->appendChild($attributeNode);
}
return $node;
} }
1; 1;
1;