Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
874251225f | ||
|
|
2bad767211 |
2
Build.PL
2
Build.PL
@@ -5,7 +5,7 @@ $build = Module::Build->new(
|
||||
create_makefile_pl => 'passthrough',
|
||||
dist_abstract => 'SOAP with WSDL support',
|
||||
dist_name => 'SOAP-WSDL',
|
||||
dist_version => '2.00_28',
|
||||
dist_version => '2.00_29',
|
||||
module_name => 'SOAP::WSDL',
|
||||
license => 'artistic',
|
||||
requires => {
|
||||
|
||||
19
Changes
19
Changes
@@ -1,4 +1,4 @@
|
||||
Release notes for SOAP::WSDL 2.00_28
|
||||
Release notes for SOAP::WSDL 2.00_29
|
||||
-------
|
||||
|
||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
||||
@@ -34,6 +34,23 @@ Features:
|
||||
|
||||
The following changes have been made:
|
||||
|
||||
2.00_29
|
||||
|
||||
The following bugs have been fixed (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||
|
||||
* #32188: minor bug found and fixed in WSDL generation
|
||||
* [ 1871175 ] Can't delete attributes from ComplexType objects
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Updated SOAP::WSDL::Manual::XSD
|
||||
* Removed pod directives from templates to avoid confusing CPAN's pod
|
||||
viewer
|
||||
* Initial (incomplete) XML attribute support
|
||||
* Updated test suite
|
||||
|
||||
2.00_28
|
||||
|
||||
The following bugs have been fixed (the numbers in square brackets are the
|
||||
|
||||
15
MANIFEST
15
MANIFEST
@@ -97,6 +97,7 @@ lib/SOAP/WSDL/Generator/Template/XSD/_type_class.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/all.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/atomicTypes.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/attributeSet.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/complexContent.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/contentModel.tt
|
||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/extension.tt
|
||||
@@ -164,12 +165,15 @@ lib/SOAP/WSDL/Transport/Loopback.pm
|
||||
lib/SOAP/WSDL/Transport/Test.pm
|
||||
lib/SOAP/WSDL/TypeLookup.pm
|
||||
lib/SOAP/WSDL/Types.pm
|
||||
lib/SOAP/WSDL/XSD/Attribute.pm
|
||||
lib/SOAP/WSDL/XSD/Builtin.pm
|
||||
lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||
lib/SOAP/WSDL/XSD/Element.pm
|
||||
lib/SOAP/WSDL/XSD/Schema.pm
|
||||
lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
||||
lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||
@@ -225,6 +229,7 @@ Makefile.PL
|
||||
MANIFEST This list of files
|
||||
META.yml
|
||||
MIGRATING
|
||||
patches/Manual.diff
|
||||
README
|
||||
t/001_use.t
|
||||
t/002_parse_wsdl.t
|
||||
@@ -240,6 +245,7 @@ t/013_complexType.t
|
||||
t/016_client_object.t
|
||||
t/017_generator.t
|
||||
t/020_storable.t
|
||||
t/095_copying.t
|
||||
t/096_characters.t
|
||||
t/097_kwalitee.t
|
||||
t/098_pod.t
|
||||
@@ -267,15 +273,17 @@ t/acceptance/wsdl/10_helloworld.asmx.xml
|
||||
t/acceptance/wsdl/11_helloworld.wsdl
|
||||
t/acceptance/wsdl/contributed/Axis.wsdl
|
||||
t/acceptance/wsdl/contributed/ETest.wsdl
|
||||
t/acceptance/wsdl/contributed/gasquery.wsdl
|
||||
t/acceptance/wsdl/contributed/OITest.wsdl
|
||||
t/acceptance/wsdl/contributed/tools.wsdl
|
||||
t/acceptance/wsdl/elementAtomicComplexType.xml
|
||||
t/acceptance/wsdl/email_account.wsdl
|
||||
t/acceptance/wsdl/generator_test.wsdl
|
||||
t/acceptance/wsdl/generator_test_dot_names.wsdl
|
||||
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
||||
t/acceptance/wsdl/message_gateway.wsdl
|
||||
t/acceptance/wsdl/WSDLParser.wsdl
|
||||
t/contributed.wsdl
|
||||
t/Expat/01_expat.t
|
||||
t/Expat/03_wsdl.t
|
||||
t/lib/MyComplexType.pm
|
||||
t/lib/MyElement.pm
|
||||
@@ -303,11 +311,14 @@ t/SOAP/WSDL/05_simpleType-union.t
|
||||
t/SOAP/WSDL/06_keep_alive.t
|
||||
t/SOAP/WSDL/11_helloworld.NET.t
|
||||
t/SOAP/WSDL/12_binding.t
|
||||
t/SOAP/WSDL/Client.t
|
||||
t/SOAP/WSDL/Client/Base.t
|
||||
t/SOAP/WSDL/Deserializer/Hash.t
|
||||
t/SOAP/WSDL/Deserializer/SOM.t
|
||||
t/SOAP/WSDL/Deserializer/XSD.t
|
||||
t/SOAP/WSDL/Expat/Base.t
|
||||
t/SOAP/WSDL/Expat/MessageParser.t
|
||||
t/SOAP/WSDL/Expat/WSDLParser.t
|
||||
t/SOAP/WSDL/Factory/Deserializer.t
|
||||
t/SOAP/WSDL/Factory/Serializer.t
|
||||
t/SOAP/WSDL/Factory/Transport.t
|
||||
@@ -316,6 +327,7 @@ t/SOAP/WSDL/Generator/Visitor.t
|
||||
t/SOAP/WSDL/Generator/Visitor/Typemap.t
|
||||
t/SOAP/WSDL/Generator/XCS.t
|
||||
t/SOAP/WSDL/Generator/XSD.t
|
||||
t/SOAP/WSDL/Generator/XSD_dot_names.t
|
||||
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
||||
t/SOAP/WSDL/Part.t
|
||||
t/SOAP/WSDL/Serializer/XSD.t
|
||||
@@ -329,6 +341,7 @@ t/SOAP/WSDL/Typelib/Fault11.t
|
||||
t/SOAP/WSDL/XSD/ComplexType.t
|
||||
t/SOAP/WSDL/XSD/Element.t
|
||||
t/SOAP/WSDL/XSD/SimpleType.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Attribute.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
||||
|
||||
15
META.yml
15
META.yml
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: SOAP-WSDL
|
||||
version: 2.00_28
|
||||
version: 2.00_29
|
||||
author:
|
||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||
abstract: SOAP with WSDL support
|
||||
@@ -139,8 +139,12 @@ provides:
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::TypeLookup:
|
||||
file: lib/SOAP/WSDL/TypeLookup.pm
|
||||
version: 2.00_29
|
||||
SOAP::WSDL::Types:
|
||||
file: lib/SOAP/WSDL/Types.pm
|
||||
SOAP::WSDL::XSD::Attribute:
|
||||
file: lib/SOAP/WSDL/XSD/Attribute.pm
|
||||
version: 2.00_29
|
||||
SOAP::WSDL::XSD::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
||||
SOAP::WSDL::XSD::ComplexType:
|
||||
@@ -157,6 +161,10 @@ provides:
|
||||
SOAP::WSDL::XSD::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::XSD::Typelib::Attribute:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||
version: 2.00_25
|
||||
@@ -184,6 +192,7 @@ 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_29
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
||||
@@ -256,10 +265,10 @@ 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_27
|
||||
version: 2.00_29
|
||||
SOAP::WSDL::XSD::Typelib::Element:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||
version: 2.00_27
|
||||
version: 2.00_29
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||
|
||||
@@ -4,34 +4,10 @@ use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||
use strict;
|
||||
|
||||
package MyData;
|
||||
my $XML;
|
||||
sub xml {
|
||||
return $XML if ($XML);
|
||||
|
||||
open my $fh, 'person.xml' or die 'cannot open data file';
|
||||
$XML = join '', <$fh>;
|
||||
close $fh;
|
||||
return $XML;
|
||||
}
|
||||
|
||||
package MyTransport;
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );
|
||||
sub send_receive {
|
||||
return MyData::xml();
|
||||
}
|
||||
sub new { return bless {}, 'MyTransport' };
|
||||
|
||||
package main;
|
||||
|
||||
use Benchmark qw(cmpthese);
|
||||
|
||||
# Do this BEFORE the client SOAP handlers are compiled!
|
||||
use XML::Compile::Transport::SOAPHTTP();
|
||||
use XML::Compile::SOAP::Tester ();
|
||||
use XML::Compile::Util;#use Data::Dumper;
|
||||
#print Dumper $result;
|
||||
use XML::Compile::Util;
|
||||
use XML::Compile::WSDL11;
|
||||
use XML::Simple;
|
||||
|
||||
@@ -43,14 +19,9 @@ use SOAP::Lite;
|
||||
|
||||
use MyInterfaces::TestService::TestPort;
|
||||
|
||||
my $tester = XML::Compile::SOAP::Tester->new();
|
||||
my $action = pack_type 'http://example.org', 'ListPerson';
|
||||
my $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl');
|
||||
|
||||
$tester->actionCallback($action, \&MyData::xml);
|
||||
|
||||
my $call = $compile->compileClient('ListPerson');
|
||||
my $result = $call->({ in => undef});
|
||||
$call->({ in => undef});
|
||||
|
||||
# Initialize SOAP::Lite
|
||||
my $deserializer = SOAP::Deserializer->new();
|
||||
@@ -60,17 +31,16 @@ my $soap = MyInterfaces::TestService::TestPort->new();
|
||||
# Load all classes - XML::Compile has created everything before, too
|
||||
$soap->ListPerson({});
|
||||
|
||||
my $lite = SOAP::Lite->new()->default_ns('http://www.example.org/benchmark/')
|
||||
->proxy('http://localhost:81/soap-wsdl-test/person.pl');
|
||||
$lite->on_action( sub { 'http://www.example.org/benchmark/ListPerson' } );
|
||||
|
||||
# # register for SOAP 1.1
|
||||
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
|
||||
|
||||
my $wsdl_xs = MyInterfaces::TestService::TestPort->new();
|
||||
|
||||
# trigger loading of XML Data
|
||||
{
|
||||
use bytes;
|
||||
print "XML length (bytes): " . length( MyData::xml() ), "\n";
|
||||
}
|
||||
|
||||
my $count = 100;
|
||||
my @data = ();
|
||||
my $n = 0;
|
||||
print "Benchmark conducted with
|
||||
@@ -78,37 +48,39 @@ SOAP::Lite - $SOAP::Lite::VERSION
|
||||
SOAP::WSDL - $SOAP::WSDL::Client::VERSION
|
||||
SOAP::WSDL_XS - $SOAP::WSDL::Deserializer::XSD_XS::VERSION;
|
||||
XML::Compile::SOAP - $XML::Compile::SOAP::VERSION
|
||||
XML::Simple - $XML::Simple::VERSION
|
||||
|
||||
Benchmark $n: Store result in private variable and destroy it
|
||||
";
|
||||
$n++;
|
||||
cmpthese 300, {
|
||||
'XML::Simple' => sub { my $result = XMLin( MyData::xml() )},
|
||||
cmpthese $count, {
|
||||
# 'XML::Simple' => sub { my $result = XMLin( MyData::xml() )},
|
||||
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
|
||||
'XML::Compile::SOAP' => sub { my $result = $call->() },
|
||||
'SOAP::WSDL_XS' => sub { my $result = @data, $wsdl_xs->ListPerson({}) },
|
||||
'SOAP::Lite' => sub { my $result = $deserializer->deserialize( MyData::xml() )}
|
||||
'XML::Compile' => sub { my $result = $call->() },
|
||||
'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) },
|
||||
# 'SOAP::Lite' => sub { my $result = $deserializer->deserialize( MyData::xml() )},
|
||||
'SOAP::Lite' => sub { my $som = $lite->call('ListPerson') },
|
||||
};
|
||||
|
||||
print "Benchmark $n: Push result on list\n";
|
||||
print "\nBenchmark $n: Push result on list\n";
|
||||
$n++;
|
||||
cmpthese 500, {
|
||||
'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||
cmpthese $count, {
|
||||
# 'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||
'XML::Compile::SOAP' => sub { push @data, $call->() },
|
||||
'XML::Compile' => sub { push @data, $call->() },
|
||||
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||
# 'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||
};
|
||||
|
||||
@data = ();
|
||||
print "Benchmark $n: Play it again, Sam\n";
|
||||
print "\nBenchmark $n: Play it again, Sam\n";
|
||||
|
||||
cmpthese 500, {
|
||||
'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||
cmpthese $count, {
|
||||
# 'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||
'XML::Compile::SOAP' => sub { push @data, $call->() },
|
||||
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||
'XML::Compile' => sub { push @data, $call->() },
|
||||
# 'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||
};
|
||||
|
||||
|
||||
@@ -46,388 +46,388 @@
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>2</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation2</Salutation>
|
||||
<Name>Name2</Name>
|
||||
<GivenName>Martin2</GivenName>
|
||||
<DateOfBirth>1970-01-02</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 2</Street>
|
||||
<ZIP>00002</ZIP>
|
||||
<City>City2</City>
|
||||
<Country>Country2</Country>
|
||||
<PhoneNumber>++4900000002</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000002</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 2</Street>
|
||||
<ZIP>222222</ZIP>
|
||||
<City>SomeCity2</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4920000002</PhoneNumber>
|
||||
<MobilePhoneNumber>++4920000002</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>100021</ContractID>
|
||||
<ContractName>SomeContract21</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100022</ContractID>
|
||||
<ContractName>SomeContract22</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>1000023</ContractID>
|
||||
<ContractName>SomeContract23</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>3</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation3</Salutation>
|
||||
<Name>Name3</Name>
|
||||
<GivenName>Martin3</GivenName>
|
||||
<DateOfBirth>1970-01-03</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 3</Street>
|
||||
<ZIP>00003</ZIP>
|
||||
<City>City3</City>
|
||||
<Country>Country3</Country>
|
||||
<PhoneNumber>++4900000003</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000003</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 3</Street>
|
||||
<ZIP>333333</ZIP>
|
||||
<City>SomeCity3</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4930000003</PhoneNumber>
|
||||
<MobilePhoneNumber>++4930000003</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100031</ContractID>
|
||||
<ContractName>SomeContract31</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100033</ContractID>
|
||||
<ContractName>SomeContract33</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>1000033</ContractID>
|
||||
<ContractName>SomeContract33</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>4</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation4</Salutation>
|
||||
<Name>Name4</Name>
|
||||
<GivenName>Martin4</GivenName>
|
||||
<DateOfBirth>1970-01-04</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 4</Street>
|
||||
<ZIP>00004</ZIP>
|
||||
<City>City4</City>
|
||||
<Country>Country4</Country>
|
||||
<PhoneNumber>++4900000004</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000004</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 4</Street>
|
||||
<ZIP>444444</ZIP>
|
||||
<City>SomeCity4</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4940000004</PhoneNumber>
|
||||
<MobilePhoneNumber>++4940000004</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>100004</ContractID>
|
||||
<ContractName>SomeContract4</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>100041</ContractID>
|
||||
<ContractName>SomeContract41</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>100044</ContractID>
|
||||
<ContractName>SomeContract44</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>1000044</ContractID>
|
||||
<ContractName>SomeContract44</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>5</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation5</Salutation>
|
||||
<Name>Name5</Name>
|
||||
<GivenName>Martin5</GivenName>
|
||||
<DateOfBirth>1970-01-05</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 5</Street>
|
||||
<ZIP>00005</ZIP>
|
||||
<City>City5</City>
|
||||
<Country>Country5</Country>
|
||||
<PhoneNumber>++4900000005</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000005</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 5</Street>
|
||||
<ZIP>555555</ZIP>
|
||||
<City>SomeCity5</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4950000005</PhoneNumber>
|
||||
<MobilePhoneNumber>++4950000005</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>100005</ContractID>
|
||||
<ContractName>SomeContract5</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>100051</ContractID>
|
||||
<ContractName>SomeContract51</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>100055</ContractID>
|
||||
<ContractName>SomeContract55</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>1000053</ContractID>
|
||||
<ContractName>SomeContract53</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>6</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation6</Salutation>
|
||||
<Name>Name6</Name>
|
||||
<GivenName>Martin6</GivenName>
|
||||
<DateOfBirth>1970-01-06</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 6</Street>
|
||||
<ZIP>00006</ZIP>
|
||||
<City>City6</City>
|
||||
<Country>Country6</Country>
|
||||
<PhoneNumber>++4900000006</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000006</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 6</Street>
|
||||
<ZIP>666666</ZIP>
|
||||
<City>SomeCity6</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4960000006</PhoneNumber>
|
||||
<MobilePhoneNumber>++4960000006</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>100006</ContractID>
|
||||
<ContractName>SomeContract6</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>100061</ContractID>
|
||||
<ContractName>SomeContract61</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>100066</ContractID>
|
||||
<ContractName>SomeContract66</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>1000063</ContractID>
|
||||
<ContractName>SomeContract63</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>7</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation7</Salutation>
|
||||
<Name>Name7</Name>
|
||||
<GivenName>Martin7</GivenName>
|
||||
<DateOfBirth>1970-01-07</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 7</Street>
|
||||
<ZIP>00007</ZIP>
|
||||
<City>City7</City>
|
||||
<Country>Country7</Country>
|
||||
<PhoneNumber>++4900000007</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000007</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 7</Street>
|
||||
<ZIP>777777</ZIP>
|
||||
<City>SomeCity7</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4970000007</PhoneNumber>
|
||||
<MobilePhoneNumber>++4970000007</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>100007</ContractID>
|
||||
<ContractName>SomeContract7</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>100071</ContractID>
|
||||
<ContractName>SomeContract71</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>100077</ContractID>
|
||||
<ContractName>SomeContract77</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>1000073</ContractID>
|
||||
<ContractName>SomeContract73</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>8</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation8</Salutation>
|
||||
<Name>Name8</Name>
|
||||
<GivenName>Martin8</GivenName>
|
||||
<DateOfBirth>1970-01-08</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 8</Street>
|
||||
<ZIP>00008</ZIP>
|
||||
<City>City8</City>
|
||||
<Country>Country8</Country>
|
||||
<PhoneNumber>++4900000008</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000008</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 8</Street>
|
||||
<ZIP>888888</ZIP>
|
||||
<City>SomeCity8</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4980000008</PhoneNumber>
|
||||
<MobilePhoneNumber>++4980000008</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>100008</ContractID>
|
||||
<ContractName>SomeContract8</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>100081</ContractID>
|
||||
<ContractName>SomeContract81</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>100088</ContractID>
|
||||
<ContractName>SomeContract88</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>1000083</ContractID>
|
||||
<ContractName>SomeContract83</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>9</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation9</Salutation>
|
||||
<Name>Name9</Name>
|
||||
<GivenName>Martin9</GivenName>
|
||||
<DateOfBirth>1970-01-09</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 9</Street>
|
||||
<ZIP>00009</ZIP>
|
||||
<City>City9</City>
|
||||
<Country>Country9</Country>
|
||||
<PhoneNumber>++4900000009</PhoneNumber>
|
||||
<MobilePhoneNumber>++491700000009</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 9</Street>
|
||||
<ZIP>999999</ZIP>
|
||||
<City>SomeCity9</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++4990000009</PhoneNumber>
|
||||
<MobilePhoneNumber>++4990000009</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>100009</ContractID>
|
||||
<ContractName>SomeContract9</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>100091</ContractID>
|
||||
<ContractName>SomeContract91</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>100099</ContractID>
|
||||
<ContractName>SomeContract99</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>1000093</ContractID>
|
||||
<ContractName>SomeContract93</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
<NewElement>
|
||||
<PersonID>
|
||||
<ID>1</ID>
|
||||
<ID>10</ID>
|
||||
</PersonID>
|
||||
<Salutation>Salutation0</Salutation>
|
||||
<Name>Name0</Name>
|
||||
<GivenName>Martin</GivenName>
|
||||
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||
<Salutation>Salutation10</Salutation>
|
||||
<Name>Name10</Name>
|
||||
<GivenName>Martin10</GivenName>
|
||||
<DateOfBirth>1970-01-010</DateOfBirth>
|
||||
<HomeAddress>
|
||||
<Street>Street 0</Street>
|
||||
<ZIP>00000</ZIP>
|
||||
<City>City0</City>
|
||||
<Country>Country0</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<Street>Street 10</Street>
|
||||
<ZIP>000010</ZIP>
|
||||
<City>City10</City>
|
||||
<Country>Country10</Country>
|
||||
<PhoneNumber>++49000000010</PhoneNumber>
|
||||
<MobilePhoneNumber>++4917000000010</MobilePhoneNumber>
|
||||
</HomeAddress>
|
||||
<WorkAddress>
|
||||
<Street>Somestreet 23</Street>
|
||||
<ZIP>12345</ZIP>
|
||||
<City>SomeCity</City>
|
||||
<Street>Somestreet 10</Street>
|
||||
<ZIP>101010101010</ZIP>
|
||||
<City>SomeCity10</City>
|
||||
<Country>Germany</Country>
|
||||
<PhoneNumber>++499131123456</PhoneNumber>
|
||||
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||
<PhoneNumber>++491000000010</PhoneNumber>
|
||||
<MobilePhoneNumber>++491000000010</MobilePhoneNumber>
|
||||
</WorkAddress>
|
||||
<Contracts>
|
||||
<Contract>
|
||||
<ContractID>100000</ContractID>
|
||||
<ContractName>SomeContract0</ContractName>
|
||||
<ContractID>1000010</ContractID>
|
||||
<ContractName>SomeContract10</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100001</ContractID>
|
||||
<ContractName>SomeContract1</ContractName>
|
||||
<ContractID>1000101</ContractID>
|
||||
<ContractName>SomeContract101</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100002</ContractID>
|
||||
<ContractName>SomeContract2</ContractName>
|
||||
<ContractID>10001010</ContractID>
|
||||
<ContractName>SomeContract1010</ContractName>
|
||||
</Contract>
|
||||
<Contract>
|
||||
<ContractID>100003</ContractID>
|
||||
<ContractName>SomeContract3</ContractName>
|
||||
<ContractID>10000103</ContractID>
|
||||
<ContractName>SomeContract103</ContractName>
|
||||
</Contract>
|
||||
</Contracts>
|
||||
</NewElement>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#!/usr/bin/perl -w
|
||||
package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
use lib qw(../lib ../../lib);
|
||||
#use lib qw(../lib ../../lib);
|
||||
use MyElements::ListPersonResponse;
|
||||
use MyServer::TestService::TestPort;
|
||||
my $server = MyServer::TestService::TestPort->new({
|
||||
|
||||
@@ -21,3 +21,4 @@ die $result if not $result;
|
||||
# I have to lookup the output parameter from the interface's POD - or try:
|
||||
# Will die on bad method names with a list of available methods
|
||||
print $result->get_sayHelloResult(), "\n";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/perl -w
|
||||
use strict;
|
||||
#use strict;
|
||||
use warnings;
|
||||
use SOAP::Lite;
|
||||
use SOAP::Lite +trace;
|
||||
|
||||
# I have to lookup the URL from the WSDL
|
||||
my $soap = SOAP::Lite->new(
|
||||
@@ -26,3 +26,4 @@ my $som = $soap->call(
|
||||
die $som->fault->{ faultstring } if ($som->fault);
|
||||
|
||||
print $som->result, "\n";
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ sub _initialize {
|
||||
no strict qw(refs);
|
||||
$parser->setHandlers(
|
||||
Start => sub {
|
||||
# my ($parser, $element, %_attrs) = @_;
|
||||
# my ($parser, $element, %attrs) = @_;
|
||||
|
||||
$_leaf = 1; # believe we're a leaf node until we see an end
|
||||
|
||||
@@ -171,6 +171,8 @@ sub _initialize {
|
||||
$current = bless \$o, $_class;
|
||||
}
|
||||
|
||||
$current->attr({ @_[2..$#_] }) if (@_ > 2);
|
||||
|
||||
$depth++;
|
||||
return;
|
||||
},
|
||||
@@ -292,8 +294,8 @@ the same terms as perl itself
|
||||
|
||||
$Id: $
|
||||
|
||||
$LastChangedDate: 2007-12-24 11:23:52 +0100 (Mo, 24 Dez 2007) $
|
||||
$LastChangedRevision: 477 $
|
||||
$LastChangedDate: 2008-01-19 13:57:57 +0100 (Sa, 19 Jan 2008) $
|
||||
$LastChangedRevision: 497 $
|
||||
$LastChangedBy: kutterma $
|
||||
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||
|
||||
@@ -5,7 +5,7 @@ use Carp;
|
||||
use SOAP::WSDL::TypeLookup;
|
||||
use base qw(SOAP::WSDL::Expat::Base);
|
||||
|
||||
our $VERSION = q{2.00_27};
|
||||
our $VERSION = q{2.00_29};
|
||||
|
||||
sub _initialize {
|
||||
my ($self, $parser) = @_;
|
||||
@@ -65,7 +65,7 @@ sub _initialize {
|
||||
$current->init( _fixup_attrs($parser, %attrs) );
|
||||
}
|
||||
elsif ($action->{ type } eq 'METHOD') {
|
||||
my $method = $action->{ method } || $localname;
|
||||
my $method = $action->{ method };
|
||||
|
||||
no strict qw(refs);
|
||||
# call method with
|
||||
|
||||
@@ -32,14 +32,19 @@ sub START {
|
||||
[% IF NO_POD; STOP; END %]
|
||||
|
||||
__END__
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% pod = BLOCK %]=pod[% END -%]
|
||||
[% head1 = BLOCK %]=head1[% END -%]
|
||||
[% head2 = BLOCK %]=head2[% END -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
|
||||
=pod
|
||||
[% pod %]
|
||||
|
||||
=head1 NAME
|
||||
[% head1 %] NAME
|
||||
|
||||
[% interface_name %] - SOAP Interface for the [% service.get_name %] Web Service
|
||||
|
||||
=head1 SYNOPSIS
|
||||
[% head1 %] SYNOPSIS
|
||||
|
||||
use [% interface_name %];
|
||||
my $interface = [% interface_name %]->new();
|
||||
@@ -50,30 +55,30 @@ __END__
|
||||
[% END %]
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
[% head1 %] DESCRIPTION
|
||||
|
||||
SOAP Interface for the [% service.get_name %] web service
|
||||
located at [% port.first_address.get_location %].
|
||||
|
||||
=head1 SERVICE [% service.get_name %]
|
||||
[% head1 %] SERVICE [% service.get_name %]
|
||||
|
||||
[% service.get_documentation %]
|
||||
|
||||
=head2 Port [% port.get_name %]
|
||||
[% head2 %] Port [% port.get_name %]
|
||||
|
||||
[% port.get_documentation %]
|
||||
|
||||
=head1 METHODS
|
||||
[% head1 %] METHODS
|
||||
|
||||
=head2 General methods
|
||||
[% head2 %] General methods
|
||||
|
||||
=head3 new
|
||||
[% head3 %] new
|
||||
|
||||
Constructor.
|
||||
|
||||
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||
|
||||
=head2 SOAP Service methods
|
||||
[% head2 %] SOAP Service methods
|
||||
|
||||
[% INCLUDE Interface/POD/method_info.tt %]
|
||||
|
||||
@@ -82,8 +87,8 @@ All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||
%][% INCLUDE Interface/POD/Operation.tt %]
|
||||
[% END %]
|
||||
|
||||
=head1 AUTHOR
|
||||
[% head1 %] AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
||||
|
||||
=pod
|
||||
=cut
|
||||
@@ -1,4 +1,6 @@
|
||||
=head3 [% operation.get_name %]
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
[% head3 %] [% operation.get_name %]
|
||||
|
||||
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||
|
||||
@@ -45,14 +45,19 @@ sub handle {
|
||||
[% IF NO_POD; STOP; END %]
|
||||
|
||||
__END__
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% pod = BLOCK %]=pod[% END -%]
|
||||
[% head1 = BLOCK %]=head1[% END -%]
|
||||
[% head2 = BLOCK %]=head2[% END -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
|
||||
=pod
|
||||
[% pod %]
|
||||
|
||||
=head1 NAME
|
||||
[% head1 %] NAME
|
||||
|
||||
[% server_name %] - SOAP Server Class for the [% service.get_name %] Web Service
|
||||
|
||||
=head1 SYNOPSIS
|
||||
[% head1 %] SYNOPSIS
|
||||
|
||||
use [% server_name %];
|
||||
my $server = [% server_name %]->new({
|
||||
@@ -62,31 +67,31 @@ __END__
|
||||
$server->handle();
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
[% head1 %] DESCRIPTION
|
||||
|
||||
SOAP Server handler for the [% service.get_name %] web service
|
||||
located at [% port.first_address.get_location %].
|
||||
|
||||
=head1 SERVICE [% service.get_name %]
|
||||
[% head1 %] SERVICE [% service.get_name %]
|
||||
|
||||
[% service.get_documentation %]
|
||||
|
||||
=head2 Port [% port.get_name %]
|
||||
[% head2 %] Port [% port.get_name %]
|
||||
|
||||
[% port.get_documentation %]
|
||||
|
||||
=head1 METHODS
|
||||
[% head1 %] METHODS
|
||||
|
||||
=head2 General methods
|
||||
[% head2 %] General methods
|
||||
|
||||
=head3 new
|
||||
[% head3 %] new
|
||||
|
||||
Constructor.
|
||||
|
||||
The C<dispatch_to> argument is mandatory. It must be a class or object
|
||||
implementing the SOAP Service methods listed below.
|
||||
|
||||
=head2 SOAP Service methods
|
||||
[% head2 %] SOAP Service methods
|
||||
|
||||
[% INCLUDE Server/POD/method_info.tt %]
|
||||
|
||||
@@ -94,7 +99,7 @@ implementing the SOAP Service methods listed below.
|
||||
%][% INCLUDE Server/POD/Operation.tt %]
|
||||
[% END %]
|
||||
|
||||
=head1 AUTHOR
|
||||
[% head1 %] AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
=head3 [% operation.get_name %]
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
|
||||
[% head3 %] [% operation.get_name %]
|
||||
|
||||
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||
|
||||
@@ -18,13 +18,18 @@ sub get_typemap {
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
__END__
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% pod = BLOCK %]=pod[% END -%]
|
||||
[% head1 = BLOCK %]=head1[% END -%]
|
||||
|
||||
=head1 NAME
|
||||
[% pod %]
|
||||
|
||||
[% head1 %] NAME
|
||||
|
||||
[% typemap_prefix %]::[% service.get_name.replace('\.','::').replace('-', '_') %]; - typemap for ::[% service.get_name %];
|
||||
|
||||
=head1 DESCRIPTION
|
||||
[% head1 %] DESCRIPTION
|
||||
|
||||
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||
|
||||
|
||||
@@ -6,20 +6,29 @@ use warnings;
|
||||
# Don't include any perl source here - there may be sub-packages...
|
||||
#-%]
|
||||
|
||||
package [% type_prefix %]::[% complexType.get_name.replace('\.','::').replace('-','_') %]::_ATTR;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
||||
[% INCLUDE complexType/attributeSet.tt %]
|
||||
1;
|
||||
|
||||
=pod
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% pod = BLOCK %]=pod[% END -%]
|
||||
[% head1 = BLOCK %]=head1[% END -%]
|
||||
[% head2 = BLOCK %]=head2[% END -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
|
||||
=head1 NAME
|
||||
[% pod %]
|
||||
|
||||
[% head1 %] NAME
|
||||
|
||||
[% type_prefix %]::[% complexType.get_name.replace('\.','::').replace('-','_') %]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
[% head1 %] DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined complextype
|
||||
[% complexType.get_name %] from the namespace [% complexType.get_targetNamespace %].
|
||||
|
||||
=head2 PROPERTIES
|
||||
[% head2 %] PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
@@ -28,15 +37,15 @@ methods:
|
||||
[% element.get_name %]
|
||||
[% END %]
|
||||
|
||||
=head1 METHODS
|
||||
[% head1 %] METHODS
|
||||
|
||||
=head2 new
|
||||
[% head2 %] new
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
[% indent = ' '; INCLUDE complexType/POD/structure.tt %]
|
||||
|
||||
=head1 AUTHOR
|
||||
[% head1 %] AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
{ # BLOCK to scope variables
|
||||
[%
|
||||
|
||||
FOREACH element = complexType.get_attribute %]
|
||||
my %[% element.get_name %]_of :ATTR(:get<[% element.get_name %]>);
|
||||
[%- END %]
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw([% FOREACH element = complexType.get_attribute %]
|
||||
[% element.get_name -%]
|
||||
[% END %]
|
||||
) ],
|
||||
{
|
||||
[% FOREACH element = complexType.get_attribute -%]
|
||||
[% element.get_name %] => \%[% element.get_name %]_of,
|
||||
[% END -%]
|
||||
},
|
||||
{
|
||||
[% FOREACH element = complexType.get_attribute;
|
||||
IF (type = element.get_type);
|
||||
element_type = complexType.expand( type );
|
||||
IF (element_type.0 == 'http://www.w3.org/2001/XMLSchema'); -%]
|
||||
[% element.get_name %] => 'SOAP::WSDL::XSD::Typelib::Builtin::[% element_type.1 %]',
|
||||
[% ELSE -%]
|
||||
[% element.get_name %] => '[% type_prefix %]::[% element_type.1 %]',
|
||||
[% END;
|
||||
ELSE;
|
||||
IF (element.first_simpleType);
|
||||
THROW NOT_IMPLEMENTED , "Attributes with atomic simpleType definition are not implemented yet";
|
||||
atomic_types.${ element.get_name } = element.first_simpleType;
|
||||
ELSE;
|
||||
THROW NOT_IMPLEMENTED , "Neither simple nor complex atomic type - don't know what to do with it";
|
||||
END; %]
|
||||
[% element.get_name %] => '[% type_prefix %]::[% complexType.get_name %]::_[% element.get_name %]',
|
||||
[% END;
|
||||
END -%]
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
@@ -17,45 +17,65 @@ use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
[% INCLUDE _type_class.tt( type = type, node = element ) %]
|
||||
);
|
||||
|
||||
}
|
||||
[%- ELSIF (ref = element.get_ref); -%]
|
||||
# element ref="[% ref %]"
|
||||
use base qw(
|
||||
[% element_prefix %]::[% ref.split(':').1 %]
|
||||
);
|
||||
|
||||
}
|
||||
[%- ELSIF (simpleType = element.first_simpleType) %]
|
||||
# atomic simpleType: <element><simpleType
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
);
|
||||
[% INCLUDE simpleType/contentModel.tt %]
|
||||
[% INCLUDE simpleType/contentModel.tt -%]
|
||||
|
||||
}
|
||||
|
||||
[% ELSIF (complexType = element.first_complexType) %]
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
[% INCLUDE complexType/contentModel.tt;
|
||||
END %]
|
||||
[% INCLUDE complexType/contentModel.tt -%]
|
||||
|
||||
}
|
||||
|
||||
package [% element_prefix %]::[% element.get_name.replace('\.','::').replace('-','_') %]::_ATTR;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
||||
[% INCLUDE complexType/attributeSet.tt %]
|
||||
|
||||
[% ELSE %]
|
||||
|
||||
} # end of BLOCK
|
||||
|
||||
[% END %]
|
||||
|
||||
1;
|
||||
|
||||
# __END__
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% pod = BLOCK %]=pod[% END -%]
|
||||
[% head1 = BLOCK %]=head1[% END -%]
|
||||
[% head2 = BLOCK %]=head2[% END -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
|
||||
=pod
|
||||
[% pod %]
|
||||
|
||||
=head1 NAME
|
||||
[% head1 %] NAME
|
||||
|
||||
[% element_prefix %]::[% element.get_name %]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
[% head1 %] DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined element
|
||||
[% element.get_name %] from the namespace [% element.get_targetNamespace %].
|
||||
|
||||
=head1 METHODS
|
||||
[% head1 %] METHODS
|
||||
|
||||
=head2 new
|
||||
[% head2 %] new
|
||||
|
||||
my $element = [% element_prefix %]::[% element.get_name %]->new($data);
|
||||
|
||||
@@ -63,7 +83,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
[% indent = ' '; INCLUDE element/POD/structure.tt; %]
|
||||
|
||||
=head1 AUTHOR
|
||||
[% head1 %] AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
|
||||
@@ -11,11 +11,18 @@ sub get_xmlns { '[% simpleType.get_targetNamespace %]'};
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
__END__
|
||||
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||
[% pod = BLOCK %]=pod[% END -%]
|
||||
[% head1 = BLOCK %]=head1[% END -%]
|
||||
[% head2 = BLOCK %]=head2[% END -%]
|
||||
[% head3 = BLOCK %]=head3[% END -%]
|
||||
|
||||
=head1 [% type_prefix %]::[% simpleType.get_name.replace('\.','::').replace('-','_') %]
|
||||
[% pod %]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
[% head1 %] [% type_prefix %]::[% simpleType.get_name.replace('\.','::').replace('-','_') %]
|
||||
|
||||
[% head1 %] DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined simpleType
|
||||
[% simpleType.get_name %] from the namespace [% simpleType.get_targetNamespace %].
|
||||
@@ -28,17 +35,17 @@ ELSE;
|
||||
THROW NOT_IMPLEMENTED "simpleType union not implemented yet in $simpleType.get_name";
|
||||
END %]
|
||||
|
||||
=head1 METHODS
|
||||
[% head1 %] METHODS
|
||||
|
||||
=head2 new
|
||||
[% head2 %] new
|
||||
|
||||
Constructor.
|
||||
|
||||
=head2 get_value / set_value
|
||||
[% head2 %] get_value / set_value
|
||||
|
||||
Getter and setter for the simpleType's value.
|
||||
|
||||
=head1 OVERLOADING
|
||||
[% head1 %] OVERLOADING
|
||||
|
||||
Depending on the simple type's base type, the following operations are overloaded
|
||||
|
||||
@@ -48,7 +55,7 @@ Depending on the simple type's base type, the following operations are overloade
|
||||
|
||||
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||
|
||||
=head1 AUTHOR
|
||||
[% head1 %] AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
|
||||
@@ -245,7 +245,7 @@ sub visit_XSD_ComplexType {
|
||||
if ( grep { $_ eq $content_model} qw(all sequence choice) )
|
||||
{
|
||||
# visit child elements
|
||||
for (@{ $type->get_element() }) {
|
||||
for (@{ $type->get_element() || [] }) {
|
||||
$_->_accept( $self );
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -24,12 +24,12 @@ You can use SOAP::WSDL::XSD based classes just like any perl class - you may
|
||||
instantiate it, inherit from it etc.
|
||||
|
||||
You should be aware, that SOAP::WSDL::XSD based classes are inside-out
|
||||
classes using Class::Std, though - things you would expect from hash-based
|
||||
classes like using the blessed hash ref as data storage won't work.
|
||||
classes using Class::Std::Fast, though - things you would expect from
|
||||
hash-based classes like using the blessed hash ref as data storage won't work.
|
||||
|
||||
Moreover, most all SOAP::WSDL::XSD::Typelib based classes override
|
||||
Class::Std's default constructor for speed - you should not expect BUILD or
|
||||
START methods to work, unless you call them yourself (or define a new
|
||||
Class::Std::Fast's default constructor for speed - you should not expect
|
||||
BUILD or START methods to work, unless you call them yourself (or define a new
|
||||
constructor).
|
||||
|
||||
All SOAP::WSDL::XSD based complexType classes allow a hash ref matching their
|
||||
@@ -40,11 +40,15 @@ will work fine.
|
||||
All SOAP::WSDL::XSD based simpleType (and builtin) classes accept a single
|
||||
hash ref with the only key "value" and the value to be set as value.
|
||||
|
||||
=head2 Conversions
|
||||
|
||||
=head3 Array dereference
|
||||
|
||||
All SOAP::WSDL::XSD based classes overload arrayification - that is being
|
||||
accessed as a list ref - with a method returning [ $self ].
|
||||
|
||||
This means that you can safely use the results of get_ELEMENT calls on
|
||||
cmplexTypes as list refs (you'll have to check for definedness, though -
|
||||
complexTypes as list refs (you'll have to check for definedness, though -
|
||||
see L<SOAP::WSDL::XSD::Typelib::Builtin|SOAP::WSDL::XSD::Typelib::Builtin>
|
||||
for details.
|
||||
|
||||
@@ -65,6 +69,32 @@ L<HTML::Template::Compiled|HTML::Template::Compiled>, where you could say
|
||||
<%/LOOP>
|
||||
<%IF%>
|
||||
|
||||
Note that this does not work in HTML::Template::Compiled yet - the code
|
||||
generated for the template checks UNIVERSAL::isa instead of dereferencing.
|
||||
There's a ticket open in HTC to solve the issue.
|
||||
|
||||
=head3 as_hash_ref
|
||||
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType based objects have a method as_hash_ref,
|
||||
which returns the object's content as a hash reference.
|
||||
|
||||
This can be convenient for cloning:
|
||||
|
||||
my $class = ref $old;
|
||||
my $clone = $class->new( $old->as_hash_ref() );
|
||||
|
||||
To convert from one type to another, you
|
||||
can just say
|
||||
|
||||
my $new = MyTypes::NewType->new( $old->as_hash_ref() );
|
||||
|
||||
Of course this will only work if MyTypes::NewType has a superset of the old
|
||||
object class' elements.
|
||||
.
|
||||
|
||||
Future versions will restrict the data returned to the child element's data -
|
||||
you should not expect XML attributes to be returned through hash refs.
|
||||
|
||||
=head1 HOW IT WORKS
|
||||
|
||||
=head2 Base classes
|
||||
@@ -277,8 +307,34 @@ the correspondent classes.
|
||||
|
||||
=head1 ATTRIBUTES
|
||||
|
||||
XML attributes are not implemented yet. If you have a good idea on how to
|
||||
implement them, feel free to email me a proposal.
|
||||
XML attributes are not implemented yet. The documentation below sketches
|
||||
how XML attributes will be implemented in the future.
|
||||
|
||||
All XML attributes are derived from SOAP::WSDL::XSD::Typelib::Attribute.
|
||||
|
||||
The attribute set for a XML element (derived from anySimpleType or
|
||||
complexType) is implemented as a sub-package of the element derived from
|
||||
SOAP::WSDL::XSD::Typelib::AttributeSet.
|
||||
|
||||
The sub-package is named as the top package, suffixed with C<_ATTR>.
|
||||
|
||||
All XML attributes for a XML element are set- and retrievable via the method
|
||||
C<attr>. The name is chosen to allow mimicing SOAP::Lite's behaviour, which
|
||||
allows setting a SOAP::Data object's attributes via C<attr>.
|
||||
|
||||
my $attrSet = $obj->attr();
|
||||
$obj->attr({
|
||||
whitespace => 'preserve',
|
||||
nillable => 1,
|
||||
});
|
||||
|
||||
SOAP::WSDL::XSD::Typelib::AttributeSet is derived from
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType with content model C<all>. The
|
||||
individual attributes can be set and retrieved via the respective set_FOO /
|
||||
get_FOO methods.
|
||||
|
||||
The C<attr> method provides auto-vivification: An xml object's attribute set
|
||||
is instantiated when accessed.
|
||||
|
||||
=head1 CAVEATS
|
||||
|
||||
@@ -286,7 +342,7 @@ implement them, feel free to email me a proposal.
|
||||
|
||||
=item * START and BUILD are not being called
|
||||
|
||||
In contrast to "normal" Class::Std based objects, the classes of the
|
||||
In contrast to "normal" Class::Std::Fast based objects, the classes of the
|
||||
SOAP::WSDL::XSD::Typelib:: hierarchy (and all type and element classes
|
||||
generated by SOAP::WSDL) override Class::Std's constructor for performance
|
||||
reasons.
|
||||
@@ -295,10 +351,10 @@ If you inherit from such a class and place a START or BUILD method in it,
|
||||
it will not get called - at least not unless you place something like this
|
||||
at the top of you code:
|
||||
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable;
|
||||
|
||||
In this case, Class::Std::Storable will export a new() method into your class,
|
||||
which in turn calls START and BUILD.
|
||||
In this case, Class::Std::Fast::Storable will export a new() method into your
|
||||
class, which in turn calls START and BUILD.
|
||||
|
||||
The constructors of all SOAP::WSDL::XSD::Typelib:: classes don't !
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@ package SOAP::WSDL::TypeLookup;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
our $VERSION=q{2.00_29};
|
||||
|
||||
my %TYPES = (
|
||||
# wsdl:
|
||||
'http://schemas.xmlsoap.org/wsdl/' => {
|
||||
@@ -86,7 +88,8 @@ my %TYPES = (
|
||||
class => 'SOAP::WSDL::XSD::Schema',
|
||||
},
|
||||
attribute => {
|
||||
type => 'SKIP' # not implemented yet
|
||||
type => 'CLASS',
|
||||
class => 'SOAP::WSDL::XSD::Attribute' # not implemented yet
|
||||
},
|
||||
attributeGroup => {
|
||||
type => 'SKIP', # not implemented yet
|
||||
|
||||
34
lib/SOAP/WSDL/XSD/Attribute.pm
Normal file
34
lib/SOAP/WSDL/XSD/Attribute.pm
Normal file
@@ -0,0 +1,34 @@
|
||||
package SOAP::WSDL::XSD::Attribute;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
our $VERSION=q{2.00_29};
|
||||
|
||||
#<attribute
|
||||
# default = string
|
||||
# fixed = string
|
||||
# form = (qualified | unqualified)
|
||||
# id = ID
|
||||
# name = NCName
|
||||
# ref = QName
|
||||
# type = QName
|
||||
# use = (optional | prohibited | required) : optional
|
||||
# {any attributes with non-schema namespace . . .}>
|
||||
# Content: (annotation?, (simpleType?))
|
||||
#</attribute>
|
||||
|
||||
|
||||
my %default_of :ATTR(:name<default> :default<()>);
|
||||
my %fixed_of :ATTR(:name<fixed> :default<()>);
|
||||
my %form_of :ATTR(:name<form> :default<()>);
|
||||
# id provided by Base
|
||||
# name provided by Base
|
||||
my %type_of :ATTR(:name<type> :default<()>);
|
||||
my %use_of :ATTR(:name<use> :default<()>);
|
||||
|
||||
# may be defined as atomic simpleType
|
||||
my %simpleType_of :ATTR(:name<simpleType> :default<()>);
|
||||
|
||||
1;
|
||||
@@ -9,6 +9,7 @@ use base qw/SOAP::WSDL::Base/;
|
||||
our $VERSION=q{2.00_25};
|
||||
|
||||
my %annotation_of :ATTR(:name<annotation> :default<()>);
|
||||
my %attribute_of :ATTR(:name<attribute> :default<()>);
|
||||
my %element_of :ATTR(:name<element> :default<()>);
|
||||
my %flavor_of :ATTR(:name<flavor> :default<()>);
|
||||
my %base_of :ATTR(:name<base> :default<()>);
|
||||
|
||||
17
lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
Normal file
17
lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
Normal file
@@ -0,0 +1,17 @@
|
||||
package SOAP::WSDL::XSD::Typelib::Attribute;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Element);
|
||||
|
||||
sub start_tag {
|
||||
# my ($self, $opt, $value) = @_;
|
||||
return q{} if (@_ < 3);
|
||||
return qq{ $_[1]->{ name }="}
|
||||
}
|
||||
|
||||
sub end_tag {
|
||||
return q{"};
|
||||
}
|
||||
|
||||
1;
|
||||
14
lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
Normal file
14
lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
Normal file
@@ -0,0 +1,14 @@
|
||||
package SOAP::WSDL::XSD::Typelib::AttributeSet;
|
||||
use strict;
|
||||
use warnings;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
sub serialize {
|
||||
# we work on @_ for performance.
|
||||
$_[1] ||= {}; # $option_ref
|
||||
|
||||
return ${ $_[0]->_serialize({ attr => 1 }) };
|
||||
}
|
||||
|
||||
|
||||
1;
|
||||
@@ -3,14 +3,17 @@ use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
|
||||
our $VERSION = q{2.00_29};
|
||||
|
||||
sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' };
|
||||
|
||||
# use $_[1] for performance
|
||||
sub start_tag {
|
||||
return q{} if not $#_; # return if no second argument ($opt)
|
||||
if ($_[1]->{ name }) {
|
||||
return "<$_[1]->{name} />" if $_[1]->{ empty };
|
||||
return "<$_[1]->{name} >";
|
||||
return qq{ $_[1]->{name}="} if $_[1]->{ attr };
|
||||
return "<$_[1]->{name}/>" if $_[1]->{ empty };
|
||||
return "<$_[1]->{name}>";
|
||||
}
|
||||
return q{};
|
||||
}
|
||||
@@ -18,10 +21,14 @@ sub start_tag {
|
||||
# use $_[1] for performance
|
||||
sub end_tag {
|
||||
return $_[1] && defined $_[1]->{ name }
|
||||
? "</$_[1]->{name} >"
|
||||
? $_[1]->{ attr }
|
||||
? q{"}
|
||||
: "</$_[1]->{name}>"
|
||||
: q{};
|
||||
};
|
||||
|
||||
sub serialize_attr {};
|
||||
|
||||
sub serialize { q{} };
|
||||
|
||||
sub serialize_qualified :STRINGIFY {
|
||||
|
||||
@@ -9,7 +9,7 @@ require Class::Std::Fast::Storable;
|
||||
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
||||
|
||||
our $VERSION = '2.00_27';
|
||||
our $VERSION = '2.00_29';
|
||||
|
||||
my %ELEMENTS_FROM;
|
||||
my %ATTRIBUTES_OF;
|
||||
@@ -39,6 +39,26 @@ sub AUTOMETHOD {
|
||||
. "\n"
|
||||
}
|
||||
|
||||
# Attribute handling
|
||||
my %xml_attr_of :ATTR();
|
||||
|
||||
sub attr {
|
||||
my $self = shift;
|
||||
my $class = ref $self;
|
||||
die "$class has no attributes" if not defined %{ "$class\::_ATTR::"};
|
||||
if (@_) {
|
||||
# setter
|
||||
return $xml_attr_of{ $$self } = "$class\::_ATTR"->new(@_);
|
||||
}
|
||||
return $xml_attr_of{ $$self } if exists $xml_attr_of{ $$self };
|
||||
return $xml_attr_of{ $$self } = "$class\::_ATTR"->new();
|
||||
}
|
||||
|
||||
sub serialize_attr {
|
||||
return q{} if not $xml_attr_of{ ${ $_[0] } };
|
||||
$_[0]->attr()->serialize();
|
||||
}
|
||||
|
||||
sub as_hash_ref {
|
||||
my $self = shift;
|
||||
my $attributes_ref = $ATTRIBUTES_OF{ ref $self };
|
||||
@@ -128,6 +148,10 @@ sub _factory {
|
||||
# lists but don't do yet - oh my !
|
||||
|
||||
*{ "$class\::set_$name" } = sub {
|
||||
if (not $#_) {
|
||||
delete $attribute_ref->{ ${ $_[0] } };
|
||||
return;
|
||||
};
|
||||
my $is_ref = ref $_[1];
|
||||
$attribute_ref->{ ${ $_[0] } } = ($is_ref)
|
||||
? ($is_ref eq 'ARRAY')
|
||||
@@ -177,10 +201,6 @@ sub _factory {
|
||||
push @{ $attribute_ref->{ ${ $_[0]} } }, $_[1];
|
||||
return;
|
||||
};
|
||||
|
||||
# TODO: remove this alias - we don't use it, and it's pretty much
|
||||
# misleading...
|
||||
*{ "$class\::$name" } = *{ "$class\::add_$name" };
|
||||
}
|
||||
|
||||
# TODO Could be moved as normal method into base class, e.g. here.
|
||||
@@ -202,7 +222,7 @@ sub _factory {
|
||||
}
|
||||
: $_ =~ m{ \A # beginning of string
|
||||
xmlns # xmlns
|
||||
}xms
|
||||
}xms # get_elements is inlined for performance.
|
||||
? do {}
|
||||
: do { use Data::Dumper;
|
||||
croak "unknown field $_ in $class. Valid fields are:\n"
|
||||
@@ -212,23 +232,25 @@ sub _factory {
|
||||
return $self;
|
||||
};
|
||||
|
||||
|
||||
# this serialize method works fine for <all> and <sequence>
|
||||
# this _serialize method works fine for <all> and <sequence>
|
||||
# complextypes, as well as for <restriction><all> or
|
||||
# <restriction><sequence>.
|
||||
# <restriction><sequence>, and attribute sets.
|
||||
#
|
||||
# But what about choice, extension ?
|
||||
#
|
||||
# Triggers XML attribute serialization if the options hash ref contains
|
||||
# a attr element with a true value.
|
||||
*{ "$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.
|
||||
# get_elements is inlined for performance.
|
||||
return join q{} , map {
|
||||
return \join q{} , map {
|
||||
my $element = $ATTRIBUTES_OF{ $class }->{ $_ }->{ $ident };
|
||||
|
||||
# do we have some content
|
||||
if (defined $element) {
|
||||
$element = [ $element ]
|
||||
if not ref $element eq 'ARRAY';
|
||||
$element = [ $element ] if not ref $element eq 'ARRAY';
|
||||
my $name = $_;
|
||||
|
||||
map {
|
||||
@@ -240,9 +262,9 @@ sub _factory {
|
||||
# serialize complextype elments (of other types) with their
|
||||
# serializer, but add element tags around.
|
||||
else {
|
||||
join q{}, $_->start_tag({ name => $name })
|
||||
join q{}, $_->start_tag({ name => $name , %{ $option_ref } })
|
||||
, $_->serialize()
|
||||
, $_->end_tag({ name => $name });
|
||||
, $_->end_tag({ name => $name , %{ $option_ref } });
|
||||
}
|
||||
} @{ $element }
|
||||
}
|
||||
@@ -251,17 +273,20 @@ sub _factory {
|
||||
}
|
||||
} (@{ $ELEMENTS_FROM{ $class } });
|
||||
};
|
||||
}
|
||||
|
||||
*{ "$class\::serialize" } = sub {
|
||||
$_[1] ||= {}; # maybe even replace by assigning a constant var
|
||||
sub serialize {
|
||||
# we work on @_ for performance.
|
||||
$_[1] ||= {}; # $option_ref
|
||||
|
||||
# do we have a empty element ?
|
||||
return $_[0]->start_tag({ %{ $_[1] }, empty => 1 })
|
||||
if not defined $ELEMENTS_FROM{ $class } or not @{ $ELEMENTS_FROM{ $class } };
|
||||
return join q{}, $_[0]->start_tag($_[1]),
|
||||
$_[0]->_serialize(), $_[0]->end_tag();
|
||||
}
|
||||
# get content first (pass by reference to avoid copying)
|
||||
my $content_ref = $_[0]->_serialize($_[1]); # option_ref
|
||||
|
||||
# do we have a empty element ?
|
||||
return $_[0]->start_tag({ %{ $_[1] }, empty => 1 })
|
||||
if not length ${ $content_ref };
|
||||
|
||||
return join q{}, $_[0]->start_tag($_[1]), ${ $content_ref }, $_[0]->end_tag();
|
||||
}
|
||||
|
||||
1;
|
||||
@@ -281,24 +306,24 @@ To subclass, write a package like this:
|
||||
package MyComplexType;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
|
||||
# we only need the :get attribute qualifier.
|
||||
# set and init_arg are automatically created by
|
||||
# SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
my %first_attr_of :ATTR(:get<first_attr> :default<()>);
|
||||
my %second_attr_of :ATTR(:get<second_attr> :default<()>);
|
||||
my %third_attr_of :ATTR(:get<third_attr> :default<()>);
|
||||
|
||||
|
||||
# the order of elements in a complexType
|
||||
my @elements_from = qw(first_attr second_attr third_attr);
|
||||
|
||||
|
||||
# references to the private hashes
|
||||
my %attribute_of = (
|
||||
first_attr => \%first_attr_of,
|
||||
second_attr => \%second_attr_of,
|
||||
third_attr => \%third_attr_of,
|
||||
);
|
||||
|
||||
|
||||
# classes_of: Classes the child elements should be of
|
||||
my %classes_of = (
|
||||
first_attr => 'My::FirstElement',
|
||||
@@ -339,14 +364,14 @@ complain, too.
|
||||
Examples:
|
||||
|
||||
my $obj = MyClass->new({ MyName => $value });
|
||||
|
||||
|
||||
my $obj = MyClass->new({
|
||||
MyName => {
|
||||
DeepName => $value,
|
||||
},
|
||||
MySecondName => $value,
|
||||
});
|
||||
|
||||
|
||||
my $obj = MyClass->new({
|
||||
MyName => [
|
||||
{ DeepName => $value },
|
||||
@@ -380,6 +405,13 @@ This means you may set element properties by passing
|
||||
|
||||
Examples are similar to the examples provided for new() above.
|
||||
|
||||
Note that you cannot delete a property by setting it to undef - this sets
|
||||
the property to a empty property object (with vaue undef).
|
||||
|
||||
To delete a property, say
|
||||
|
||||
$obj->set_FOO();
|
||||
|
||||
=head2 as_hash_ref
|
||||
|
||||
Returns a hash ref representation of the complexType object
|
||||
@@ -423,9 +455,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 477 $
|
||||
$Rev: 497 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: ComplexType.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$Id: ComplexType.pm 497 2008-01-19 12:57:57Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/perl
|
||||
package SOAP::WSDL::XSD::Typelib::Element;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use strict;
|
||||
|
||||
our $VERSION=q{2.00_27};
|
||||
our $VERSION=q{2.00_29};
|
||||
|
||||
my %NAME;
|
||||
my %NILLABLE;
|
||||
@@ -37,6 +38,7 @@ BLOCK: {
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
# use $_[0] and $_[1] for speed.
|
||||
|
||||
sub start_tag {
|
||||
@@ -46,17 +48,18 @@ sub start_tag {
|
||||
|
||||
if ($_[1]->{ nil }) {
|
||||
return q{} if not $NILLABLE{ ref $_[0] };
|
||||
push @attr_from, 'xsi:nil="true"';
|
||||
push @attr_from, q{ xsi:nil="true"};
|
||||
$ending = '/>';
|
||||
}
|
||||
if ($_[1]->{qualified}) {
|
||||
push @attr_from, 'xmlns="' . $_[0]->get_xmlns . '"';
|
||||
push @attr_from, q{ xmlns="} . $_[0]->get_xmlns() . q{"};
|
||||
}
|
||||
push @attr_from, $_[0]->serialize_attr();
|
||||
|
||||
# do we need to check for name ? Element ref="" should have it's own
|
||||
# start_tag. If we don't need to check, we can speed things up
|
||||
return join q{ }, "<$_[1]->{ name }" , @attr_from , $ending if $_[1]->{ name };
|
||||
return join q{ }, "<$NAME{ ref $_[0]}" , @attr_from , $ending;
|
||||
return join q{}, "<$_[1]->{ name }" , @attr_from , $ending if $_[1]->{ name };
|
||||
return join q{}, "<$NAME{ ref $_[0]}" , @attr_from , $ending;
|
||||
}
|
||||
|
||||
# use $_[0] and $_[1] for speed.
|
||||
@@ -172,9 +175,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 477 $
|
||||
$Rev: 497 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Element.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$Id: Element.pm 497 2008-01-19 12:57:57Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/Element.pm $
|
||||
|
||||
=cut
|
||||
|
||||
44
patches/Manual.diff
Normal file
44
patches/Manual.diff
Normal file
@@ -0,0 +1,44 @@
|
||||
--- Manual.pod-orig 2007-12-04 00:45:33.000000000 -0500
|
||||
+++ Manual.pod 2007-12-04 00:53:12.000000000 -0500
|
||||
@@ -37,7 +37,7 @@
|
||||
objects based on SOAP::WSDL's XML schema implementation.
|
||||
|
||||
To access the object's properties use get_NAME / set_NAME getter/setter
|
||||
-methods whith NAME corresponding to the XML tag name / the hash structure as
|
||||
+methods with NAME corresponding to the XML tag name / the hash structure as
|
||||
showed in the generated pod.
|
||||
|
||||
=item * Run script
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
There should be a bunch of classes for types (in the MyTypes:: namespace by
|
||||
default), elements (in MyElements::), and at least one typemap (in
|
||||
-MyTypemaps::) and one ore more interface classes (in MyInterfaces::).
|
||||
+MyTypemaps::) and one or more interface classes (in MyInterfaces::).
|
||||
|
||||
If you don't already know the details of the web service you're going to
|
||||
instrument, it's now time to read the perldoc of the generated interface
|
||||
@@ -111,7 +111,7 @@
|
||||
print $result;
|
||||
|
||||
The above handling of errors ("die $result if not $result") may look a bit
|
||||
-strange - it is due to the nature of
|
||||
+strange - it is due to the nature of the
|
||||
L<SOAP::WSDL::SOAP::Typelib::Fault11|SOAP::WSDL::SOAP::Typelib::Fault11>
|
||||
objects SOAP::WSDL uses for signalling failure.
|
||||
|
||||
@@ -144,12 +144,12 @@
|
||||
only implement a few by hand. These (precious) few classes may get lost in
|
||||
the mass of (cheap) generated ones. Just imagine one of your co-workers (or
|
||||
even yourself) deleting the whole bunch and re-generating everything - oops
|
||||
-- almost everything. You got the point.
|
||||
+- almost everything. You get the point.
|
||||
|
||||
For simplicity, you probably just want to use builtin types wherever possible
|
||||
- you are probably not interested in whether a fault detail's error code is
|
||||
presented to you as a simpleType ranging from 1 to 10 (which you have to
|
||||
-write) or as a int (which is a builtin type ready to use).
|
||||
+write) or as an int (which is a builtin type ready to use).
|
||||
|
||||
Using builtin types for simpleType definitions may greatly reduce the number
|
||||
of additional classes you need to implement.
|
||||
@@ -12,7 +12,7 @@ use_ok qw( MyElement );
|
||||
my $obj = MyElement->new({ value => 'test'});
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType')
|
||||
, 'inherited class';
|
||||
is $obj->serialize_qualified(), '<MyElementName xmlns="urn:Test" >test</MyElementName>', 'stringification';
|
||||
is $obj->serialize_qualified(), '<MyElementName xmlns="urn:Test">test</MyElementName>', 'stringification';
|
||||
|
||||
$obj = MyAtomicComplexTypeElement->new({ test=> 'Test', test2 => 'Test2'});
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
@@ -21,8 +21,8 @@ ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
ok $obj->get_test->isa('SOAP::WSDL::XSD::Typelib::Builtin::string')
|
||||
, 'element isa';
|
||||
|
||||
is $obj->serialize_qualified, '<MyAtomicComplexTypeElement xmlns="urn:Test" ><test >Test</test>'
|
||||
. '<test2 >Test2</test2></MyAtomicComplexTypeElement>'
|
||||
is $obj->serialize_qualified, '<MyAtomicComplexTypeElement xmlns="urn:Test"><test>Test</test>'
|
||||
. '<test2>Test2</test2></MyAtomicComplexTypeElement>'
|
||||
, 'stringification';
|
||||
|
||||
$obj = MyElement->new({ value => undef});
|
||||
@@ -34,14 +34,14 @@ ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType')
|
||||
$obj = MyAtomicComplexTypeElement->new({ test=> 'Test', test2 => [ 'Test2', 'Test3' ]});
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
, 'inherited class';
|
||||
is $obj, '<MyAtomicComplexTypeElement xmlns="urn:Test" ><test >Test</test>'
|
||||
. '<test2 >Test2</test2>'
|
||||
. '<test2 >Test3</test2>'
|
||||
is $obj, '<MyAtomicComplexTypeElement xmlns="urn:Test"><test>Test</test>'
|
||||
. '<test2>Test2</test2>'
|
||||
. '<test2>Test3</test2>'
|
||||
. '</MyAtomicComplexTypeElement>'
|
||||
, 'multi value stringification';
|
||||
|
||||
ok $obj = MyComplexTypeElement->new({ MyTestName => 'test' });
|
||||
is $obj->serialize_qualified(), '<MyComplexTypeElement xmlns="urn:Test" ><MyTestName >test</MyTestName ></MyComplexTypeElement>';
|
||||
is $obj->serialize_qualified(), '<MyComplexTypeElement xmlns="urn:Test"><MyTestName>test</MyTestName></MyComplexTypeElement>';
|
||||
|
||||
__END__
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@ use_ok qw( MyComplexType );
|
||||
my $obj = MyComplexType->new({ MyTestName => 'test' });
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
, 'inherited class';
|
||||
is $obj, '<MyTestName >test</MyTestName >', 'stringification';
|
||||
is $obj, '<MyTestName>test</MyTestName>', 'stringification';
|
||||
|
||||
$obj = MyComplexType->new({ MyTestName => [ 'test', 'test2' ] });
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
, 'inherited class';
|
||||
is $obj, '<MyTestName >test</MyTestName ><MyTestName >test2</MyTestName >',
|
||||
is $obj, '<MyTestName>test</MyTestName><MyTestName>test2</MyTestName>',
|
||||
'stringification';
|
||||
|
||||
# try on the fly factory
|
||||
@@ -36,7 +36,7 @@ is $obj, '<MyTestName >test</MyTestName ><MyTestName >test2</MyTestName >',
|
||||
$obj = MyComplexType2->new({ MyTestName => [ 'test', 'test2' ] });
|
||||
ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
, 'inherited class (on the fly-factory object)';
|
||||
is $obj, '<MyTestName >test</MyTestName><MyTestName >test2</MyTestName>',
|
||||
is $obj, '<MyTestName>test</MyTestName><MyTestName>test2</MyTestName>',
|
||||
'stringification (on the fly-factory object)';
|
||||
|
||||
# TODO factor out into complexType test
|
||||
|
||||
@@ -20,8 +20,8 @@ ok $obj->isa('SOAP::WSDL::XSD::Typelib::Builtin::anyType')
|
||||
ok $obj->get_test->isa('SOAP::WSDL::XSD::Typelib::Builtin::string')
|
||||
, 'element isa';
|
||||
|
||||
is $obj, '<MyAtomicComplexTypeElement xmlns="urn:Test" ><test >Test</test>'
|
||||
. '<test2 >Test2</test2></MyAtomicComplexTypeElement>'
|
||||
is $obj, '<MyAtomicComplexTypeElement xmlns="urn:Test"><test>Test</test>'
|
||||
. '<test2>Test2</test2></MyAtomicComplexTypeElement>'
|
||||
, 'stringification';
|
||||
|
||||
my $soap = SOAP::WSDL::Client->new( {
|
||||
|
||||
62
t/095_copying.t
Normal file
62
t/095_copying.t
Normal file
@@ -0,0 +1,62 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More;
|
||||
use File::Find;
|
||||
if ( not $ENV{TEST_AUTHOR} ) {
|
||||
my $msg = 'Author test. Set $ENV{TEST_AUTHOR} to a true value to run.';
|
||||
plan( skip_all => $msg );
|
||||
}
|
||||
|
||||
require Test::Pod::Content;
|
||||
import Test::Pod::Content;
|
||||
|
||||
my $dir = 'blib/lib';
|
||||
if (-d '../t') {
|
||||
$dir = '../lib';
|
||||
}
|
||||
|
||||
my @filelist = ();
|
||||
find( \&filelist, $dir);
|
||||
|
||||
sub filelist {
|
||||
my $name = $_;
|
||||
return if (-d $name);
|
||||
return if $File::Find::name =~m{\.svn}x;
|
||||
return if $File::Find::name !~m{\.pm$}x;
|
||||
|
||||
# skip builtin XSD types - they contain no pod
|
||||
return if $File::Find::name =~m{SOAP/WSDL/XSD/Typelib/Builtin/.+}xms;
|
||||
# skip data classes - they contain no pod
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Base\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Binding\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Message\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Operation\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/OpMessage\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Part\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Port\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/PortType\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/SOAP/Address\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/SOAP/Body\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/SOAP/Header\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/SOAP/HeaderFault\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/SOAP/Operation\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Service\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/TypeLookup\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/Types\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/XSD/Builtin\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/XSD/ComplexType\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/XSD/SimpleType\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/XSD/Element\.pm$}xms;
|
||||
return if $File::Find::name =~m{SOAP/WSDL/XSD/Schema\.pm$}xms;
|
||||
|
||||
push @filelist, $File::Find::name;
|
||||
}
|
||||
|
||||
plan tests => scalar @filelist;
|
||||
|
||||
for my $file (sort @filelist) {
|
||||
pod_section_like( $file, 'LICENSE AND COPYRIGHT', qr{ This \s file \s is \s part \s of
|
||||
\s SOAP-WSDL\. \s You \s may \s distribute/modify \s it \s under \s
|
||||
the \s same \s terms \s as \s perl \s itself
|
||||
}xms, "$file License notice");
|
||||
}
|
||||
13
t/SOAP/WSDL/Client.t
Normal file
13
t/SOAP/WSDL/Client.t
Normal file
@@ -0,0 +1,13 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 4; #qw(no_plan);
|
||||
|
||||
use_ok qw(SOAP::WSDL::Client);
|
||||
|
||||
ok my $client = SOAP::WSDL::Client->new();
|
||||
|
||||
ok $client = SOAP::WSDL::Client->new({
|
||||
proxy => 'http://localhost',
|
||||
});
|
||||
|
||||
is $client->get_endpoint(), 'http://localhost';
|
||||
@@ -4,7 +4,7 @@ use Class::Std::Fast;
|
||||
package main;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More qw(no_plan);
|
||||
use Test::More tests => 9;
|
||||
use_ok qw(SOAP::WSDL::Client::Base);
|
||||
|
||||
my $client = SOAP::WSDL::Client::Base->new();
|
||||
@@ -63,3 +63,4 @@ isa_ok $result[0], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||
is $result[0], 'Body2';
|
||||
is $result[1], 'Header2';
|
||||
isa_ok $result[1], 'SOAP::WSDL::XSD::Typelib::Builtin::string';
|
||||
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
#!/usr/bin/perl -w
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 2;
|
||||
use Test::More tests => 4;
|
||||
use lib '../../../../lib';
|
||||
use lib '../../../../t/lib';
|
||||
use lib 't/lib';
|
||||
use lib '../lib';
|
||||
use lib 'lib';
|
||||
use lib 't/lib';
|
||||
|
||||
use_ok(qw/SOAP::WSDL::Expat::MessageParser/);
|
||||
|
||||
@@ -26,10 +28,34 @@ my $parser = SOAP::WSDL::Expat::MessageParser->new({
|
||||
|
||||
$parser->parse( $xml );
|
||||
|
||||
is $parser->get_data(), q{<MyAtomicComplexTypeElement xmlns="urn:Test" >}
|
||||
. q{<test >Test</test><test2 >Test2</test2></MyAtomicComplexTypeElement>}
|
||||
is $parser->get_data(), q{<MyAtomicComplexTypeElement xmlns="urn:Test">}
|
||||
. q{<test>Test</test><test2>Test2</test2></MyAtomicComplexTypeElement>}
|
||||
, 'Content comparison';
|
||||
|
||||
my $xml_attr = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||
<SOAP-ENV:Body><MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2">
|
||||
<test>Test</test>
|
||||
<test2 >Test2</test2>
|
||||
</MyElementAttrs></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||
|
||||
$parser->parse($xml_attr);
|
||||
|
||||
is $parser->get_data(),
|
||||
q{<MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2"><test>Test</test><test2>Test2</test2></MyElementAttrs>},
|
||||
'Content with attributes';
|
||||
|
||||
my $xml_error = q{<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
|
||||
<SOAP-ENV:Body><MyElementAttrs xmlns="urn:Test" test="Test" test2="Test2">
|
||||
<test>Test</test>
|
||||
<test2 >Test2</test2>
|
||||
<foo>Bar</foo>
|
||||
</MyElementAttrs></SOAP-ENV:Body></SOAP-ENV:Envelope>};
|
||||
|
||||
eval { $parser->parse($xml_error) };
|
||||
like $@, qr{\A Cannot \s resolve \s class \s for \s MyElementAttrs/foo }x, 'XML error';
|
||||
|
||||
# data classes reside in t/lib/Typelib/
|
||||
BEGIN {
|
||||
package FakeResolver;
|
||||
@@ -41,6 +67,9 @@ BEGIN {
|
||||
'MyAtomicComplexTypeElement/foo' => '__SKIP__',
|
||||
# 'MyAtomicComplexTypeElement/foo/bar' => 'MyFooElement',
|
||||
# 'MyAtomicComplexTypeElement/foo/baz' => 'MyFooElement',
|
||||
'MyElementAttrs' => 'MyElementAttrs',
|
||||
'MyElementAttrs/test' => 'MyTestElement',
|
||||
'MyElementAttrs/test2' => 'MyTestElement2',
|
||||
);
|
||||
|
||||
sub new { return bless {}, 'FakeResolver' };
|
||||
@@ -50,9 +79,7 @@ BEGIN {
|
||||
sub get_class {
|
||||
my $name = join('/', @{ $_[1] });
|
||||
return ($class_list{ $name }) ? $class_list{ $name }
|
||||
: warn "no class found for $name";
|
||||
: undef;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
53
t/SOAP/WSDL/Expat/WSDLParser.t
Normal file
53
t/SOAP/WSDL/Expat/WSDLParser.t
Normal file
@@ -0,0 +1,53 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 4; #qw(no_plan);
|
||||
use File::Spec;
|
||||
use File::Basename;
|
||||
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
|
||||
use_ok qw( SOAP::WSDL::Expat::WSDLParser);
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
||||
|
||||
my $definitions = $parser->parse_file(
|
||||
"$path/../../../acceptance/wsdl/WSDLParser.wsdl"
|
||||
);
|
||||
|
||||
use Data::Dumper;
|
||||
my $schema = $definitions->first_types()->get_schema()->[1];
|
||||
my $attr = $schema->get_element()->[0]->first_complexType->first_attribute();
|
||||
ok $attr->get_name('testAttribute');
|
||||
ok $attr->get_type('xs:string');
|
||||
|
||||
|
||||
use SOAP::WSDL::Generator::Template::XSD;
|
||||
my $generator = SOAP::WSDL::Generator::Template::XSD->new({
|
||||
definitions => $definitions,
|
||||
type_prefix => 'Foo',
|
||||
element_prefix => 'Foo',
|
||||
typemap_prefix => 'Foo',
|
||||
OUTPUT_PATH => "$path/testlib",
|
||||
});
|
||||
|
||||
my $code = "";
|
||||
$generator->set_output(\$code);
|
||||
$generator->generate_typelib();
|
||||
{
|
||||
eval $code;
|
||||
ok !$@;
|
||||
print $@ if $@;
|
||||
}
|
||||
|
||||
# print $code;
|
||||
|
||||
__END__
|
||||
|
||||
$generator->set_type_prefix('MyTypes');
|
||||
$generator->set_element_prefix('MyElements');
|
||||
$generator->set_typemap_prefix('MyTypemaps');
|
||||
$generator->set_interface_prefix('MyInterfaces');
|
||||
|
||||
$generator->set_output(undef);
|
||||
$generator->generate();
|
||||
|
||||
@@ -11,7 +11,7 @@ eval { require XML::LibXML }
|
||||
|
||||
plan skip_all => 'XML::Compile::WSDL11 is not functional yet';
|
||||
|
||||
plan tests => qw(no_plan);
|
||||
plan qw(no_plan);
|
||||
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
|
||||
@@ -20,6 +20,8 @@ my $xml = $libxml->parse_file("$path/../../../acceptance/wsdl/generator_test.wsd
|
||||
|
||||
my $wsdl = XML::Compile::WSDL11->new($xml);
|
||||
my $schemas = $wsdl->schemas;
|
||||
my $operation = $wsdl->operation('testHeader');
|
||||
ok my $operation = $wsdl->operation('testHeader');
|
||||
|
||||
my $client = $operation->prepareClient();
|
||||
#die Dumper $operation;
|
||||
#
|
||||
#my $client = $operation->prepareClient();
|
||||
|
||||
100
t/SOAP/WSDL/Generator/XSD_dot_names.t
Normal file
100
t/SOAP/WSDL/Generator/XSD_dot_names.t
Normal file
@@ -0,0 +1,100 @@
|
||||
use Test::More tests => 12;
|
||||
use File::Basename qw(dirname);
|
||||
use File::Spec;
|
||||
use File::Path;
|
||||
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
|
||||
use_ok qw(SOAP::WSDL::Generator::Visitor::Typelib);
|
||||
use_ok qw(SOAP::WSDL::Generator::Template::XSD);
|
||||
|
||||
use SOAP::WSDL::Expat::WSDLParser;
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
||||
|
||||
my $definitions = $parser->parse_file(
|
||||
"$path/../../../acceptance/wsdl/generator_test_dot_names.wsdl"
|
||||
#"$path/../../../acceptance/wsdl/elementAtomicComplexType.xml"
|
||||
);
|
||||
|
||||
my $generator = SOAP::WSDL::Generator::Template::XSD->new({
|
||||
definitions => $definitions,
|
||||
type_prefix => 'Foo',
|
||||
element_prefix => 'Foo',
|
||||
typemap_prefix => 'Foo',
|
||||
OUTPUT_PATH => "$path/testlib",
|
||||
});
|
||||
|
||||
my $code = "";
|
||||
$generator->set_output(\$code);
|
||||
$generator->generate_typelib();
|
||||
{
|
||||
eval $code;
|
||||
ok !$@;
|
||||
print $@ if $@;
|
||||
}
|
||||
# print $code;
|
||||
|
||||
|
||||
$generator->set_type_prefix('MyTypes');
|
||||
$generator->set_element_prefix('MyElements');
|
||||
$generator->set_typemap_prefix('MyTypemaps');
|
||||
$generator->set_interface_prefix('MyInterfaces');
|
||||
|
||||
$generator->set_output(undef);
|
||||
$generator->generate();
|
||||
#$generator->generate_typelib();
|
||||
#$generator->generate_typemap();
|
||||
|
||||
if (eval { require Test::Warn; }) {
|
||||
Test::Warn::warning_like( sub { $generator->generate_interface() },
|
||||
qr{\A Multiple \s parts \s detected \s in \s message \s testMultiPartWarning}xms);
|
||||
}
|
||||
else {
|
||||
$generator->generate_interface();
|
||||
SKIP: { skip 'Cannot test warnings without Test::Warn', 1 };
|
||||
}
|
||||
|
||||
$generator->generate_server();
|
||||
|
||||
eval "use lib '$path/testlib'";
|
||||
|
||||
use_ok qw(MyInterfaces::My::SOAP::testService::testPort);
|
||||
use_ok qw(MyServer::My::SOAP::testService::testPort);
|
||||
SKIP: {
|
||||
eval { require Test::Pod::Content; }
|
||||
or skip 'Cannot test pod content without Test::Pod::Content', 6;
|
||||
Test::Pod::Content::pod_section_like(
|
||||
'MyInterfaces::My::SOAP::testService::testPort',
|
||||
'NAME',
|
||||
qr{^MyInterfaces::My::SOAP::testService::testPort \s - \s}xms,
|
||||
'Pod NAME section');
|
||||
Test::Pod::Content::pod_section_like(
|
||||
'MyInterfaces::My::SOAP::testService::testPort',
|
||||
'SYNOPSIS',
|
||||
qr{use \s MyInterfaces::My::SOAP::testService::testPort}xms,
|
||||
'Pod SYNOPSIS section');
|
||||
Test::Pod::Content::pod_section_like(
|
||||
'MyInterfaces::My::SOAP::testService::testPort',
|
||||
'SYNOPSIS',
|
||||
qr{\s MyInterfaces::My::SOAP::testService::testPort->new\(}xms,
|
||||
'Pod SYNOPSIS section');
|
||||
|
||||
Test::Pod::Content::pod_section_like(
|
||||
'MyServer::My::SOAP::testService::testPort',
|
||||
'NAME',
|
||||
qr{^MyServer::My::SOAP::testService::testPort \s - \s}xms,
|
||||
'Pod NAME section');
|
||||
Test::Pod::Content::pod_section_like(
|
||||
'MyServer::My::SOAP::testService::testPort',
|
||||
'SYNOPSIS',
|
||||
qr{use \s MyServer::My::SOAP::testService::testPort}xms,
|
||||
'Pod SYNOPSIS section');
|
||||
Test::Pod::Content::pod_section_like(
|
||||
'MyServer::My::SOAP::testService::testPort',
|
||||
'SYNOPSIS',
|
||||
qr{\s MyServer::My::SOAP::testService::testPort->new\(}xms,
|
||||
'Pod SYNOPSIS section');
|
||||
}
|
||||
|
||||
rmtree "$path/testlib";
|
||||
@@ -10,4 +10,11 @@ like $serializer->serialize(), qr{<SOAP-ENV:Body></SOAP-ENV:Body>}, 'empty body'
|
||||
like $serializer->serialize({ body => {} }), qr{<SOAP-ENV:Body></SOAP-ENV:Body>}, 'empty body';
|
||||
like $serializer->serialize({ body => [] }), qr{<SOAP-ENV:Body></SOAP-ENV:Body>}, 'empty body';
|
||||
like $serializer->serialize({ header => {}, body => [] }),
|
||||
qr{<SOAP-ENV:Header></SOAP-ENV:Header><SOAP-ENV:Body></SOAP-ENV:Body>}, 'empty header and body';
|
||||
qr{<SOAP-ENV:Header></SOAP-ENV:Header><SOAP-ENV:Body></SOAP-ENV:Body>}, 'empty header and body';
|
||||
like $serializer->serialize({ header => {}, body => [] , options => {
|
||||
namespace => {
|
||||
'http://schemas.xmlsoap.org/soap/envelope/' => 'SOAP',
|
||||
'http://www.w3.org/2001/XMLSchema-instance' => 'xsi',
|
||||
}
|
||||
} }),
|
||||
qr{<SOAP:Header></SOAP:Header><SOAP:Body></SOAP:Body>}, 'empty header and body';
|
||||
7
t/SOAP/WSDL/XSD/Typelib/Attribute.t
Normal file
7
t/SOAP/WSDL/XSD/Typelib/Attribute.t
Normal file
@@ -0,0 +1,7 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 3; #qw(no_plan);
|
||||
|
||||
use_ok qw(SOAP::WSDL::XSD::Typelib::Attribute);
|
||||
is SOAP::WSDL::XSD::Typelib::Attribute->start_tag(), '';
|
||||
is SOAP::WSDL::XSD::Typelib::Attribute->start_tag({ name => 'foo'}, 'bar'), q{ foo="};
|
||||
@@ -24,8 +24,8 @@ is $obj->get_value(), 'test1', 'get_value';
|
||||
is $obj->get_xmlns(), 'http://www.w3.org/2001/XMLSchema', 'get_xmlns';
|
||||
|
||||
|
||||
is $obj->start_tag({ name => 'test' }), '<test >', 'start_tag';
|
||||
is $obj->end_tag({ name => 'test' }), '</test >', 'end_tag';
|
||||
is $obj->start_tag({ name => 'test' }), '<test>', 'start_tag';
|
||||
is $obj->end_tag({ name => 'test' }), '</test>', 'end_tag';
|
||||
|
||||
ok $obj->set_value('test'), 'set_value';
|
||||
is $obj->get_value(), 'test', 'get_value';
|
||||
@@ -54,7 +54,7 @@ is $obj->get_value(), 'test2', 'get_value on attr value';
|
||||
|
||||
$obj->set_value(undef);
|
||||
|
||||
is $obj->serialize({ name => 'foo' }), '<foo ></foo >'
|
||||
is $obj->serialize({ name => 'foo' }), '<foo></foo>'
|
||||
, 'serialize undef value with name';
|
||||
is $obj->serialize(), q{}, 'serialize undef value without name';
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Test::More tests => 3;
|
||||
use Test::More tests => 5;
|
||||
use Scalar::Util qw(blessed);
|
||||
use_ok qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
||||
|
||||
is SOAP::WSDL::XSD::Typelib::Builtin::anyType->get_xmlns(), 'http://www.w3.org/2001/XMLSchema', 'get_xmlns';
|
||||
is SOAP::WSDL::XSD::Typelib::Builtin::anyType->serialize(), q{}, 'serialize to empty';
|
||||
|
||||
is SOAP::WSDL::XSD::Typelib::Builtin::anyType->start_tag(), q{}, 'serialize to empty';
|
||||
is SOAP::WSDL::XSD::Typelib::Builtin::anyType->start_tag({ name => 'foo'}), q{<foo>}, 'serialize with name';
|
||||
exit 0;
|
||||
|
||||
__END__
|
||||
|
||||
@@ -46,7 +46,7 @@ is "$bool", '0', 'stringification';
|
||||
|
||||
ok $bool->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType'), 'inheritance';
|
||||
|
||||
is $bool->serialize({ name => 'test'}), '<test >false</test >';
|
||||
is $bool->serialize({ name => 'test'}), '<test>false</test>';
|
||||
is $bool->serialize(), 'false';
|
||||
|
||||
$bool->delete_value();
|
||||
|
||||
@@ -20,5 +20,5 @@ is $obj->serialize, '& "Aber" <test>'
|
||||
, 'escape text on serialization';
|
||||
|
||||
is $obj->serialize({ name => 'test'})
|
||||
, '<test >& "Aber" <test></test >'
|
||||
, '<test>& "Aber" <test></test>'
|
||||
, 'Serialization with name';
|
||||
@@ -19,5 +19,5 @@ is $obj->serialize(), '& "Aber" <test>'
|
||||
, 'escape text on serialization';
|
||||
|
||||
is $obj->serialize({ name => 'test'})
|
||||
, '<test >& "Aber" <test></test >'
|
||||
, '<test>& "Aber" <test></test>'
|
||||
, 'Serialization with name';
|
||||
@@ -9,22 +9,48 @@ package MyEmptyType2;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
__PACKAGE__->_factory();
|
||||
|
||||
package MyType;
|
||||
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
my %test_of :ATTR(:get<test>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ 'test' ],
|
||||
{
|
||||
test => \%test_of,
|
||||
},
|
||||
{
|
||||
test => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
}
|
||||
package MyAttribute;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Attribute
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
package MyType;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
{
|
||||
my %test_of :ATTR(:get<test>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ 'test' ],
|
||||
{ test => \%test_of, },
|
||||
{ test => 'SOAP::WSDL::XSD::Typelib::Builtin::string', }
|
||||
);
|
||||
}
|
||||
|
||||
package MyElement;
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
MyType
|
||||
);
|
||||
|
||||
__PACKAGE__->__set_name( 'MyElement' );
|
||||
|
||||
package MyElement::_ATTR;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
||||
{
|
||||
my %test_of :ATTR(:get<test>);
|
||||
my %test2_of :ATTR(:get<test2>);
|
||||
__PACKAGE__->_factory(
|
||||
[ 'test', 'test2' ],
|
||||
{
|
||||
test => \%test_of,
|
||||
test2 => \%test2_of,
|
||||
},
|
||||
{
|
||||
test => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
test2 => 'MyAttribute',
|
||||
}
|
||||
);
|
||||
}
|
||||
package MyType2;
|
||||
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
@@ -42,7 +68,7 @@ __PACKAGE__->_factory(
|
||||
);
|
||||
|
||||
package main;
|
||||
use Test::More tests => 100;
|
||||
use Test::More tests => 106;
|
||||
use Storable;
|
||||
|
||||
my $have_warn = eval { require Test::Warn; import Test::Warn; 1; };
|
||||
@@ -51,11 +77,11 @@ my $obj;
|
||||
|
||||
$obj = MyEmptyType->new();
|
||||
is $obj->serialize, '';
|
||||
is $obj->serialize({ name => 'test'}), '<test />';
|
||||
is $obj->serialize({ name => 'test'}), '<test/>';
|
||||
|
||||
$obj = MyEmptyType2->new();
|
||||
is $obj->serialize, '';
|
||||
is $obj->serialize({ name => 'test'}), '<test />';
|
||||
is $obj->serialize({ name => 'test'}), '<test/>';
|
||||
|
||||
|
||||
$obj = MyType->new({});
|
||||
@@ -168,7 +194,27 @@ for my $count (1..5) {
|
||||
}
|
||||
}
|
||||
|
||||
# TODO - remove after *{ "$class\::$name"" } methods are gone
|
||||
$obj->set_test();
|
||||
is $obj->get_test, (), 'removed element content';
|
||||
|
||||
|
||||
$obj = MyElement->new();
|
||||
isa_ok $obj->attr() , 'SOAP::WSDL::XSD::Typelib::AttributeSet';
|
||||
|
||||
my $attr = $obj->attr({ test => 'TestAttribute',
|
||||
test2 => 'TestAttribute2'
|
||||
});
|
||||
isa_ok $attr, 'SOAP::WSDL::XSD::Typelib::AttributeSet';
|
||||
is $attr->serialize(), q{ test="TestAttribute" test2="TestAttribute2"}, 'attribute serialization';
|
||||
|
||||
is $obj->serialize(),
|
||||
q{<MyElement test="TestAttribute" test2="TestAttribute2"/>},
|
||||
'Serialization with attributes';
|
||||
|
||||
$obj->attr()->set_test2('test');
|
||||
is $obj->serialize(),
|
||||
q{<MyElement test="TestAttribute" test2="test"/>},
|
||||
'Serialization with attributes';
|
||||
|
||||
$obj = MyType->new();
|
||||
|
||||
@@ -181,14 +227,12 @@ is $obj->get_test, undef;
|
||||
eval { $foo = @{ $obj->get_test() } };
|
||||
if (! $@) {
|
||||
is $foo, undef;
|
||||
# like $warnings, qr{ uninitialized \s value \s in array \s dereference }x, 'undef warning';
|
||||
}
|
||||
else {
|
||||
like $@ , qr{Can't \s use \s an \s undefined}x, 'get_ELEMENT still undef on ARRAYIFY';
|
||||
# pass 'failed array dereference';
|
||||
}
|
||||
|
||||
$obj->test(
|
||||
$obj->set_test(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => 'TestString0'})
|
||||
);
|
||||
}
|
||||
@@ -197,15 +241,15 @@ eval { is @{ $obj->get_test() }, 1, 'ARRAYIFY get_ELEMENT' };
|
||||
fail 'cannot ARRAYIFY get_ELEMENT' if ($@);
|
||||
|
||||
my @serialized = (
|
||||
'<test >TestString0</test ><test >TestString1</test >',
|
||||
'<test >TestString0</test ><test >TestString1</test ><test >TestString2</test >',
|
||||
'<test >TestString0</test ><test >TestString1</test ><test >TestString2</test ><test >TestString3</test >',
|
||||
'<test >TestString0</test ><test >TestString1</test ><test >TestString2</test ><test >TestString3</test ><test >TestString4</test >',
|
||||
'<test >TestString0</test ><test >TestString1</test ><test >TestString2</test ><test >TestString3</test ><test >TestString4</test ><test >TestString5</test >',
|
||||
'<test>TestString0</test><test>TestString1</test>',
|
||||
'<test>TestString0</test><test>TestString1</test><test>TestString2</test>',
|
||||
'<test>TestString0</test><test>TestString1</test><test>TestString2</test><test>TestString3</test>',
|
||||
'<test>TestString0</test><test>TestString1</test><test>TestString2</test><test>TestString3</test><test>TestString4</test>',
|
||||
'<test>TestString0</test><test>TestString1</test><test>TestString2</test><test>TestString3</test><test>TestString4</test><test>TestString5</test>',
|
||||
);
|
||||
|
||||
for my $count (1..5) {
|
||||
$obj->test(
|
||||
$obj->add_test(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string->new({ value => "TestString$count" })
|
||||
);
|
||||
|
||||
@@ -219,7 +263,6 @@ for my $count (1..5) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
eval {
|
||||
$obj = MyType->new({
|
||||
test => [
|
||||
@@ -240,7 +283,6 @@ eval {
|
||||
};
|
||||
like $@, qr{cannot \s use \s CODE}xms;
|
||||
|
||||
|
||||
eval {
|
||||
$obj = MyType->new({
|
||||
foobar => 'fubar'
|
||||
|
||||
@@ -10,7 +10,7 @@ __PACKAGE__->__set_name('MyElement');
|
||||
__PACKAGE__->__set_nillable(1);
|
||||
|
||||
package main;
|
||||
use Test::More tests => 11;
|
||||
use Test::More tests => 12;
|
||||
|
||||
my $obj;
|
||||
|
||||
@@ -25,8 +25,8 @@ isa_ok $obj, 'MyElement';
|
||||
is $obj->get_value(), 'Test';
|
||||
|
||||
$obj->set_value(undef);
|
||||
is $obj->serialize_qualified, '<MyElement xsi:nil="true" xmlns="http://www.w3.org/2001/XMLSchema" />';
|
||||
|
||||
is $obj->serialize_qualified, '<MyElement xsi:nil="true" xmlns="http://www.w3.org/2001/XMLSchema"/>';
|
||||
is $obj->serialize, '<MyElement xsi:nil="true"/>';
|
||||
$obj->__set_nillable(0);
|
||||
is $obj->__get_nillable(), 0;
|
||||
|
||||
@@ -35,7 +35,7 @@ like $@, qr{Cannot \s call}xms;
|
||||
eval { SOAP::WSDL::XSD::Typelib::Element::__set_nillable() };
|
||||
like $@, qr{Cannot \s call}xms;
|
||||
|
||||
is $obj->start_tag({empty => 1}), '<MyElement />';
|
||||
is $obj->start_tag({empty => 1}), '<MyElement/>';
|
||||
is $obj->start_tag({nil => 1}), '', 'empty string with nil option and NILLABLE false';
|
||||
$obj->set_value('Test');
|
||||
|
||||
|
||||
77
t/acceptance/wsdl/WSDLParser.wsdl
Normal file
77
t/acceptance/wsdl/WSDLParser.wsdl
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="urn:HelloWorld"
|
||||
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
||||
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
|
||||
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
|
||||
targetNamespace="urn:HelloWorld"
|
||||
xmlns="http://schemas.xmlsoap.org/wsdl/">
|
||||
<types>
|
||||
<s:schema elementFormDefault="qualified"
|
||||
targetNamespace="urn:HelloWorld">
|
||||
<s:element name="sayHello">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1" name="name"
|
||||
type="s:string" />
|
||||
<s:element minOccurs="0" maxOccurs="1" name="givenName"
|
||||
type="s:string" nillable="1" />
|
||||
</s:sequence>
|
||||
<s:attribute name="testAttr" type="s:string" use="optional"></s:attribute>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
|
||||
<s:element name="sayHelloResponse">
|
||||
<s:complexType>
|
||||
<s:sequence>
|
||||
<s:element minOccurs="0" maxOccurs="1"
|
||||
name="sayHelloResult" type="s:string" />
|
||||
</s:sequence>
|
||||
</s:complexType>
|
||||
</s:element>
|
||||
</s:schema>
|
||||
</types>
|
||||
|
||||
<message name="sayHelloSoapIn">
|
||||
<part name="parameters" element="s0:sayHello" />
|
||||
</message>
|
||||
|
||||
<message name="sayHelloSoapOut">
|
||||
<part name="parameters" element="s0:sayHelloResponse" />
|
||||
</message>
|
||||
|
||||
<portType name="Service1Soap">
|
||||
<operation name="sayHello">
|
||||
<input message="s0:sayHelloSoapIn" />
|
||||
|
||||
<output message="s0:sayHelloSoapOut" />
|
||||
</operation>
|
||||
</portType>
|
||||
|
||||
<binding name="Service1Soap" type="s0:Service1Soap">
|
||||
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
|
||||
style="document" />
|
||||
|
||||
<operation name="sayHello">
|
||||
<soap:operation soapAction="urn:HelloWorld#sayHello"
|
||||
style="document" />
|
||||
|
||||
<input>
|
||||
<soap:body use="literal" />
|
||||
</input>
|
||||
|
||||
<output>
|
||||
<soap:body use="literal" />
|
||||
</output>
|
||||
</operation>
|
||||
</binding>
|
||||
|
||||
<service name="Service1">
|
||||
<port name="Service1Soap" binding="s0:Service1Soap">
|
||||
<soap:address
|
||||
location="http://localhost:81/soap-wsdl-test/helloworld.pl" />
|
||||
</port>
|
||||
</service>
|
||||
</definitions>
|
||||
|
||||
700
t/acceptance/wsdl/contributed/gasquery.wsdl
Normal file
700
t/acceptance/wsdl/contributed/gasquery.wsdl
Normal file
@@ -0,0 +1,700 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wsdl:definitions targetNamespace="http://stub.query.gasapiserver.esp.globalsign.com"
|
||||
xmlns:apachesoap="http://xml.apache.org/xml-soap"
|
||||
xmlns:impl="http://stub.query.gasapiserver.esp.globalsign.com"
|
||||
xmlns:intf="http://stub.query.gasapiserver.esp.globalsign.com"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<!--WSDLはApache Axis version: 1.4
|
||||
Built on Apr 22, 2006 (06:55:48 PDT)によって生成されました / [en]-(WSDL created by Apache Axis version: 1.4
|
||||
Built on Apr 22, 2006 (06:55:48 PDT))-->
|
||||
<wsdl:types>
|
||||
<schema elementFormDefault="qualified" targetNamespace="http://stub.query.gasapiserver.esp.globalsign.com" xmlns="http://www.w3.org/2001/XMLSchema">
|
||||
<element name="GetDVApproverList">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Request" type="impl:GetDVApproverListRequest"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="AuthToken">
|
||||
<sequence>
|
||||
<element name="Password" nillable="true" type="xsd:string"/>
|
||||
<element name="UserName" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="QueryRequestHeader">
|
||||
<sequence>
|
||||
<element name="AuthToken" nillable="true" type="impl:AuthToken"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="GetDVApproverListRequest">
|
||||
<sequence>
|
||||
<element name="FQDN" nillable="true" type="xsd:string"/>
|
||||
<element name="QueryRequestHeader" nillable="true" type="impl:QueryRequestHeader"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetDVApproverListResponse">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Response" type="impl:GetDVApproverListResponse"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="Approver">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="ApproverEmail" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ApproverType" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ArrayOfApprover">
|
||||
<sequence>
|
||||
<element maxOccurs="unbounded" minOccurs="0" name="Approver" type="impl:Approver"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="Error">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="ErrorCode" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ErrorField" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ErrorMessage" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ArrayOfError">
|
||||
<sequence>
|
||||
<element maxOccurs="unbounded" minOccurs="0" name="Error" type="impl:Error"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="QueryResponseHeader">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Errors" nillable="true" type="impl:ArrayOfError"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ReturnCount" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SuccessCode" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Timestamp" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="GetDVApproverListResponse">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Approvers" nillable="true" type="impl:ArrayOfApprover"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderID" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryResponseHeader" nillable="true" type="impl:QueryResponseHeader"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetApproverList">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Request" type="impl:GetApproverListRequest"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="GetApproverListRequest">
|
||||
<sequence>
|
||||
<element name="FQDN" nillable="true" type="xsd:string"/>
|
||||
<element name="QueryRequestHeader" nillable="true" type="impl:QueryRequestHeader"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetApproverListResponse">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Response" type="impl:GetApproverListResponse"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="GetApproverListResponse">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Approvers" nillable="true" type="impl:ArrayOfApprover"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryResponseHeader" nillable="true" type="impl:QueryResponseHeader"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetOrderByOrderID">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Request" type="impl:GetOrderByOrderIDRequest"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="OrderQueryOption">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderStatus" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ReturnCACerts" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ReturnCertificateInfo" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ReturnFulfillment" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ReturnOrderOption" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="GetOrderByOrderIDRequest">
|
||||
<sequence>
|
||||
<element name="OrderID" nillable="true" type="xsd:string"/>
|
||||
<element name="OrderQueryOption" nillable="true" type="impl:OrderQueryOption"/>
|
||||
<element name="QueryRequestHeader" nillable="true" type="impl:QueryRequestHeader"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetOrderByOrderIDResponse">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Response" type="impl:GetOrderByOrderIDResponse"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="CertificateInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="DNSNames" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="CertificateStatus" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="CommonName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="EndDate" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SerialNumber" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="StartDate" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SubjectName" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="CACertificate">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="CACert" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="CACertType" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ArrayOfCACertificate">
|
||||
<sequence>
|
||||
<element maxOccurs="unbounded" minOccurs="0" name="CACertificate" type="impl:CACertificate"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ServerCertificate">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="PKCS7Cert" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="X509Cert" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="Fulfillment">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="CACertificates" nillable="true" type="impl:ArrayOfCACertificate"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ServerCertificate" nillable="true" type="impl:ServerCertificate"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ModificationEvent">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="ModificationEventName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ModificationEventTimestamp" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ArrayOfModificationEvent">
|
||||
<sequence>
|
||||
<element maxOccurs="unbounded" minOccurs="0" name="ModificationEvent" type="impl:ModificationEvent"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ValidityPeriod">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Months" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="NotAfter" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="NotBefore" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="OrderInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="GSSupportOption" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="BaseOption" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Currency" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="DomainName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ExpressOption" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="InsuranceOption" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Licenses" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderCanceledDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderCompleteDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderDeactivatedDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderID" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderKind" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderStatus" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Price" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ProductCode" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="RenewalExtentionOption" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SpecialInstructions" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ValidityPeriod" nillable="true" type="impl:ValidityPeriod"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ValidityPeriodCustomizeOption" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ContactInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Email" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="FirstName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="LastName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Phone" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="OrganizationAddress">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="AddressLine1" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="AddressLine2" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="AddressLine3" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="City" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Country" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Fax" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Phone" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="PostalCode" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Region" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="OrganizationInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="CreditAgency" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationAddress" nillable="true" type="impl:OrganizationAddress"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationCode" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="BusinessAssumedName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="BusinessCategoryCode" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ApproverInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Email" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="FirstName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Function" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="LastName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationUnit" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Phone" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="AuthorizedSignerInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Email" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="FirstName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Function" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="LastName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationUnit" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Phone" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="JurisdictionInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Country" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="IncorporatingAgencyRegistrationNumber" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Locality" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="StateOrProvince" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="RequestorInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="Email" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="FirstName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Function" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="LastName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationUnit" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Phone" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="OrderOption">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="ApproverConfirmDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ApproverEmailAddress" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ApproverNotifiedDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ContactInfo" nillable="true" type="impl:ContactInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationInfo" nillable="true" type="impl:OrganizationInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ApproverInfo" nillable="true" type="impl:ApproverInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="AuthorizedSignerInfo" nillable="true" type="impl:AuthorizedSignerInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="JurisdictionInfo" nillable="true" type="impl:JurisdictionInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="RequestorInfo" nillable="true" type="impl:RequestorInfo"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="OrderSubInfo">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="CSRSkipOrderFlag" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="DNSOrderFlag" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="P12DeleteDate" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="P12DeleteStatus" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SubId" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="TrustedOrderFlag" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="VerificationUrl" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="OrderDetail">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="CertificateInfo" nillable="true" type="impl:CertificateInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Fulfillment" nillable="true" type="impl:Fulfillment"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ModificationEvents" nillable="true" type="impl:ArrayOfModificationEvent"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderInfo" nillable="true" type="impl:OrderInfo"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderOption" nillable="true" type="impl:OrderOption"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderSubInfo" nillable="true" type="impl:OrderSubInfo"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="GetOrderByOrderIDResponse">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderDetail" nillable="true" type="impl:OrderDetail"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderID" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryResponseHeader" nillable="true" type="impl:QueryResponseHeader"/>
|
||||
<element name="PKCS12File" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetModifiedOrders">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Request" type="impl:GetModifiedOrdersRequest"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="GetModifiedOrdersRequest">
|
||||
<sequence>
|
||||
<element name="FromDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element name="OrderQueryOption" nillable="true" type="impl:OrderQueryOption"/>
|
||||
<element name="QueryRequestHeader" nillable="true" type="impl:QueryRequestHeader"/>
|
||||
<element name="ToDate" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetModifiedOrdersResponse">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Response" type="impl:GetModifiedOrdersResponse"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="ArrayOfOrderDetail">
|
||||
<sequence>
|
||||
<element maxOccurs="unbounded" minOccurs="0" name="OrderDetail" type="impl:OrderDetail"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="GetModifiedOrdersResponse">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="FromDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderDetails" nillable="true" type="impl:ArrayOfOrderDetail"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryResponseHeader" nillable="true" type="impl:QueryResponseHeader"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ToDate" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetCertificateOrders">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Request" type="impl:GetCertificateOrdersRequest"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="GetCertificateOrdersRequest">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="FQDN" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="FromDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderKind" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderStatus" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryRequestHeader" nillable="true" type="impl:QueryRequestHeader"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SubID" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ToDate" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetCertificateOrdersResponse">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Response" type="impl:GetCertificateOrdersResponse"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="SearchOrderDetail">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="BaseOption" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="FQDN" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Licenses" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Months" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderCanceledDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderIssueDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderKind" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderRequestDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderStatus" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="Orderid" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrganizationName" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="RequestKind" nillable="true" type="xsd:string"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SubId" nillable="true" type="xsd:string"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="ArrayOfSearchOrderDetail">
|
||||
<sequence>
|
||||
<element maxOccurs="unbounded" minOccurs="0" name="SearchOrderDetail" type="impl:SearchOrderDetail"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<complexType name="GetCertificateOrdersResponse">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="FromDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryResponseHeader" nillable="true" type="impl:QueryResponseHeader"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="SearchOrderDetails" nillable="true" type="impl:ArrayOfSearchOrderDetail"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ToDate" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetOrderByDataRange">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Request" type="impl:GetOrderByDataRangeRequest"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="GetOrderByDataRangeRequest">
|
||||
<sequence>
|
||||
<element name="FromDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element name="OrderQueryOption" nillable="true" type="impl:OrderQueryOption"/>
|
||||
<element name="QueryRequestHeader" nillable="true" type="impl:QueryRequestHeader"/>
|
||||
<element name="ToDate" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
<element name="GetOrderByDataRangeResponse">
|
||||
<complexType>
|
||||
<sequence>
|
||||
<element name="Response" type="impl:GetOrderByDataRangeResponse"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</element>
|
||||
<complexType name="GetOrderByDataRangeResponse">
|
||||
<sequence>
|
||||
<element maxOccurs="1" minOccurs="0" name="FromDate" nillable="true" type="xsd:dateTime"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="OrderDetails" nillable="true" type="impl:ArrayOfOrderDetail"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="QueryResponseHeader" nillable="true" type="impl:QueryResponseHeader"/>
|
||||
<element maxOccurs="1" minOccurs="0" name="ToDate" nillable="true" type="xsd:dateTime"/>
|
||||
</sequence>
|
||||
</complexType>
|
||||
</schema>
|
||||
</wsdl:types>
|
||||
|
||||
<wsdl:message name="GetDVApproverListResponse">
|
||||
|
||||
<wsdl:part element="impl:GetDVApproverListResponse" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetOrderByOrderIDResponse">
|
||||
|
||||
<wsdl:part element="impl:GetOrderByOrderIDResponse" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetModifiedOrdersRequest">
|
||||
|
||||
<wsdl:part element="impl:GetModifiedOrders" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetOrderByDataRangeResponse">
|
||||
|
||||
<wsdl:part element="impl:GetOrderByDataRangeResponse" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetApproverListResponse">
|
||||
|
||||
<wsdl:part element="impl:GetApproverListResponse" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetDVApproverListRequest">
|
||||
|
||||
<wsdl:part element="impl:GetDVApproverList" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetApproverListRequest">
|
||||
|
||||
<wsdl:part element="impl:GetApproverList" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetCertificateOrdersRequest">
|
||||
|
||||
<wsdl:part element="impl:GetCertificateOrders" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetOrderByDataRangeRequest">
|
||||
|
||||
<wsdl:part element="impl:GetOrderByDataRange" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetCertificateOrdersResponse">
|
||||
|
||||
<wsdl:part element="impl:GetCertificateOrdersResponse" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetModifiedOrdersResponse">
|
||||
|
||||
<wsdl:part element="impl:GetModifiedOrdersResponse" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:message name="GetOrderByOrderIDRequest">
|
||||
|
||||
<wsdl:part element="impl:GetOrderByOrderID" name="parameters"/>
|
||||
|
||||
</wsdl:message>
|
||||
|
||||
<wsdl:portType name="GasQuery">
|
||||
|
||||
<wsdl:operation name="GetDVApproverList">
|
||||
|
||||
<wsdl:input message="impl:GetDVApproverListRequest" name="GetDVApproverListRequest"/>
|
||||
|
||||
<wsdl:output message="impl:GetDVApproverListResponse" name="GetDVApproverListResponse"/>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetApproverList">
|
||||
|
||||
<wsdl:input message="impl:GetApproverListRequest" name="GetApproverListRequest"/>
|
||||
|
||||
<wsdl:output message="impl:GetApproverListResponse" name="GetApproverListResponse"/>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetOrderByOrderID">
|
||||
|
||||
<wsdl:input message="impl:GetOrderByOrderIDRequest" name="GetOrderByOrderIDRequest"/>
|
||||
|
||||
<wsdl:output message="impl:GetOrderByOrderIDResponse" name="GetOrderByOrderIDResponse"/>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetModifiedOrders">
|
||||
|
||||
<wsdl:input message="impl:GetModifiedOrdersRequest" name="GetModifiedOrdersRequest"/>
|
||||
|
||||
<wsdl:output message="impl:GetModifiedOrdersResponse" name="GetModifiedOrdersResponse"/>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetCertificateOrders">
|
||||
|
||||
<wsdl:input message="impl:GetCertificateOrdersRequest" name="GetCertificateOrdersRequest"/>
|
||||
|
||||
<wsdl:output message="impl:GetCertificateOrdersResponse" name="GetCertificateOrdersResponse"/>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetOrderByDataRange">
|
||||
|
||||
<wsdl:input message="impl:GetOrderByDataRangeRequest" name="GetOrderByDataRangeRequest"/>
|
||||
|
||||
<wsdl:output message="impl:GetOrderByDataRangeResponse" name="GetOrderByDataRangeResponse"/>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
</wsdl:portType>
|
||||
|
||||
<wsdl:binding name="GasQuerySoapBinding" type="impl:GasQuery">
|
||||
|
||||
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||
|
||||
<wsdl:operation name="GetDVApproverList">
|
||||
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
|
||||
<wsdl:input name="GetDVApproverListRequest">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:input>
|
||||
|
||||
<wsdl:output name="GetDVApproverListResponse">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:output>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetApproverList">
|
||||
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
|
||||
<wsdl:input name="GetApproverListRequest">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:input>
|
||||
|
||||
<wsdl:output name="GetApproverListResponse">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:output>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetOrderByOrderID">
|
||||
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
|
||||
<wsdl:input name="GetOrderByOrderIDRequest">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:input>
|
||||
|
||||
<wsdl:output name="GetOrderByOrderIDResponse">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:output>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetModifiedOrders">
|
||||
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
|
||||
<wsdl:input name="GetModifiedOrdersRequest">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:input>
|
||||
|
||||
<wsdl:output name="GetModifiedOrdersResponse">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:output>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetCertificateOrders">
|
||||
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
|
||||
<wsdl:input name="GetCertificateOrdersRequest">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:input>
|
||||
|
||||
<wsdl:output name="GetCertificateOrdersResponse">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:output>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
<wsdl:operation name="GetOrderByDataRange">
|
||||
|
||||
<wsdlsoap:operation soapAction=""/>
|
||||
|
||||
<wsdl:input name="GetOrderByDataRangeRequest">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:input>
|
||||
|
||||
<wsdl:output name="GetOrderByDataRangeResponse">
|
||||
|
||||
<wsdlsoap:body use="literal"/>
|
||||
|
||||
</wsdl:output>
|
||||
|
||||
</wsdl:operation>
|
||||
|
||||
</wsdl:binding>
|
||||
|
||||
<wsdl:service name="GasQueryService">
|
||||
|
||||
<wsdl:port binding="impl:GasQuerySoapBinding" name="GasQuery">
|
||||
|
||||
<wsdlsoap:address location="http://localhost:8080/services/GasQuery"/>
|
||||
|
||||
</wsdl:port>
|
||||
|
||||
</wsdl:service>
|
||||
|
||||
</wsdl:definitions>
|
||||
@@ -6,7 +6,7 @@
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
||||
>
|
||||
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/">
|
||||
<types>
|
||||
<xsd:schema targetNamespace="urn:Test">
|
||||
<xsd:simpleType name="testSimpleTypeList">
|
||||
@@ -67,7 +67,7 @@
|
||||
<xsd:documentation>ComplexType Test</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:all>
|
||||
<xsd:element name="Test1" type="xsd:string" />
|
||||
<xsd:element name="Test1" type="xsd:string" maxOccurs="1"/>
|
||||
<xsd:element name="Test2" type="xsd:string" minOccurs="1" />
|
||||
</xsd:all>
|
||||
</xsd:complexType>
|
||||
@@ -193,6 +193,14 @@
|
||||
</xsd:complexType>
|
||||
|
||||
|
||||
<xsd:element name="testElementEmptyComplex">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence/>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:complexType name="emptyComplexType">
|
||||
<xsd:sequence></xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
||||
</types>
|
||||
<message name="testChoice">
|
||||
@@ -215,6 +223,11 @@
|
||||
<message name="testHeaderResponse">
|
||||
<part name="testAll" element="tns:testElementString"/>
|
||||
</message>
|
||||
|
||||
<message name="testEmptyComplex">
|
||||
<part name="test" element="tns:testElementEmptyComplex"/>
|
||||
</message>
|
||||
|
||||
<portType name="testPort">
|
||||
<operation name="test">
|
||||
<documentation>
|
||||
@@ -245,6 +258,10 @@
|
||||
<output message="tns:testMultiPartWarning"/>
|
||||
</operation>
|
||||
|
||||
<operation name="testEmptyComplex">
|
||||
<input message="tns:testEmptyComplex"/>
|
||||
<output message="tns:testEmptyComplex"/>
|
||||
</operation>
|
||||
</portType>
|
||||
|
||||
<binding type="tns:testPort" name="testBinding">
|
||||
@@ -287,11 +304,71 @@
|
||||
<soap:body use="literal"/>
|
||||
</output>
|
||||
</operation>
|
||||
<operation name="testEmptyComplex">
|
||||
<soap:operation soapAction="testEmptyComplex"/>
|
||||
<input>
|
||||
<soap:body use="literal"/>
|
||||
</input>
|
||||
<output>
|
||||
<soap:body use="literal"/>
|
||||
</output>
|
||||
</operation>
|
||||
|
||||
</binding>
|
||||
<service name="testService">
|
||||
<wsdl:binding name="HTTPBinding" type="tns:testPort">
|
||||
<http:binding verb="GET" />
|
||||
<wsdl:operation name="test">
|
||||
<http:operation location="/test" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:content type="text/xml" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="testHeader">
|
||||
<http:operation location="/testHeader" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:content type="text/xml" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="testChoice">
|
||||
<http:operation location="/testChoice" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:content type="text/xml" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="testMultiPartWarning">
|
||||
<http:operation location="/testMultiPartWarning" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:content type="text/xml" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
<wsdl:operation name="testEmptyComplex">
|
||||
<http:operation location="/testEmptyComplex" />
|
||||
<wsdl:input>
|
||||
<http:urlEncoded />
|
||||
</wsdl:input>
|
||||
<wsdl:output>
|
||||
<mime:content type="text/xml" />
|
||||
</wsdl:output>
|
||||
</wsdl:operation>
|
||||
</wsdl:binding>
|
||||
<service name="testService">
|
||||
<port name="testPort" binding="tns:testBinding">
|
||||
<soap:address location="http://127.0.0.1/testPort" />
|
||||
</port>
|
||||
</service>
|
||||
<wsdl:port name="HTTPPort" binding="tns:HTTPBinding">
|
||||
<http:address location="http://www.example.org/"></http:address>
|
||||
</wsdl:port>
|
||||
</service>
|
||||
</definitions>
|
||||
|
||||
297
t/acceptance/wsdl/generator_test_dot_names.wsdl
Normal file
297
t/acceptance/wsdl/generator_test_dot_names.wsdl
Normal file
@@ -0,0 +1,297 @@
|
||||
<?xml version="1.0"?>
|
||||
<definitions name="Test"
|
||||
targetNamespace="urn:Test"
|
||||
xmlns:tns="urn:Test"
|
||||
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
||||
>
|
||||
<types>
|
||||
<xsd:schema targetNamespace="urn:Test">
|
||||
<xsd:simpleType name="testSimpleTypeList">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
SimpleType: List with an integer (length 2)
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:list itemType="xsd:int">
|
||||
<xsd:length value="2"/>
|
||||
</xsd:list>
|
||||
</xsd:simpleType>
|
||||
|
||||
<xsd:simpleType name="testSimpleTypeListAtomic">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
SimpleType: List with an integer (length 2)
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:list>
|
||||
<xsd:simpleType>
|
||||
<xsd:restriction base="xsd:int"></xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
</xsd:list>
|
||||
</xsd:simpleType>
|
||||
|
||||
|
||||
<xsd:simpleType name="testRestriction">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
SimpleType: Integer between 1 and 9 (Exclusive constrains)
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:restriction base="xsd:int">
|
||||
<xsd:minExclusive value="0"/>
|
||||
<xsd:maxExclusive value="10"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
|
||||
<xsd:simpleType name="testRestrictionAtomicType">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
SimpleType: Integer between 1 and 9 (Exclusive constrains)
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:restriction>
|
||||
<xsd:simpleType>
|
||||
<xsd:restriction base="xsd:int">
|
||||
<xsd:minExclusive value="0"/>
|
||||
<xsd:maxExclusive value="10"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeAll">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>ComplexType Test</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:all>
|
||||
<xsd:element name="Test1" type="xsd:string" />
|
||||
<xsd:element name="Test2" type="xsd:string" minOccurs="1" />
|
||||
</xsd:all>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeRestriction">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>ComplexType Test</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:complexContent>
|
||||
<xsd:restriction base="tns:testComplexTypeAll">
|
||||
<xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
|
||||
<xsd:element name="Test2" type="xsd:string" minOccurs="1" />
|
||||
</xsd:restriction>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeExtension">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>complexType extension test</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:complexContent>
|
||||
<xsd:extension base="tns:testComplexTypeAll">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Test1" type="xsd:string" />
|
||||
<xsd:element name="Test2" type="xsd:string" minOccurs="1"/>
|
||||
<xsd:element name="Test3" type="xsd:string" minOccurs="1"/>
|
||||
</xsd:sequence>
|
||||
</xsd:extension>
|
||||
</xsd:complexContent>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeChoice">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
ComplexType Test
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:choice>
|
||||
<xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
|
||||
<xsd:element name="Test2" type="xsd:string" maxOccurs="1"/>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeSequence">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
ComplexType Test
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
|
||||
<xsd:element name="Test2" type="xsd:string" maxOccurs="1"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="testComplexTypeSequence2">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
ComplexType Test
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="Test1" type="xsd:string" minOccurs="1"/>
|
||||
<xsd:element name="Test2" type="tns:testComplexTypeSequence" maxOccurs="1"/>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
|
||||
<xsd:element name="testElementString" type="xsd:string" />
|
||||
<xsd:element name="testElementInt" type="xsd:int" />
|
||||
<xsd:element name="testElementRefInt" ref="tns:testElementInt" />
|
||||
<xsd:element name="testElementSimpleTypeList" type="tns:testSimpleTypeList"/>
|
||||
<xsd:element name="testElementComplexTypeAll" type="tns:testComplexTypeAll"/>
|
||||
<xsd:element name="testElementComplexTypeSequence" type="tns:testComplexTypeSequence"/>
|
||||
|
||||
<xsd:element name="testElementAtomicSimpleTypeRestriction">
|
||||
<xsd:simpleType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation> SimpleType: Integer between 1 and 9
|
||||
(Inclusive constraints) </xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:restriction base="xsd:int" minInclusive="1"
|
||||
maxInclusive="9"/>
|
||||
</xsd:simpleType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="testElementAtomicComplexTypeAll">
|
||||
<xsd:complexType>
|
||||
<xsd:annotation>
|
||||
<xsd:documentation> SimpleType: Integer between 1 and 9
|
||||
(Inclusive constraints) </xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:all>
|
||||
<xsd:element name="test1" type="int"/>
|
||||
<xsd:element name="test2" type="xsd:string"/>
|
||||
</xsd:all>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="Header" type="tns:testComplexTypeSequence"/>
|
||||
<xsd:element name="testHeader" type="tns:testComplexTypeSequence"/>
|
||||
<xsd:element name="testChoice" type="tns:testComplexTypeChoice"/>
|
||||
|
||||
|
||||
<xsd:complexType name="testComplexTypeElementAtomicSimpleType">
|
||||
<xsd:sequence>
|
||||
<xsd:element name="testString" type="xsd:string" minOccurs="0"/>
|
||||
<xsd:element name="testAtomicSimpleTypeElement" minOccurs="0">
|
||||
<xsd:simpleType>
|
||||
<xsd:restriction base="xsd:decimal">
|
||||
<xsd:minInclusive value="0"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
</xsd:element>
|
||||
<xsd:element name="testAtomicSimpleTypeElement2" minOccurs="0">
|
||||
<xsd:simpleType>
|
||||
<xsd:restriction base="xsd:decimal">
|
||||
<xsd:minInclusive value="0"/>
|
||||
</xsd:restriction>
|
||||
</xsd:simpleType>
|
||||
</xsd:element>
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
|
||||
|
||||
</xsd:schema>
|
||||
</types>
|
||||
<message name="testChoice">
|
||||
<part name="parameters" element="tns:testChoice"/>
|
||||
</message>
|
||||
<message name="testRequest">
|
||||
<part name="testAll" element="tns:testElementString"/>
|
||||
</message>
|
||||
<message name="testResponse">
|
||||
<part name="testAll" element="tns:testElementString"/>
|
||||
</message>
|
||||
<message name="testMultiPartWarning">
|
||||
<part name="testAll" element="tns:testElementString"/>
|
||||
<part name="parameters" element="tns:testChoice"/>
|
||||
</message>
|
||||
<message name="testHeaderRequest">
|
||||
<part name="testBody" element="tns:testHeader"/>
|
||||
<part name="testHeader" element="tns:Header"/>
|
||||
</message>
|
||||
<message name="testHeaderResponse">
|
||||
<part name="testAll" element="tns:testElementString"/>
|
||||
</message>
|
||||
<portType name="testPort">
|
||||
<operation name="test">
|
||||
<documentation>
|
||||
Test-Methode
|
||||
</documentation>
|
||||
<input message="tns:testRequest"/>
|
||||
<output message="tns:testResponse"/>
|
||||
</operation>
|
||||
<operation name="testHeader">
|
||||
<documentation>
|
||||
Test-Methode
|
||||
</documentation>
|
||||
<input message="tns:testHeaderRequest"/>
|
||||
<output message="tns:testHeaderResponse"/>
|
||||
</operation>
|
||||
<operation name="testChoice">
|
||||
<documentation>
|
||||
Test-Methode
|
||||
</documentation>
|
||||
<input message="tns:testChoice"/>
|
||||
<output message="tns:testChoice"/>
|
||||
</operation>
|
||||
<operation name="testMultiPartWarning">
|
||||
<documentation>
|
||||
Test-Methode
|
||||
</documentation>
|
||||
<input message="tns:testMultiPartWarning"/>
|
||||
<output message="tns:testMultiPartWarning"/>
|
||||
</operation>
|
||||
|
||||
</portType>
|
||||
|
||||
<binding type="tns:testPort" name="testBinding">
|
||||
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
||||
<operation name="testChoice">
|
||||
<soap:operation soapAction="testChoice" style="document"/>
|
||||
<input>
|
||||
<soap:body use="literal"/>
|
||||
</input>
|
||||
<output>
|
||||
<soap:body use="literal"/>
|
||||
</output>
|
||||
</operation>
|
||||
|
||||
<operation name="test">
|
||||
<soap:operation soapAction="test" style="document"/>
|
||||
<input>
|
||||
<soap:body use="literal"/>
|
||||
</input>
|
||||
<output>
|
||||
<soap:body use="literal"/>
|
||||
</output>
|
||||
</operation>
|
||||
<operation name="testHeader">
|
||||
<soap:operation soapAction="testHeader"/>
|
||||
<input>
|
||||
<soap:body use="literal" parts="tns:testBody"/>
|
||||
<soap:header use="literal" part="tns:testHeader" message="tns:testHeaderRequest"/>
|
||||
</input>
|
||||
<output>
|
||||
<soap:body use="literal"/>
|
||||
</output>
|
||||
</operation>
|
||||
<operation name="testMultiPartWarning">
|
||||
<soap:operation soapAction="testHeader"/>
|
||||
<input>
|
||||
<soap:body use="literal"/>
|
||||
</input>
|
||||
<output>
|
||||
<soap:body use="literal"/>
|
||||
</output>
|
||||
</operation>
|
||||
|
||||
</binding>
|
||||
<service name="My.SOAP.testService">
|
||||
<port name="My.SOAP.testPort" binding="tns:testBinding">
|
||||
<soap:address location="http://127.0.0.1/testPort" />
|
||||
</port>
|
||||
</service>
|
||||
</definitions>
|
||||
@@ -81,4 +81,68 @@ __PACKAGE__->_factory(
|
||||
|
||||
__PACKAGE__->__set_name('MyAtomicComplexTypeElement');
|
||||
|
||||
package MyTestAttr;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Attribute
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
package MyElementAttrs;
|
||||
|
||||
use strict;
|
||||
use SOAP::WSDL::XSD::Typelib::Element;
|
||||
use SOAP::WSDL::XSD::Typelib::ComplexType;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||
use base (
|
||||
'SOAP::WSDL::XSD::Typelib::Element',
|
||||
'SOAP::WSDL::XSD::Typelib::ComplexType',
|
||||
);
|
||||
{
|
||||
my %test_of :ATTR(:get<test>);
|
||||
my %test2_of :ATTR(:get<test2>);
|
||||
|
||||
sub get_xmlns { 'urn:Test' };
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(test test2) ],
|
||||
{
|
||||
test => \%test_of,
|
||||
test2 => \%test2_of,
|
||||
},
|
||||
{
|
||||
# this is the <element ref="" variant....
|
||||
test => 'MyTestElement',
|
||||
test2 => 'MyTestElement2',
|
||||
},
|
||||
);
|
||||
}
|
||||
__PACKAGE__->__set_name('MyElementAttrs');
|
||||
|
||||
package MyElementAttrs::_ATTR;
|
||||
|
||||
use strict;
|
||||
use SOAP::WSDL::XSD::Typelib::ComplexType;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::AttributeSet
|
||||
);
|
||||
{
|
||||
my %test_of :ATTR(:get<test>);
|
||||
my %test2_of :ATTR(:get<test2>);
|
||||
|
||||
sub get_xmlns { 'urn:Test' };
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(test test2) ],
|
||||
{
|
||||
test => \%test_of,
|
||||
test2 => \%test2_of,
|
||||
},
|
||||
{
|
||||
# this is the <element ref="" variant....
|
||||
test => 'MyTestAttr',
|
||||
test2 => 'MyTestAttr',
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
Reference in New Issue
Block a user