Compare commits

..

2 Commits

Author SHA1 Message Date
Martin Kutter
874251225f import SOAP-WSDL 2.00_29 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  2.00_29
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00_29.tar.gz
2009-12-12 19:48:17 -08:00
Martin Kutter
2bad767211 import SOAP-WSDL 1.27 from CPAN
git-cpan-module:   SOAP-WSDL
git-cpan-version:  1.27
git-cpan-authorid: MKUTTER
git-cpan-file:     authors/id/M/MK/MKUTTER/SOAP-WSDL-1.27.tar.gz
2009-12-12 19:48:16 -08:00
55 changed files with 2318 additions and 465 deletions

View File

@@ -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
View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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') },
};

View File

@@ -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>

View File

@@ -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({

View File

@@ -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";

View File

@@ -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";

View File

@@ -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 $

View File

@@ -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

View File

@@ -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

View File

@@ -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 );

View File

@@ -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 %]

View File

@@ -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 );

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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 !

View File

@@ -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

View 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;

View File

@@ -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<()>);

View 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;

View 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;

View File

@@ -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 {

View File

@@ -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

View File

@@ -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
View 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.

View File

@@ -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__

View File

@@ -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

View File

@@ -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
View 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
View 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';

View File

@@ -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';

View File

@@ -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;
};
};
};

View 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();

View File

@@ -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();

View 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";

View File

@@ -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';

View 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="};

View File

@@ -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';

View File

@@ -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__

View File

@@ -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();

View File

@@ -20,5 +20,5 @@ is $obj->serialize, '&amp; &quot;Aber&quot; &lt;test&gt;'
, 'escape text on serialization';
is $obj->serialize({ name => 'test'})
, '<test >&amp; &quot;Aber&quot; &lt;test&gt;</test >'
, '<test>&amp; &quot;Aber&quot; &lt;test&gt;</test>'
, 'Serialization with name';

View File

@@ -19,5 +19,5 @@ is $obj->serialize(), '&amp; &quot;Aber&quot; &lt;test&gt;'
, 'escape text on serialization';
is $obj->serialize({ name => 'test'})
, '<test >&amp; &quot;Aber&quot; &lt;test&gt;</test >'
, '<test>&amp; &quot;Aber&quot; &lt;test&gt;</test>'
, 'Serialization with name';

View File

@@ -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'

View File

@@ -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');

View 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>

View 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>

View File

@@ -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>

View 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>

View File

@@ -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;