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:
committed by
Michael G. Schwern
parent
3b30e8d0e2
commit
9023aa06a4
2
Build.PL
2
Build.PL
@@ -5,7 +5,7 @@ $build = Module::Build->new(
|
||||
create_makefile_pl => 'small',
|
||||
dist_abstract => 'SOAP with WSDL support',
|
||||
dist_name => 'SOAP-WSDL',
|
||||
dist_version => '2.00.09',
|
||||
dist_version => '2.00.10',
|
||||
module_name => 'SOAP::WSDL',
|
||||
license => 'artistic',
|
||||
requires => {
|
||||
|
||||
31
Changes
31
Changes
@@ -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.
|
||||
@@ -37,6 +37,35 @@ Features:
|
||||
|
||||
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
|
||||
|
||||
The following bugs have been fixed (the numbers in square brackets are the
|
||||
|
||||
1
MANIFEST
1
MANIFEST
@@ -197,6 +197,7 @@ lib/SOAP/WSDL/SOAP/Body.pm
|
||||
lib/SOAP/WSDL/SOAP/Header.pm
|
||||
lib/SOAP/WSDL/SOAP/HeaderFault.pm
|
||||
lib/SOAP/WSDL/SOAP/Operation.pm
|
||||
lib/SOAP/WSDL/SOAP/Typelib/Fault.pm
|
||||
lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm
|
||||
lib/SOAP/WSDL/Transport/HTTP.pm
|
||||
lib/SOAP/WSDL/Transport/Loopback.pm
|
||||
|
||||
171
META.yml
171
META.yml
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: SOAP-WSDL
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
author:
|
||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||
abstract: SOAP with WSDL support
|
||||
license: artistic
|
||||
resources:
|
||||
license: ~
|
||||
license: http://opensource.org/licenses/artistic-license.php
|
||||
requires:
|
||||
Class::Std::Fast: 0.0.5
|
||||
Data::Dumper: 0
|
||||
@@ -41,220 +41,225 @@ build_requires:
|
||||
provides:
|
||||
SOAP::WSDL:
|
||||
file: lib/SOAP/WSDL.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Base:
|
||||
file: lib/SOAP/WSDL/Base.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Binding:
|
||||
file: lib/SOAP/WSDL/Binding.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Client:
|
||||
file: lib/SOAP/WSDL/Client.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Client::Base:
|
||||
file: lib/SOAP/WSDL/Client/Base.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Definitions:
|
||||
file: lib/SOAP/WSDL/Definitions.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Deserializer::Hash:
|
||||
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Deserializer::SOM:
|
||||
file: lib/SOAP/WSDL/Deserializer/SOM.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Deserializer::XSD:
|
||||
file: lib/SOAP/WSDL/Deserializer/XSD.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Expat::Base:
|
||||
file: lib/SOAP/WSDL/Expat/Base.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Expat::Message2Hash:
|
||||
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Expat::MessageParser:
|
||||
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Expat::MessageStreamParser:
|
||||
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Expat::WSDLParser:
|
||||
file: lib/SOAP/WSDL/Expat/WSDLParser.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Factory::Deserializer:
|
||||
file: lib/SOAP/WSDL/Factory/Deserializer.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Factory::Generator:
|
||||
file: lib/SOAP/WSDL/Factory/Generator.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Factory::Serializer:
|
||||
file: lib/SOAP/WSDL/Factory/Serializer.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Factory::Transport:
|
||||
file: lib/SOAP/WSDL/Factory/Transport.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::Iterator::WSDL11:
|
||||
file: lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::PrefixResolver:
|
||||
file: lib/SOAP/WSDL/Generator/PrefixResolver.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::Template:
|
||||
file: lib/SOAP/WSDL/Generator/Template.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::Template::Plugin::XSD:
|
||||
file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::Template::XSD:
|
||||
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::Visitor:
|
||||
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Generator::Visitor::Typemap:
|
||||
file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Message:
|
||||
file: lib/SOAP/WSDL/Message.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::OpMessage:
|
||||
file: lib/SOAP/WSDL/OpMessage.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Operation:
|
||||
file: lib/SOAP/WSDL/Operation.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Part:
|
||||
file: lib/SOAP/WSDL/Part.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Port:
|
||||
file: lib/SOAP/WSDL/Port.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::PortType:
|
||||
file: lib/SOAP/WSDL/PortType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::SOAP::Address:
|
||||
file: lib/SOAP/WSDL/SOAP/Address.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::SOAP::Body:
|
||||
file: lib/SOAP/WSDL/SOAP/Body.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::SOAP::Header:
|
||||
file: lib/SOAP/WSDL/SOAP/Header.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::SOAP::HeaderFault:
|
||||
file: lib/SOAP/WSDL/SOAP/HeaderFault.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::SOAP::Operation:
|
||||
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:
|
||||
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:
|
||||
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Server:
|
||||
file: lib/SOAP/WSDL/Server.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Server::CGI:
|
||||
file: lib/SOAP/WSDL/Server/CGI.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Server::Mod_Perl2:
|
||||
file: lib/SOAP/WSDL/Server/Mod_Perl2.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Server::Simple:
|
||||
file: lib/SOAP/WSDL/Server/Simple.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Service:
|
||||
file: lib/SOAP/WSDL/Service.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Transport::HTTP:
|
||||
file: lib/SOAP/WSDL/Transport/HTTP.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Transport::Loopback:
|
||||
file: lib/SOAP/WSDL/Transport/Loopback.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Transport::Test:
|
||||
file: lib/SOAP/WSDL/Transport/Test.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::TypeLookup:
|
||||
file: lib/SOAP/WSDL/TypeLookup.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::Types:
|
||||
file: lib/SOAP/WSDL/Types.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Annotation:
|
||||
file: lib/SOAP/WSDL/XSD/Annotation.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Attribute:
|
||||
file: lib/SOAP/WSDL/XSD/Attribute.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::AttributeGroup:
|
||||
file: lib/SOAP/WSDL/XSD/AttributeGroup.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::ComplexType:
|
||||
file: lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Element:
|
||||
file: lib/SOAP/WSDL/XSD/Element.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Enumeration:
|
||||
file: lib/SOAP/WSDL/XSD/Enumeration.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::FractionDigits:
|
||||
file: lib/SOAP/WSDL/XSD/FractionDigits.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Group:
|
||||
file: lib/SOAP/WSDL/XSD/Group.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Length:
|
||||
file: lib/SOAP/WSDL/XSD/Length.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::MaxExclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MaxExclusive.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::MaxInclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MaxInclusive.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::MaxLength:
|
||||
file: lib/SOAP/WSDL/XSD/MaxLength.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::MinExclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MinExclusive.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::MinInclusive:
|
||||
file: lib/SOAP/WSDL/XSD/MinInclusive.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::MinLength:
|
||||
file: lib/SOAP/WSDL/XSD/MinLength.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Pattern:
|
||||
file: lib/SOAP/WSDL/XSD/Pattern.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Schema:
|
||||
file: lib/SOAP/WSDL/XSD/Schema.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Schema::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::TotalDigits:
|
||||
file: lib/SOAP/WSDL/XSD/TotalDigits.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Attribute:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::ENTITY:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::ID:
|
||||
@@ -279,14 +284,14 @@ provides:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::anyType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::boolean:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::byte:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::date:
|
||||
@@ -339,7 +344,7 @@ provides:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::time:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::token:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte:
|
||||
@@ -352,20 +357,20 @@ provides:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::Element:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
version: 2.00.09
|
||||
version: 2.00.10
|
||||
SOAP::WSDL::XSD::WhiteSpace:
|
||||
file: lib/SOAP/WSDL/XSD/WhiteSpace.pm
|
||||
version: 2.00.09
|
||||
generated_by: Module::Build version 0.31012
|
||||
version: 2.00.10
|
||||
generated_by: Module::Build version 0.280801
|
||||
meta-spec:
|
||||
url: http://module-build.sourceforge.net/META-spec-v1.2.html
|
||||
version: 1.2
|
||||
|
||||
@@ -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;
|
||||
use Module::Build::Compat 0.02;
|
||||
|
||||
|
||||
@@ -7,10 +7,25 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
// Spring JUnit Test runner
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
|
||||
// load spring context from here
|
||||
@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 {
|
||||
|
||||
// soapClient bean automatically provided by spring
|
||||
@Autowired
|
||||
private Service1Soap soapClient;
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ use Class::Std::Fast constructor => 'none';
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||
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 %wsdl_of :ATTR(:name<wsdl>);
|
||||
@@ -831,9 +831,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use List::Util;
|
||||
use Scalar::Util;
|
||||
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 %lang_of :ATTR(:name<lang> :default<()>);
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
|
||||
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 %type_of :ATTR(:name<type> :default<()>);
|
||||
|
||||
@@ -11,7 +11,7 @@ use SOAP::WSDL::Factory::Serializer;
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
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 %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
|
||||
@@ -171,20 +171,29 @@ sub call {
|
||||
# Try deserializing response - there may be some,
|
||||
# even if transport did not succeed (got a 500 response)
|
||||
if ( $response ) {
|
||||
my ($result_body, $result_header) = eval {
|
||||
$deserializer_of{ $ident }->deserialize( $response );
|
||||
# as our faults are false, returning a success marker is the only
|
||||
# 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
|
||||
? ($result_body, $result_header)
|
||||
: $result_body;
|
||||
}
|
||||
elsif (blessed $@) { #}&& $@->isa('SOAP::WSDL::SOAP::Typelib::Fault11')) {
|
||||
return $@;
|
||||
}
|
||||
else {
|
||||
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)
|
||||
@@ -400,9 +409,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use base 'SOAP::WSDL::Client';
|
||||
use Scalar::Util qw(blessed);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
sub call {
|
||||
my ($self, $method, $body, $header) = @_;
|
||||
@@ -85,9 +85,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use List::Util qw(first);
|
||||
use Class::Std::Fast::Storable;
|
||||
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 %message_of :ATTR(:name<message> :default<[]>);
|
||||
@@ -115,9 +115,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -8,7 +8,7 @@ use SOAP::WSDL::Expat::Message2Hash;
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ );
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
sub BUILD {
|
||||
my ($self, $ident, $args_of_ref) = @_;
|
||||
@@ -163,9 +163,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Deserializer::SOM;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
our @ISA;
|
||||
|
||||
eval {
|
||||
@@ -140,9 +140,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
use SOAP::WSDL::SOAP::Typelib::Fault11;
|
||||
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 %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
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -6,7 +6,7 @@ use XML::Parser::Expat;
|
||||
|
||||
# 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 {
|
||||
my ($class, $arg_ref) = @_;
|
||||
|
||||
@@ -4,7 +4,7 @@ use strict;
|
||||
use warnings;
|
||||
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 {
|
||||
my ($self, $parser) = @_;
|
||||
|
||||
@@ -9,7 +9,7 @@ use base qw(SOAP::WSDL::Expat::Base);
|
||||
|
||||
BEGIN { require Class::Std::Fast };
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
# GLOBALS
|
||||
my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF();
|
||||
@@ -330,10 +330,10 @@ the same terms as perl itself
|
||||
|
||||
=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) $
|
||||
$LastChangedRevision: 805 $
|
||||
$LastChangedDate: 2009-05-16 00:45:18 +0200 (Sa, 16. Mai 2009) $
|
||||
$LastChangedRevision: 851 $
|
||||
$LastChangedBy: kutterma $
|
||||
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||
|
||||
@@ -6,7 +6,7 @@ use XML::Parser::Expat;
|
||||
use SOAP::WSDL::Expat::MessageParser;
|
||||
use 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 {
|
||||
my $self = shift;
|
||||
@@ -69,9 +69,9 @@ the same terms as perl itself
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use Carp;
|
||||
use SOAP::WSDL::TypeLookup;
|
||||
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
|
||||
@@ -367,10 +367,10 @@ the same terms as perl itself
|
||||
|
||||
=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) $
|
||||
$LastChangedRevision: 805 $
|
||||
$LastChangedDate: 2009-05-16 00:45:18 +0200 (Sa, 16. Mai 2009) $
|
||||
$LastChangedRevision: 851 $
|
||||
$LastChangedBy: kutterma $
|
||||
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Deserializer;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
my %DESERIALIZER = (
|
||||
'1.1' => 'SOAP::WSDL::Deserializer::XSD',
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Generator;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
my %GENERATOR = (
|
||||
'XSD' => 'SOAP::WSDL::Generator::Template::XSD',
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Serializer;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
my %SERIALIZER = (
|
||||
'1.1' => 'SOAP::WSDL::Serializer::XSD',
|
||||
@@ -138,9 +138,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package SOAP::WSDL::Factory::Transport;
|
||||
use strict;
|
||||
use warnings;
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
my %registered_transport_of = ();
|
||||
|
||||
@@ -243,9 +243,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Generator::Iterator::WSDL11;
|
||||
use strict; use warnings;
|
||||
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 %nodes_of :ATTR(:name<nodes> :default<[]>);
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict; use warnings;
|
||||
|
||||
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_map_of :ATTR(:name<namespace_map> :default<{}>);
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package SOAP::WSDL::Generator::Template;
|
||||
use strict; use warnings;
|
||||
use Template;
|
||||
use Template 2.18;
|
||||
use Class::Std::Fast::Storable;
|
||||
use Carp;
|
||||
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 %definitions_of :ATTR(:name<definitions> :default<()>);
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Carp qw(confess);
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
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_map_of :ATTR(:name<namespace_map> :default<{}>);
|
||||
@@ -129,6 +129,8 @@ sub create_subpackage_name {
|
||||
my $type = ref $arg_ref eq 'HASH' ? $arg_ref->{ value } : $arg_ref;
|
||||
|
||||
my @name_from = $type->get_name() || (); ;
|
||||
|
||||
# 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') ) {
|
||||
@@ -141,9 +143,13 @@ sub create_subpackage_name {
|
||||
}
|
||||
}
|
||||
# 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 $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;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
use File::Basename;
|
||||
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::Template::Plugin::XSD;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
[% USE XSD -%]
|
||||
[% USE XSD;
|
||||
USE Dumper -%]
|
||||
package [% XSD.create_xsd_name(complexType) %];
|
||||
use strict;
|
||||
use warnings;
|
||||
@@ -12,6 +13,8 @@ __PACKAGE__->_set_element_form_qualified([%-
|
||||
IF complexType.schema.get_elementFormDefault == 'qualified'
|
||||
-%]1[% ELSE %]0[% END %]);
|
||||
|
||||
sub get_xmlns { '[% complexType.get_targetNamespace %]' };
|
||||
|
||||
[% INCLUDE complexType/contentModel.tt %]
|
||||
|
||||
1;
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict;
|
||||
use warnings;
|
||||
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 %type_prefix_of :ATTR(:name<type_prefix> :default<()>);
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
|
||||
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 %typemap_of :ATTR(:name<typemap> :default<()>);
|
||||
|
||||
@@ -32,15 +32,28 @@ this backend:
|
||||
|
||||
=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
|
||||
by NTLM authentication. More specifically, you need the Authen::NTLM module
|
||||
from this distribution. Note that this is different from the Authen::NTML
|
||||
distribution by Yee Man Chan also available from CPAN.
|
||||
|
||||
Your user credentials usually need to include the windows domain like this:
|
||||
Your user credentials usually need to include the windows domain or the
|
||||
windows hostname like this:
|
||||
|
||||
testdomain\testuser
|
||||
|
||||
or
|
||||
|
||||
\\testhost\testuser
|
||||
|
||||
Besides passing user credentials as when accessing a web service protected
|
||||
by basic or digest authentication, you also need to enforce connection
|
||||
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
|
||||
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
|
||||
|
||||
You need Crypt::SSLeay installed to access HTTPS webservices.
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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<[]>);
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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 %header_of :ATTR(:name<header> :default<[]>);
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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 %input_of :ATTR(:name<input> :default<[]>);
|
||||
|
||||
@@ -6,7 +6,7 @@ use Class::Std::Fast::Storable;
|
||||
|
||||
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 %type_of :ATTR(:name<type> :default<()>);
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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 %address_of :ATTR(:name<address> :default<()>);
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
use List::Util;
|
||||
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<()>);
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
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<()>);
|
||||
1;
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
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 %namespace_of :ATTR(:name<namespace> :default<q{}>);
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
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 %namespace_of :ATTR(:name<namespace> :default<q{}>);
|
||||
|
||||
@@ -3,6 +3,6 @@ use strict;
|
||||
use warnings;
|
||||
use base qw(SOAP::WSDL::Header);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
1;
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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 %soapAction_of :ATTR(:name<soapAction> :default<()>);
|
||||
|
||||
8
lib/SOAP/WSDL/SOAP/Typelib/Fault.pm
Normal file
8
lib/SOAP/WSDL/SOAP/Typelib/Fault.pm
Normal 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;
|
||||
@@ -1,14 +1,18 @@
|
||||
package SOAP::WSDL::SOAP::Typelib::Fault11;
|
||||
{
|
||||
use strict;
|
||||
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 Scalar::Util qw(blessed);
|
||||
|
||||
use SOAP::WSDL::XSD::Typelib::ComplexType;
|
||||
use SOAP::WSDL::XSD::Typelib::Element;
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::SOAP::Typelib::Fault
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
@@ -30,11 +34,10 @@ __PACKAGE__->_factory(
|
||||
faultcode => 'SOAP::WSDL::XSD::Typelib::Builtin::QName',
|
||||
faultstring => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
faultactor => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||
detail => 'SOAP::WSDL::XSD::Typelib::Builtin::anyType',
|
||||
}
|
||||
);
|
||||
detail => 'SOAP::WSDL::SOAP::Typelib::Fault11Detail',
|
||||
} );
|
||||
|
||||
sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' };
|
||||
sub get_xmlns { return 'http://schemas.xmlsoap.org/soap/envelope/' }
|
||||
|
||||
__PACKAGE__->__set_name('Fault');
|
||||
__PACKAGE__->__set_nillable(0);
|
||||
@@ -43,9 +46,57 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref('');
|
||||
|
||||
# always return false in boolean context - a fault is never true...
|
||||
sub as_bool : BOOLIFY { return; }
|
||||
sub as_bool : BOOLIFY {
|
||||
return;
|
||||
}
|
||||
|
||||
# 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.
|
||||
|
||||
# BLOCK to scope warnings
|
||||
{
|
||||
no warnings qw(redefine);
|
||||
my $set_detail_sub = \&set_detail;
|
||||
*set_detail = sub {
|
||||
my ( $self, $detail ) = @_;
|
||||
|
||||
# create SOAP::WSDL::SOAP::Typelib::Fault11Detail wrapper if there
|
||||
# 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();
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
@@ -88,6 +139,16 @@ Getter/setter for object's faultactor 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
|
||||
|
||||
Copyright 2007 Martin Kutter. All rights reserved.
|
||||
@@ -101,9 +162,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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;
|
||||
|
||||
@@ -132,9 +132,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -6,7 +6,7 @@ use Scalar::Util qw(blessed);
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
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 %action_map_ref_of :ATTR(:name<action_map_ref> :default<{}>);
|
||||
|
||||
@@ -14,7 +14,7 @@ use Class::Std::Fast::Storable;
|
||||
|
||||
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
|
||||
# server directly - we would have to swap out it's base class...
|
||||
|
||||
@@ -16,7 +16,7 @@ use Apache2::Const -compile => qw(
|
||||
HTTP_LENGTH_REQUIRED
|
||||
);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
my %LOADED_OF = ();
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ use Class::Std::Fast::Storable;
|
||||
|
||||
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
|
||||
# server directly - we would have to swap out it's base class...
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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<[]>);
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Transport::HTTP;
|
||||
use strict; use warnings;
|
||||
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
|
||||
SUBFACTORY: {
|
||||
@@ -95,9 +95,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'basic';
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
# register on loading
|
||||
SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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( https => __PACKAGE__ );
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::TypeLookup;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
my %TYPE_FROM = (
|
||||
# wsdl:
|
||||
|
||||
@@ -5,7 +5,7 @@ use SOAP::WSDL::XSD::Schema::Builtin;
|
||||
use Class::Std::Fast::Storable;
|
||||
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<[]>);
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<enumeration value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<attribute
|
||||
# default = string
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<attributeGroup
|
||||
# id = ID
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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
|
||||
# generative approach, too
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
use Scalar::Util qw(blessed);
|
||||
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
|
||||
# name provided by Base
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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
|
||||
# name provided by Base
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<enumeration value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
#<pattern value="">
|
||||
|
||||
# id provided by Base
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
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:sequence>
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<minExclusive value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<minExclusive value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<minExclusive value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<maxLength value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<minExclusive value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<minExclusive value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<minExclusive value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<pattern value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
# child elements
|
||||
my %attributeGroup_of :ATTR(:name<attributeGroup> :default<[]>);
|
||||
|
||||
@@ -6,7 +6,7 @@ use SOAP::WSDL::XSD::Schema;
|
||||
use SOAP::WSDL::XSD::Builtin;
|
||||
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...
|
||||
my %BUILTINS = (
|
||||
@@ -103,9 +103,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
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 %minLength_of :ATTR(:name<minLength> :default<[]>);
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<totalDigits value="">
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
|
||||
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 {
|
||||
# my ($self, $opt, $value) = @_;
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict;
|
||||
use warnings;
|
||||
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 {
|
||||
# we work on @_ for performance.
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict;
|
||||
use warnings;
|
||||
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::anySimpleType;
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict;
|
||||
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');
|
||||
|
||||
sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' };
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict;
|
||||
use warnings;
|
||||
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);
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ use Date::Format;
|
||||
use Class::Std::Fast::Storable constructor => 'none', cache => 1;
|
||||
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 {
|
||||
# use set_value from base class if we have a XML-Time format
|
||||
|
||||
@@ -10,7 +10,7 @@ require Class::Std::Fast::Storable;
|
||||
|
||||
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
|
||||
our $AS_HASH_REF_WITHOUT_ATTRIBUTES = 0;
|
||||
@@ -25,6 +25,9 @@ my %NAMES_OF; # XML names of elements in a class
|
||||
# XML Attribute handling
|
||||
my %xml_attr_of :ATTR();
|
||||
|
||||
# Namespace handling
|
||||
my %xmlns_of :ATTR();
|
||||
|
||||
# don't you ever dare to use this !
|
||||
our $___attributes_of_ref = \%ATTRIBUTES_OF;
|
||||
our $___xml_attribute_of_ref = \%xml_attr_of;
|
||||
@@ -319,6 +322,7 @@ sub _factory {
|
||||
*{ "$class\::_serialize" } = sub {
|
||||
my $ident = ${ $_[0] };
|
||||
my $option_ref = $_[1];
|
||||
|
||||
# return concatenated return value of serialize call of all
|
||||
# elements retrieved from get_elements expanding list refs.
|
||||
return \join q{} , map {
|
||||
@@ -327,7 +331,7 @@ sub _factory {
|
||||
# do we have some content
|
||||
if (defined $element) {
|
||||
$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
|
||||
my $name = $NAMES_OF{$class}->{$_} || $_;
|
||||
my $target_namespace = $_[0]->get_xmlns();
|
||||
@@ -345,19 +349,45 @@ sub _factory {
|
||||
# serialize complextype elments (of other types) with their
|
||||
# serializer, but add element tags around.
|
||||
else {
|
||||
# TODO: check whether we have to handle
|
||||
# types from different namespaces special, too
|
||||
# default for undef is true
|
||||
if (! defined $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 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 {
|
||||
# remove xmlns option if there is one
|
||||
my $set_xmlns = delete $option_ref->{xmlns}
|
||||
if (exists $option_ref->{xmlns});
|
||||
join q{}, $_->start_tag({ name => $name , %{ $option_ref } })
|
||||
, $_->serialize($option_ref)
|
||||
, $_->end_tag({ name => $name , %{ $option_ref } });
|
||||
}
|
||||
}
|
||||
else {
|
||||
# in elementFormDefault="unqualified" mode,
|
||||
# the serialize method has to set
|
||||
# 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
|
||||
# did not do that
|
||||
join q{}, $_->start_tag({
|
||||
@@ -401,9 +431,13 @@ sub __serialize_complex {
|
||||
# we work on @_ for performance.
|
||||
$_[1] ||= {}; # $option_ref
|
||||
|
||||
push @{ $_[1]->{ xmlns_stack } }, $_[0]->get_xmlns();
|
||||
|
||||
# get content first (pass by reference to avoid copying)
|
||||
my $content_ref = $_[0]->_serialize($_[1]); # option_ref
|
||||
|
||||
pop @{ $_[1]->{ xmlns_stack } };
|
||||
|
||||
# do we have a empty element ?
|
||||
return $_[0]->start_tag({ %{ $_[1] }, empty => 1 })
|
||||
if not length ${ $content_ref };
|
||||
@@ -411,6 +445,10 @@ sub __serialize_complex {
|
||||
return join q{}, $_[0]->start_tag($_[1]), ${ $content_ref }, $_[0]->end_tag();
|
||||
}
|
||||
|
||||
sub get_xmlns {
|
||||
return q{}
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
@@ -633,9 +671,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::XSD::Typelib::Element;
|
||||
use strict; 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');
|
||||
|
||||
my %NAME;
|
||||
my %NILLABLE;
|
||||
@@ -177,9 +177,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -2,14 +2,14 @@ package SOAP::WSDL::XSD::Typelib::SimpleType;
|
||||
use strict; use warnings;
|
||||
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;
|
||||
use strict;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||
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;
|
||||
__END__
|
||||
@@ -132,9 +132,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 805 $
|
||||
$Rev: 851 $
|
||||
$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 $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -4,7 +4,7 @@ use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
use version; our $VERSION = qv('2.00.09');
|
||||
use version; our $VERSION = qv('2.00.10');
|
||||
|
||||
#<pattern value="">
|
||||
|
||||
|
||||
0
t/CodeFirst/ComplexType.pm
Normal file → Executable file
0
t/CodeFirst/ComplexType.pm
Normal file → Executable file
0
t/CodeFirst/element.pm
Normal file → Executable file
0
t/CodeFirst/element.pm
Normal file → Executable file
0
t/CodeFirst/sequence.pm
Normal file → Executable file
0
t/CodeFirst/sequence.pm
Normal file → Executable file
77
t/CodeFirst/test.pl
Normal file → Executable file
77
t/CodeFirst/test.pl
Normal file → Executable file
@@ -5,26 +5,85 @@ use lib '../lib';
|
||||
use base q{CodeFirst};
|
||||
|
||||
sub test :WebMethod(
|
||||
action => "test",
|
||||
returns => "bar",
|
||||
header => "bam",
|
||||
body => "baz"
|
||||
name => "sayHello",
|
||||
action => "uri:helloWorld/sayHello",
|
||||
request_body => "CodeFirst::HelloRequest",
|
||||
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(
|
||||
action => "test2",
|
||||
returns => "bar",
|
||||
header => "bam",
|
||||
body => "baz"
|
||||
request_header => "bar",
|
||||
reqest_body => "bam",
|
||||
response_header => "bam",
|
||||
response_body => "baz"
|
||||
) {
|
||||
}
|
||||
|
||||
=cut
|
||||
|
||||
package main;
|
||||
use Data::Dumper;
|
||||
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,6 +1,21 @@
|
||||
package FaultDeserializer;
|
||||
use strict;
|
||||
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);
|
||||
|
||||
{
|
||||
@@ -12,55 +27,70 @@ use_ok qw(SOAP::WSDL::Client);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
sub test_client_basics {
|
||||
ok my $client = SOAP::WSDL::Client->new();
|
||||
|
||||
ok $client = SOAP::WSDL::Client->new({
|
||||
proxy => 'http://localhost',
|
||||
});
|
||||
|
||||
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',
|
||||
);
|
||||
$client->set_proxy( 'http://localhost', foo => 'bar', );
|
||||
|
||||
#TODO is this behaviour still required? declare as deprecated and remove...
|
||||
$client->set_proxy(
|
||||
[ 'http://localhost',
|
||||
foo => 'bar',
|
||||
]
|
||||
);
|
||||
$client->set_proxy( ['http://localhost', foo => 'bar',] );
|
||||
|
||||
|
||||
is $client->get_proxy(), $client->get_transport(), 'get_proxy returns same as get_transport';
|
||||
is $client->get_proxy(), $client->get_transport(),
|
||||
'get_proxy returns same as get_transport';
|
||||
|
||||
ok $client->set_soap_version('1.1');
|
||||
is $client->get_soap_version(), '1.1';
|
||||
|
||||
$client->set_deserializer_args( {strict => 0} );
|
||||
is $client->get_deserializer_args()->{strict}, 0;
|
||||
}
|
||||
|
||||
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'});
|
||||
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');
|
||||
$serialize = $client->call( {operation => 'testMethod'}, foo => 'bar' );
|
||||
is $serialize->{body}->{foo}, 'bar';
|
||||
|
||||
# Old calling style compatibility test - foo => bar is body...
|
||||
$serialize = $client->call( 'testMethod', foo => 'bar' );
|
||||
is $serialize->{body}->{foo}, 'bar';
|
||||
}
|
||||
|
||||
sub serialize {
|
||||
my $self = shift;
|
||||
return shift;
|
||||
}
|
||||
|
||||
$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();
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use Test::More tests => 14;
|
||||
use Test::More tests => 15;
|
||||
use File::Basename qw(dirname);
|
||||
use File::Spec;
|
||||
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(MyTypes::testComplexTypeRestriction);
|
||||
use_ok qw(MyTypes::testComplexTypeAll);
|
||||
# type with dot in name including atomic type
|
||||
use_ok qw(MyTypes::test::ComplexTypeElementAtomicSimpleType);
|
||||
SKIP: {
|
||||
eval { require Test::Pod::Content; }
|
||||
or skip 'Cannot test pod content without Test::Pod::Content', 6;
|
||||
|
||||
@@ -73,6 +73,7 @@ __PACKAGE__->_factory(
|
||||
);
|
||||
|
||||
package MyElementSimpleContent;
|
||||
{
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
@@ -82,7 +83,8 @@ use base qw(
|
||||
__PACKAGE__->__set_name( 'MyElementSimpleContent' );
|
||||
|
||||
sub __get_attr_class { 'MyElement::_ATTR' };
|
||||
|
||||
sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' }
|
||||
}
|
||||
package main;
|
||||
use Test::More tests => 127;
|
||||
use Storable;
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeChoice">
|
||||
<xsd:complexType name="test.ComplexTypeChoice">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>ComplexType Test</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
@@ -179,14 +179,14 @@
|
||||
|
||||
<xsd:element name="Header" 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:element name="testString" type="xsd:string"
|
||||
minOccurs="0" />
|
||||
<xsd:element name="testAtomicSimpleTypeElement"
|
||||
<xsd:element name="test.AtomicSimpleTypeElement"
|
||||
minOccurs="0">
|
||||
<xsd:simpleType>
|
||||
<xsd:restriction base="xsd:decimal">
|
||||
@@ -209,7 +209,7 @@
|
||||
</xsd:schema>
|
||||
</types>
|
||||
<message name="testChoice">
|
||||
<part name="parameters" element="tns:testChoice" />
|
||||
<part name="parameters" element="tns:test.Choice" />
|
||||
</message>
|
||||
<message name="testRequest">
|
||||
<part name="testAll" element="tns:testElementString" />
|
||||
@@ -219,7 +219,7 @@
|
||||
</message>
|
||||
<message name="testMultiPartWarning">
|
||||
<part name="testAll" element="tns:testElementString" />
|
||||
<part name="parameters" element="tns:testChoice" />
|
||||
<part name="parameters" element="tns:test.Choice" />
|
||||
</message>
|
||||
<message name="testHeaderRequest">
|
||||
<part name="testBody" element="tns:testHeader" />
|
||||
|
||||
270
t/lib/CodeFirst.pm
Normal file → Executable file
270
t/lib/CodeFirst.pm
Normal file → Executable file
@@ -1,63 +1,251 @@
|
||||
package CodeFirst;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Moose;
|
||||
use Carp;
|
||||
use Class::Std::Fast::Storable;
|
||||
use Scalar::Util qw(blessed);
|
||||
use XML::LibXML;
|
||||
|
||||
use parent qw(Attribute::Handlers);
|
||||
|
||||
our $VERSION = 0.1;
|
||||
|
||||
$Carp::Internal{attributes}++;
|
||||
|
||||
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>);
|
||||
my %transport_of : ATTR(:name<transport> :default<()>);
|
||||
my %dispatch_to : ATTR(:name<dispatch_to> :default<()>);
|
||||
has 'schema' => is => 'rw';
|
||||
|
||||
sub START {
|
||||
my ( $self, $ident, $arg_ref ) = @_;
|
||||
my $class = ref $self;
|
||||
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
|
||||
} );
|
||||
}
|
||||
has 'typeMap' => is => 'rw',
|
||||
isa => 'CodeFirst::Types',
|
||||
default => sub { CodeFirst::Types->new() };
|
||||
|
||||
sub handle {
|
||||
$transport_of{${$_[0]}}->handle( @_[1 .. $#_] );
|
||||
}
|
||||
sub WebMethod : ATTR {
|
||||
my (
|
||||
$class, $symbol, $referent, $attr,
|
||||
$data, $phase, $filename, $linenum
|
||||
) = @_;
|
||||
|
||||
sub _action_map {
|
||||
my $class = ref $_[0];
|
||||
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;
|
||||
my %parameter_of;
|
||||
eval { %parameter_of = @{$data} };
|
||||
if ($@) {
|
||||
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,
|
||||
@attribute_from );
|
||||
$SCHEMA_DATA_OF{$class}->{$parameter_of{request_header}} = undef
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user