Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3cfeebae54 |
@@ -5,7 +5,7 @@ $build = Module::Build->new(
|
|||||||
create_makefile_pl => 'passthrough',
|
create_makefile_pl => 'passthrough',
|
||||||
dist_abstract => 'SOAP with WSDL support',
|
dist_abstract => 'SOAP with WSDL support',
|
||||||
dist_name => 'SOAP-WSDL',
|
dist_name => 'SOAP-WSDL',
|
||||||
dist_version => '2.00_25',
|
dist_version => '2.00_26',
|
||||||
module_name => 'SOAP::WSDL',
|
module_name => 'SOAP::WSDL',
|
||||||
license => 'artistic',
|
license => 'artistic',
|
||||||
requires => {
|
requires => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Release notes for SOAP::WSDL 2.00_24
|
Release notes for SOAP::WSDL 2.00_26
|
||||||
-------
|
-------
|
||||||
|
|
||||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
I'm proud to present a new pre-release version of SOAP::WSDL.
|
||||||
@@ -34,6 +34,23 @@ Features:
|
|||||||
|
|
||||||
The following changes have been made:
|
The following changes have been made:
|
||||||
|
|
||||||
|
2.00_26
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1843195 ] t/013_complexType.t still requires Class::Std::Storable
|
||||||
|
* [ 1843590 ] Tests broken on Cygwin
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Added examples
|
||||||
|
* Added Content-length header to CGI output
|
||||||
|
|
||||||
2.00_25
|
2.00_25
|
||||||
---
|
---
|
||||||
WARNING: INCOMPATIBLE CHANGE:
|
WARNING: INCOMPATIBLE CHANGE:
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
benchmark/01_expat.t
|
benchmark/01_expat.t
|
||||||
benchmark/hello.pl
|
benchmark/hello.pl
|
||||||
|
benchmark/person.pl
|
||||||
|
benchmark/person.xml
|
||||||
benchmark/XSD/01_anyType.t
|
benchmark/XSD/01_anyType.t
|
||||||
benchmark/XSD/02_anySimpleType.t
|
benchmark/XSD/02_anySimpleType.t
|
||||||
benchmark/XSD/03_string.t
|
benchmark/XSD/03_string.t
|
||||||
@@ -7,6 +9,7 @@ bin/wsdl2perl.pl
|
|||||||
Build.PL
|
Build.PL
|
||||||
Changes
|
Changes
|
||||||
example/cgi-bin/helloworld.pl
|
example/cgi-bin/helloworld.pl
|
||||||
|
example/cgi-bin/person.pl
|
||||||
example/fortune.pl
|
example/fortune.pl
|
||||||
example/genericbarcode.pl
|
example/genericbarcode.pl
|
||||||
example/hello.pl
|
example/hello.pl
|
||||||
@@ -25,6 +28,8 @@ example/lib/MyElements/GetSpecificCookieResponse.pm
|
|||||||
example/lib/MyElements/GetWeather.pm
|
example/lib/MyElements/GetWeather.pm
|
||||||
example/lib/MyElements/GetWeatherResponse.pm
|
example/lib/MyElements/GetWeatherResponse.pm
|
||||||
example/lib/MyElements/int.pm
|
example/lib/MyElements/int.pm
|
||||||
|
example/lib/MyElements/ListPerson.pm
|
||||||
|
example/lib/MyElements/ListPersonResponse.pm
|
||||||
example/lib/MyElements/readNodeCount.pm
|
example/lib/MyElements/readNodeCount.pm
|
||||||
example/lib/MyElements/readNodeCountResponse.pm
|
example/lib/MyElements/readNodeCountResponse.pm
|
||||||
example/lib/MyElements/sayHello.pm
|
example/lib/MyElements/sayHello.pm
|
||||||
@@ -34,13 +39,25 @@ example/lib/MyInterfaces/BarCode/BarCodeSoap.pm
|
|||||||
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
||||||
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
||||||
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
|
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
|
||||||
|
example/lib/MyInterfaces/TestService/TestPort.pm
|
||||||
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
|
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
|
||||||
|
example/lib/MyServer/TestService/TestPort.pm
|
||||||
example/lib/MyTypemaps/BarCode.pm
|
example/lib/MyTypemaps/BarCode.pm
|
||||||
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
||||||
example/lib/MyTypemaps/GlobalWeather.pm
|
example/lib/MyTypemaps/GlobalWeather.pm
|
||||||
example/lib/MyTypemaps/HelloWorld.pm
|
example/lib/MyTypemaps/HelloWorld.pm
|
||||||
|
example/lib/MyTypemaps/TestService.pm
|
||||||
|
example/lib/MyTypes/Address.pm
|
||||||
|
example/lib/MyTypes/ArrayOfContract.pm
|
||||||
|
example/lib/MyTypes/ArrayOfPerson.pm
|
||||||
|
example/lib/MyTypes/Contract.pm
|
||||||
|
example/lib/MyTypes/Person.pm
|
||||||
|
example/lib/MyTypes/PersonID.pm
|
||||||
|
example/lib/MyTypes/PhoneNumber.pm
|
||||||
example/lib/MyTypes/test2.pm
|
example/lib/MyTypes/test2.pm
|
||||||
example/lib/MyTypes/testExtended.pm
|
example/lib/MyTypes/testExtended.pm
|
||||||
|
example/person.pl
|
||||||
|
example/person_compile.pl
|
||||||
example/visitor/visitor.pl
|
example/visitor/visitor.pl
|
||||||
example/weather.pl
|
example/weather.pl
|
||||||
example/weather_wsdl.pl
|
example/weather_wsdl.pl
|
||||||
@@ -48,6 +65,7 @@ example/wsdl/11_helloworld.wsdl
|
|||||||
example/wsdl/FortuneCookie.xml
|
example/wsdl/FortuneCookie.xml
|
||||||
example/wsdl/genericbarcode.xml
|
example/wsdl/genericbarcode.xml
|
||||||
example/wsdl/globalweather.xml
|
example/wsdl/globalweather.xml
|
||||||
|
example/wsdl/Person.wsdl
|
||||||
HACKING
|
HACKING
|
||||||
lib/SOAP/WSDL.pm
|
lib/SOAP/WSDL.pm
|
||||||
lib/SOAP/WSDL/Base.pm
|
lib/SOAP/WSDL/Base.pm
|
||||||
@@ -250,6 +268,7 @@ t/acceptance/wsdl/email_account.wsdl
|
|||||||
t/acceptance/wsdl/generator_test.wsdl
|
t/acceptance/wsdl/generator_test.wsdl
|
||||||
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
||||||
t/acceptance/wsdl/message_gateway.wsdl
|
t/acceptance/wsdl/message_gateway.wsdl
|
||||||
|
t/contributed.wsdl
|
||||||
t/Expat/01_expat.t
|
t/Expat/01_expat.t
|
||||||
t/Expat/03_wsdl.t
|
t/Expat/03_wsdl.t
|
||||||
t/lib/MyComplexType.pm
|
t/lib/MyComplexType.pm
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: SOAP-WSDL
|
name: SOAP-WSDL
|
||||||
version: 2.00_25
|
version: 2.00_26
|
||||||
author:
|
author:
|
||||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||||
abstract: SOAP with WSDL support
|
abstract: SOAP with WSDL support
|
||||||
@@ -126,7 +126,7 @@ provides:
|
|||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::Server::CGI:
|
SOAP::WSDL::Server::CGI:
|
||||||
file: lib/SOAP/WSDL/Server/CGI.pm
|
file: lib/SOAP/WSDL/Server/CGI.pm
|
||||||
version: 2.00_25
|
version: 2.00_26
|
||||||
SOAP::WSDL::Service:
|
SOAP::WSDL::Service:
|
||||||
file: lib/SOAP/WSDL/Service.pm
|
file: lib/SOAP/WSDL/Service.pm
|
||||||
SOAP::WSDL::Transport::HTTP:
|
SOAP::WSDL::Transport::HTTP:
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
use lib '../lib';
|
||||||
|
use lib '../example/lib';
|
||||||
|
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 {
|
||||||
|
# warn MyData::xml;
|
||||||
|
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::WSDL11;
|
||||||
|
use XML::Simple;
|
||||||
|
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
|
||||||
|
use SOAP::Lite;
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
my $tester = XML::Compile::SOAP::Tester->new();
|
||||||
|
|
||||||
|
my $action = pack_type 'http://example.org', 'ListPerson';
|
||||||
|
sub ListPerson(@) { MyData::xml };
|
||||||
|
my $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl');
|
||||||
|
# $tester->fromWSDL($wsdl);
|
||||||
|
$tester->actionCallback($action, \&ListPerson);
|
||||||
|
|
||||||
|
# I have to lookup the methods from the WSDL
|
||||||
|
my $call = $compile->compileClient('ListPerson');
|
||||||
|
|
||||||
|
# I have to lookup the parameters from the WSDL
|
||||||
|
my $result = $call->({ in => undef});
|
||||||
|
#use Data::Dumper;
|
||||||
|
#print Dumper $result;
|
||||||
|
|
||||||
|
my $deserializer = SOAP::Deserializer->new();
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
$result = $soap->ListPerson({});
|
||||||
|
#print $result;
|
||||||
|
#exit;
|
||||||
|
|
||||||
|
my @data = ();
|
||||||
|
my $n = 0;
|
||||||
|
print "Benchmark conducted with
|
||||||
|
SOAP::Lite - $SOAP::Lite::VERSION
|
||||||
|
SOAP::WSDL - $SOAP::WSDL::Client::VERSION
|
||||||
|
XML::Compile::SOAP - $XML::Compile::SOAP::VERSION
|
||||||
|
XML::Simple - $XML::Simple::VERSION
|
||||||
|
|
||||||
|
Benchmark $n: Push result on list
|
||||||
|
";
|
||||||
|
$n++;
|
||||||
|
print "Benchmark $n: Store result in private variable and destroy it\n";
|
||||||
|
cmpthese 100, {
|
||||||
|
'XML::Simple' => sub { my $result = XMLin( MyData::xml() )},
|
||||||
|
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
|
||||||
|
'XML::Compile::SOAP' => sub { my $result = $call->() },
|
||||||
|
'SOAP::Lite' => sub { my $result = $deserializer->deserialize( MyData::xml() )}
|
||||||
|
};
|
||||||
|
|
||||||
|
$n++;
|
||||||
|
cmpthese 100, {
|
||||||
|
'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||||
|
'XML::Compile::SOAP' => sub { push @data, $call->() },
|
||||||
|
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||||
|
};
|
||||||
|
|
||||||
|
@data = ();
|
||||||
|
print "Benchmark $n: Play it again, Sam\n";
|
||||||
|
|
||||||
|
cmpthese 100, {
|
||||||
|
'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||||
|
'XML::Compile::SOAP' => sub { push @data, $call->() },
|
||||||
|
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||||
|
};
|
||||||
|
|
||||||
@@ -0,0 +1,437 @@
|
|||||||
|
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body>
|
||||||
|
<ListPersonResponse xmlns="http://www.example.org/benchmark/">
|
||||||
|
<out>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>1</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation0</Salutation>
|
||||||
|
<Name>Name0</Name>
|
||||||
|
<GivenName>Martin</GivenName>
|
||||||
|
<DateOfBirth>1970-01-01</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 0</Street>
|
||||||
|
<ZIP>00000</ZIP>
|
||||||
|
<City>City0</City>
|
||||||
|
<Country>Country0</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 23</Street>
|
||||||
|
<ZIP>12345</ZIP>
|
||||||
|
<City>SomeCity</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++499131123456</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++49150123456</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>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
</out>
|
||||||
|
</ListPersonResponse>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
||||||
Executable
+83
@@ -0,0 +1,83 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use lib qw(../lib ../../lib);
|
||||||
|
use MyElements::ListPersonResponse;
|
||||||
|
use MyServer::TestService::TestPort;
|
||||||
|
my $server = MyServer::TestService::TestPort->new({
|
||||||
|
dispatch_to => 'main',
|
||||||
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
|
});
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|
||||||
|
# do something with body and header...
|
||||||
|
|
||||||
|
my %person = (
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => 1, # int
|
||||||
|
},
|
||||||
|
Salutation => 'Salutation0', # string
|
||||||
|
Name => 'Name0', # string
|
||||||
|
GivenName => 'Martin', # string
|
||||||
|
DateOfBirth => '1970-01-01', # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => 'Street 0', # string
|
||||||
|
ZIP => '00000', # string
|
||||||
|
City => 'City0', # string
|
||||||
|
Country => 'Country0', # string
|
||||||
|
PhoneNumber => '++499131123456', # PhoneNumber
|
||||||
|
MobilePhoneNumber => '++49150123456', # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => 'Somestreet 23', # string
|
||||||
|
ZIP => '12345', # string
|
||||||
|
City => 'SomeCity', # string
|
||||||
|
Country => 'Germany', # string
|
||||||
|
PhoneNumber => '++499131123456', # PhoneNumber
|
||||||
|
MobilePhoneNumber => '++49150123456', # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => [
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100000, # long
|
||||||
|
ContractName => 'SomeContract0', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100001, # long
|
||||||
|
ContractName => 'SomeContract1', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100002, # long
|
||||||
|
ContractName => 'SomeContract2', # string
|
||||||
|
},
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => 100003, # long
|
||||||
|
ContractName => 'SomeContract3', # string
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
return MyElements::ListPersonResponse->new( {
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => [
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
{ %person },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
package MyElements::ListPerson;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('ListPerson');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %in_of :ATTR(:get<in>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
in
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
in => \%in_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
in => 'MyTypes::Person',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::ListPerson
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
ListPerson from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::ListPerson->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
in => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
package MyElements::ListPersonResponse;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('ListPersonResponse');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %out_of :ATTR(:get<out>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
out
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
out => \%out_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
out => 'MyTypes::ArrayOfPerson',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::ListPersonResponse
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
ListPersonResponse from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::ListPersonResponse->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package MyInterfaces::TestService::TestPort;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::TestService
|
||||||
|
if not MyTypemaps::TestService->can('get_class');
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
$_[0]->set_proxy('http://localhost:81/soap-wsdl-test/person.pl') if not $_[2]->{proxy};
|
||||||
|
$_[0]->set_class_resolver('MyTypemaps::TestService')
|
||||||
|
if not $_[2]->{class_resolver};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
die "ListPerson must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
|
return $self->SUPER::call({
|
||||||
|
operation => 'ListPerson',
|
||||||
|
soap_action => 'http://www.example.org/benchmark/ListPerson',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( MyElements::ListPerson )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
}, $body, $header);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
|
||||||
|
MyInterfaces::TestService::TestPort - SOAP Interface for the TestService Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
my $interface = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->ListPerson();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Interface for the TestService web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/person.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE TestService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port TestPort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Method synopsis is displayed with hash refs as parameters.
|
||||||
|
|
||||||
|
The commented class names in the method's parameters denote that objects
|
||||||
|
of the corresponding class can be passed instead of the marked hash ref.
|
||||||
|
|
||||||
|
You may pass any combination of objects, hash and list refs to these
|
||||||
|
methods, as long as you meet the structure.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head3 ListPerson
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$interface->ListPerson( {
|
||||||
|
in => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Mon Dec 3 22:20:49 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
package MyServer::TestService::TestPort;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::TestService
|
||||||
|
if not MyTypemaps::TestService->can('get_class');
|
||||||
|
|
||||||
|
my %transport_class_of :ATTR(:name<transport_class> :default<SOAP::WSDL::Server::CGI>);
|
||||||
|
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||||
|
my %dispatch_to :ATTR(:name<dispatch_to>);
|
||||||
|
|
||||||
|
my $action_map_ref = {
|
||||||
|
'http://www.example.org/benchmark/ListPerson' => 'ListPerson',
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
my ($self, $ident, $arg_ref) = @_;
|
||||||
|
eval "require $transport_class_of{ $ident }"
|
||||||
|
or die "Cannot load transport class $transport_class_of{ $ident }: $@";
|
||||||
|
$transport_of{ $ident } = $transport_class_of{ $ident }->new({
|
||||||
|
action_map_ref => $action_map_ref,
|
||||||
|
class_resolver => 'MyTypemaps::TestService',
|
||||||
|
dispatch_to => $dispatch_to{ $ident },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
sub handle {
|
||||||
|
$transport_of{ ${ $_[0] } }->handle();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyInterfaces::TestService::TestPort - SOAP Server Class for the TestService Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyServer::TestService::TestPort;
|
||||||
|
my $server = MyServer::TestService::TestPort->new({
|
||||||
|
dispatch_to => 'My::Handler::Class',
|
||||||
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
|
});
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Server handler for the TestService web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/person.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE TestService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port TestPort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=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
|
||||||
|
|
||||||
|
Your dispatch_to class has to implement the following methods:
|
||||||
|
|
||||||
|
The examples below serve as copy-and-paste prototypes to use in your
|
||||||
|
class.
|
||||||
|
|
||||||
|
=head3 ListPerson
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|
||||||
|
# do something with body and header...
|
||||||
|
|
||||||
|
return MyElements::ListPersonResponse->new( {
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Mon Dec 3 22:20:32 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package MyTypemaps::TestService;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
our $typemap_1 = {
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/Contracts' => 'MyTypes::ArrayOfContract',
|
||||||
|
'ListPerson/in/HomeAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress' => 'MyTypes::Address',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract' => 'MyTypes::Contract',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/HomeAddress' => 'MyTypes::Address',
|
||||||
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
|
'ListPerson/in/HomeAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPerson/in/WorkAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts' => 'MyTypes::ArrayOfContract',
|
||||||
|
'ListPerson/in/WorkAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in' => 'MyTypes::Person',
|
||||||
|
'ListPersonResponse/out/NewElement/GivenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement' => 'MyTypes::Person',
|
||||||
|
'ListPerson/in/PersonID/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'ListPerson/in/HomeAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/PersonID/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'ListPerson/in/HomeAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/GivenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/HomeAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPerson/in/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/PersonID' => 'MyTypes::PersonID',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out' => 'MyTypes::ArrayOfPerson',
|
||||||
|
'ListPerson/in/Contracts/Contract' => 'MyTypes::Contract',
|
||||||
|
'ListPersonResponse/out/NewElement/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/DateOfBirth' => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract/ContractName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
|
'ListPerson/in/Contracts/Contract/ContractName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse' => 'MyElements::ListPersonResponse',
|
||||||
|
'ListPersonResponse/out/NewElement/Salutation' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
|
'ListPerson' => 'MyElements::ListPerson',
|
||||||
|
'ListPerson/in/Salutation' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/PersonID' => 'MyTypes::PersonID',
|
||||||
|
'ListPerson/in/HomeAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress' => 'MyTypes::Address',
|
||||||
|
'ListPersonResponse/out/NewElement/DateOfBirth' => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
'ListPerson/in/WorkAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract/ContractID' => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
'ListPerson/in/Contracts/Contract/ContractID' => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
'ListPerson/in/WorkAddress' => 'MyTypes::Address'
|
||||||
|
};
|
||||||
|
;
|
||||||
|
|
||||||
|
sub get_class {
|
||||||
|
my $name = join '/', @{ $_[1] };
|
||||||
|
exists $typemap_1->{ $name } or die "Cannot resolve $name via " . __PACKAGE__;
|
||||||
|
return $typemap_1->{ $name };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypemaps::TestService; - typemap for ::TestService;
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package MyTypes::Address;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Street_of :ATTR(:get<Street>);
|
||||||
|
my %ZIP_of :ATTR(:get<ZIP>);
|
||||||
|
my %City_of :ATTR(:get<City>);
|
||||||
|
my %Country_of :ATTR(:get<Country>);
|
||||||
|
my %PhoneNumber_of :ATTR(:get<PhoneNumber>);
|
||||||
|
my %MobilePhoneNumber_of :ATTR(:get<MobilePhoneNumber>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Street
|
||||||
|
ZIP
|
||||||
|
City
|
||||||
|
Country
|
||||||
|
PhoneNumber
|
||||||
|
MobilePhoneNumber
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Street => \%Street_of,
|
||||||
|
ZIP => \%ZIP_of,
|
||||||
|
City => \%City_of,
|
||||||
|
Country => \%Country_of,
|
||||||
|
PhoneNumber => \%PhoneNumber_of,
|
||||||
|
MobilePhoneNumber => \%MobilePhoneNumber_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Street => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
ZIP => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
City => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
Country => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
PhoneNumber => 'MyTypes::PhoneNumber',
|
||||||
|
MobilePhoneNumber => 'MyTypes::PhoneNumber',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Address
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Address from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Street
|
||||||
|
ZIP
|
||||||
|
City
|
||||||
|
Country
|
||||||
|
PhoneNumber
|
||||||
|
MobilePhoneNumber
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
package MyTypes::ArrayOfContract;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Contract_of :ATTR(:get<Contract>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Contract
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Contract => \%Contract_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Contract => 'MyTypes::Contract',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::ArrayOfContract
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
ArrayOfContract from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Contract
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package MyTypes::ArrayOfPerson;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %NewElement_of :ATTR(:get<NewElement>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
NewElement
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
NewElement => \%NewElement_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewElement => 'MyTypes::Person',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::ArrayOfPerson
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
ArrayOfPerson from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
NewElement
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package MyTypes::Contract;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %ContractID_of :ATTR(:get<ContractID>);
|
||||||
|
my %ContractName_of :ATTR(:get<ContractName>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
ContractID
|
||||||
|
ContractName
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
ContractID => \%ContractID_of,
|
||||||
|
ContractName => \%ContractName_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ContractID => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
ContractName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Contract
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Contract from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
ContractID
|
||||||
|
ContractName
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package MyTypes::Person;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %PersonID_of :ATTR(:get<PersonID>);
|
||||||
|
my %Salutation_of :ATTR(:get<Salutation>);
|
||||||
|
my %Name_of :ATTR(:get<Name>);
|
||||||
|
my %GivenName_of :ATTR(:get<GivenName>);
|
||||||
|
my %DateOfBirth_of :ATTR(:get<DateOfBirth>);
|
||||||
|
my %HomeAddress_of :ATTR(:get<HomeAddress>);
|
||||||
|
my %WorkAddress_of :ATTR(:get<WorkAddress>);
|
||||||
|
my %Contracts_of :ATTR(:get<Contracts>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
PersonID
|
||||||
|
Salutation
|
||||||
|
Name
|
||||||
|
GivenName
|
||||||
|
DateOfBirth
|
||||||
|
HomeAddress
|
||||||
|
WorkAddress
|
||||||
|
Contracts
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
PersonID => \%PersonID_of,
|
||||||
|
Salutation => \%Salutation_of,
|
||||||
|
Name => \%Name_of,
|
||||||
|
GivenName => \%GivenName_of,
|
||||||
|
DateOfBirth => \%DateOfBirth_of,
|
||||||
|
HomeAddress => \%HomeAddress_of,
|
||||||
|
WorkAddress => \%WorkAddress_of,
|
||||||
|
Contracts => \%Contracts_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PersonID => 'MyTypes::PersonID',
|
||||||
|
Salutation => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
Name => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
GivenName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
DateOfBirth => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
HomeAddress => 'MyTypes::Address',
|
||||||
|
WorkAddress => 'MyTypes::Address',
|
||||||
|
Contracts => 'MyTypes::ArrayOfContract',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Person
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Person from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
PersonID
|
||||||
|
Salutation
|
||||||
|
Name
|
||||||
|
GivenName
|
||||||
|
DateOfBirth
|
||||||
|
HomeAddress
|
||||||
|
WorkAddress
|
||||||
|
Contracts
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package MyTypes::PersonID;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %ID_of :ATTR(:get<ID>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
ID
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
ID => \%ID_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::PersonID
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
PersonID from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
ID
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::PhoneNumber;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::PhoneNumber
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
PhoneNumber from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
use lib 'lib';
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
$soap->outputxml(1);
|
||||||
|
my $result = $soap->ListPerson({});
|
||||||
|
|
||||||
|
# print "Found " . scalar @{ $result->get_out->get_NewElement } . " persons\n";
|
||||||
|
|
||||||
|
print $result;
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use XML::Compile::WSDL11;
|
||||||
|
use XML::Compile::Transport::SOAPHTTP;
|
||||||
|
|
||||||
|
my $wsdl = XML::Compile::WSDL11->new('wsdl/Person.wsdl');
|
||||||
|
|
||||||
|
# I have to lookup the methods from the WSDL
|
||||||
|
my $call = $wsdl->compileClient('ListPerson');
|
||||||
|
|
||||||
|
# I have to lookup the parameters from the WSDL
|
||||||
|
my $result = $call->({ in => undef});
|
||||||
|
|
||||||
|
die "Error calling soap method" if not defined $result;
|
||||||
|
|
||||||
|
# I have to lookup the output parameters from the WSDL - or try Dumper
|
||||||
|
#use Data::Dumper;
|
||||||
|
#print Dumper $result;
|
||||||
|
|
||||||
|
print "Found ", scalar @{ $result->{ parameters }->{ out }->{ seq_NewElement }->[0]->{ NewElement } } , " persons\n";
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions name="benchmark" targetNamespace="http://www.example.org/benchmark/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.example.org/benchmark/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
|
||||||
|
<wsdl:types><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/benchmark/">
|
||||||
|
<xsd:element name="ListPerson">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="in" type="tns:Person" maxOccurs="1" minOccurs="0"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="ListPersonResponse">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="out" type="tns:ArrayOfPerson"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:complexType name="Person">
|
||||||
|
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="PersonID" type="tns:PersonID"></xsd:element>
|
||||||
|
<xsd:element name="Salutation" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="Name" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="GivenName" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="DateOfBirth" type="xsd:date"></xsd:element>
|
||||||
|
<xsd:element name="HomeAddress" type="tns:Address"
|
||||||
|
maxOccurs="1" minOccurs="1">
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="WorkAddress" type="tns:Address"
|
||||||
|
maxOccurs="1" minOccurs="0">
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="Contracts" type="tns:ArrayOfContract"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:simpleType name="PhoneNumber">
|
||||||
|
<xsd:restriction base="xsd:string">
|
||||||
|
</xsd:restriction>
|
||||||
|
</xsd:simpleType>
|
||||||
|
|
||||||
|
<xsd:complexType name="ArrayOfPerson">
|
||||||
|
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xsd:element name="NewElement" type="tns:Person" maxOccurs="unbounded" minOccurs="0"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="PersonID">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="ID" type="xsd:int"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="Address">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Street" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="ZIP" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="City" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="Country" type="xsd:string"></xsd:element>
|
||||||
|
<xsd:element name="PhoneNumber" type="tns:PhoneNumber"></xsd:element>
|
||||||
|
<xsd:element name="MobilePhoneNumber" type="tns:PhoneNumber"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="ArrayOfContract">
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="Contract" type="tns:Contract" maxOccurs="unbounded" minOccurs="0"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
|
||||||
|
<xsd:complexType name="Contract">
|
||||||
|
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="ContractID" type="xsd:long"></xsd:element>
|
||||||
|
<xsd:element name="ContractName" type="xsd:string"></xsd:element>
|
||||||
|
</xsd:sequence>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:schema></wsdl:types>
|
||||||
|
<wsdl:message name="ListPersonRequest">
|
||||||
|
<wsdl:part name="parameters" element="tns:ListPerson"></wsdl:part>
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:message name="ListPersonResponse">
|
||||||
|
<wsdl:part name="parameters" element="tns:ListPersonResponse"></wsdl:part>
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:portType name="NewPortType">
|
||||||
|
<wsdl:operation name="ListPerson">
|
||||||
|
<wsdl:input message="tns:ListPersonRequest"></wsdl:input>
|
||||||
|
<wsdl:output message="tns:ListPersonResponse"></wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:portType>
|
||||||
|
<wsdl:binding name="NewBinding" type="tns:NewPortType">
|
||||||
|
<soap:binding style="document"
|
||||||
|
transport="http://schemas.xmlsoap.org/soap/http" />
|
||||||
|
<wsdl:operation name="ListPerson">
|
||||||
|
<soap:operation
|
||||||
|
soapAction="http://www.example.org/benchmark/ListPerson" />
|
||||||
|
<wsdl:input>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</wsdl:input>
|
||||||
|
<wsdl:output>
|
||||||
|
<soap:body use="literal" />
|
||||||
|
</wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:binding>
|
||||||
|
<wsdl:service name="TestService">
|
||||||
|
<wsdl:port name="TestPort" binding="tns:NewBinding">
|
||||||
|
<soap:address location="http://localhost:81/soap-wsdl-test/person.pl"></soap:address>
|
||||||
|
</wsdl:port>
|
||||||
|
</wsdl:service></wsdl:definitions>
|
||||||
@@ -18,7 +18,7 @@ my %binding_of :ATTR(:name<binding> :default<()>);
|
|||||||
my %service_of :ATTR(:name<service> :default<()>);
|
my %service_of :ATTR(:name<service> :default<()>);
|
||||||
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
||||||
|
|
||||||
# must be attr for Class::Std::Storable
|
# must be attr for Class::Std::Fast::Storable
|
||||||
my %attributes_of :ATTR();
|
my %attributes_of :ATTR();
|
||||||
%attributes_of = (
|
%attributes_of = (
|
||||||
binding => \%binding_of,
|
binding => \%binding_of,
|
||||||
@@ -118,9 +118,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 431 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Definitions.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: Definitions.pm 431 2007-12-03 19:39:11Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -37,8 +37,10 @@ sub get_transport {
|
|||||||
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}smx;
|
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}smx;
|
||||||
|
|
||||||
if ($registered_transport_of{ $scheme }) {
|
if ($registered_transport_of{ $scheme }) {
|
||||||
eval "require $registered_transport_of{ $scheme }"
|
no strict qw(refs);
|
||||||
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
|
*{ $registered_transport_of{ $scheme } . '::' }{ CODE }
|
||||||
|
or eval "require $registered_transport_of{ $scheme }"
|
||||||
|
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
|
||||||
|
|
||||||
# try "foo::Client" class first - SOAP::Tranport always requires
|
# try "foo::Client" class first - SOAP::Tranport always requires
|
||||||
# a package withoug the ::Client appended, and then
|
# a package withoug the ::Client appended, and then
|
||||||
@@ -68,8 +70,10 @@ sub get_transport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
||||||
eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
|
no strict qw(refs);
|
||||||
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
|
*{ $SOAP_WSDL_TRANSPORT_OF{ $scheme } . '::' }{ CODE }
|
||||||
|
or eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
|
||||||
|
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
|
||||||
return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs );
|
return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,9 +240,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 435 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Transport.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: Transport.pm 435 2007-12-03 22:31:00Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||||
port_op.get_documentation %]
|
port_op.get_documentation %]
|
||||||
|
|
||||||
sub [% operation.get_name %](
|
sub [% operation.get_name %] {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
# body is a ??? object - sorry, POD not implemented yet
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
# header is a ??? object - sorry, POD not implemented yet
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|||||||
@@ -8,12 +8,15 @@ element_from = complexType.get_element;
|
|||||||
#
|
#
|
||||||
# Sanity check: All original elements must be noted first
|
# Sanity check: All original elements must be noted first
|
||||||
#
|
#
|
||||||
|
element_list = base_type.get_element;
|
||||||
FOREACH element = base_type.get_element;
|
FOREACH element = base_type.get_element;
|
||||||
IF element_from.${ loop.index }.get_name != element.get_name;
|
IF element_from.${ loop.index }.get_name != element.get_name;
|
||||||
|
# element_list.push( element );
|
||||||
THROW WSDL "${element.get_name} not found at position ${ loop.index } in extension type ${ complexType.get_name }";
|
THROW WSDL "${element.get_name} not found at position ${ loop.index } in extension type ${ complexType.get_name }";
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
#complexType.set_element( element_list );
|
||||||
|
|
||||||
-%]
|
-%]
|
||||||
use base qw([% type_prefix %]::[% base_name.1.replace('\.', '::') %]);
|
use base qw([% type_prefix %]::[% base_name.1.replace('\.', '::') %]);
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ sub visit_Part {
|
|||||||
# TODO: auto-generate element for RPC bindings
|
# TODO: auto-generate element for RPC bindings
|
||||||
if ( my $type_name = $part->get_type ) {
|
if ( my $type_name = $part->get_type ) {
|
||||||
# FIXME support RPC-style calls
|
# FIXME support RPC-style calls
|
||||||
die "unsupported global type <$type_name> found in part";
|
die "unsupported global type <$type_name> found in part ". $part->get_name();
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO factor out iterator or replace by lookup (probably better)
|
# TODO factor out iterator or replace by lookup (probably better)
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ use HTTP::Headers;
|
|||||||
use Scalar::Util qw(blessed);
|
use Scalar::Util qw(blessed);
|
||||||
|
|
||||||
use Class::Std::Fast::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
# use Class::Std::Storable;
|
|
||||||
|
|
||||||
use base qw(SOAP::WSDL::Server);
|
use base qw(SOAP::WSDL::Server);
|
||||||
|
|
||||||
our $VERSION=q{2.00_25};
|
our $VERSION=q{2.00_26};
|
||||||
|
|
||||||
# mostly copied from SOAP::Lite. Unfortunately we can't use SOAP::Lite's CGI
|
# mostly copied from SOAP::Lite. Unfortunately we can't use SOAP::Lite's CGI
|
||||||
# server directly - we would have to swap out it's base class...
|
# server directly - we would have to swap out it's base class...
|
||||||
@@ -80,6 +79,10 @@ sub handle {
|
|||||||
'Content-type' => 'text/xml; charset="utf-8"'
|
'Content-type' => 'text/xml; charset="utf-8"'
|
||||||
);
|
);
|
||||||
$response->content( $response_message );
|
$response->content( $response_message );
|
||||||
|
{
|
||||||
|
use bytes;
|
||||||
|
$response->header('Content-length', length $response_message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$self->_output($response);
|
$self->_output($response);
|
||||||
|
|||||||
@@ -3,16 +3,19 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Test::More qw/no_plan/; # TODO: change to tests => N;
|
use Test::More qw/no_plan/; # TODO: change to tests => N;
|
||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
|
use File::Basename;
|
||||||
|
use File::Spec;
|
||||||
|
|
||||||
use Cwd;
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
my $path = cwd;
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
$path =~s|\/t\/?$||; # allow running from t/ and above (Build test)
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my $soap = SOAP::WSDL->new(
|
my $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path .'/t/acceptance/wsdl/008_complexType.wsdl'
|
wsdl => 'file://' . $url .'/acceptance/wsdl/008_complexType.wsdl'
|
||||||
)->wsdlinit();
|
)->wsdlinit();
|
||||||
|
|
||||||
my $wsdl = $soap->get_definitions;
|
my $wsdl = $soap->get_definitions;
|
||||||
|
|||||||
@@ -11,8 +11,14 @@ use Cwd;
|
|||||||
|
|
||||||
use SOAP::WSDL;
|
use SOAP::WSDL;
|
||||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||||
my $path = cwd;
|
use File::Basename;
|
||||||
$path =~s|\/t\/?$||; # allow running from t/ and above (Build test)
|
use File::Spec;
|
||||||
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
my $parser;
|
my $parser;
|
||||||
|
|
||||||
@@ -37,7 +43,7 @@ else
|
|||||||
# TODO factor out into different test
|
# TODO factor out into different test
|
||||||
|
|
||||||
my $soap = SOAP::WSDL->new(
|
my $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path .'/t/acceptance/wsdl/006_sax_client.wsdl',
|
wsdl => 'file://' . $url .'/acceptance/wsdl/006_sax_client.wsdl',
|
||||||
)->wsdlinit();
|
)->wsdlinit();
|
||||||
|
|
||||||
$soap->servicename('MessageGateway');
|
$soap->servicename('MessageGateway');
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ is $obj, '<MyTestName >test</MyTestName ><MyTestName >test2</MyTestName >',
|
|||||||
# try on the fly factory
|
# try on the fly factory
|
||||||
@MyComplexType2::ISA = ('SOAP::WSDL::XSD::Typelib::ComplexType');
|
@MyComplexType2::ISA = ('SOAP::WSDL::XSD::Typelib::ComplexType');
|
||||||
{
|
{
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
my %MyTestName_of;
|
my %MyTestName_of;
|
||||||
|
|
||||||
MyComplexType2->_factory(
|
MyComplexType2->_factory(
|
||||||
|
|||||||
@@ -3,17 +3,23 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use diagnostics;
|
use diagnostics;
|
||||||
use Cwd;
|
use Cwd;
|
||||||
|
use lib '../lib';
|
||||||
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
use lib '../lib';
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
|
||||||
my $soap;
|
my $soap;
|
||||||
#2
|
#2
|
||||||
ok( $soap = SOAP::WSDL->new(
|
ok( $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/02_port.wsdl'
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/02_port.wsdl'
|
||||||
), 'Instantiated object' );
|
), 'Instantiated object' );
|
||||||
|
|
||||||
ok( ($soap->servicename('testService') ), 'set service' );
|
ok( ($soap->servicename('testService') ), 'set service' );
|
||||||
|
|||||||
@@ -6,16 +6,21 @@ use lib 't/lib';
|
|||||||
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my $xml;
|
my $xml;
|
||||||
|
|
||||||
my $soap = undef;
|
my $soap = undef;
|
||||||
|
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
|
||||||
|
|
||||||
ok( $soap = SOAP::WSDL->new(
|
ok( $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/04_element-simpleType.wsdl'
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/04_element-simpleType.wsdl'
|
||||||
), 'Instantiated object' );
|
), 'Instantiated object' );
|
||||||
|
|
||||||
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
||||||
|
|||||||
@@ -2,19 +2,22 @@ use Test::More tests => 8;
|
|||||||
use strict;
|
use strict;
|
||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
use lib 't/lib';
|
use lib 't/lib';
|
||||||
use File::Spec;
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
use File::Spec;
|
||||||
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my ($soap, $xml, $xml2);
|
my ($soap, $xml, $xml2);
|
||||||
|
|
||||||
# chdir to my location
|
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
|
||||||
|
|
||||||
#2
|
#2
|
||||||
ok( $soap = SOAP::WSDL->new(
|
ok( $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/05_simpleType-list.wsdl'
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/05_simpleType-list.wsdl'
|
||||||
), 'Instantiated object' );
|
), 'Instantiated object' );
|
||||||
|
|
||||||
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
||||||
|
|||||||
@@ -7,16 +7,23 @@ use File::Basename;
|
|||||||
use lib '../lib';
|
use lib '../lib';
|
||||||
use lib 't/lib';
|
use lib 't/lib';
|
||||||
|
|
||||||
|
use File::Basename;
|
||||||
|
use File::Spec;
|
||||||
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my $xml;
|
my $xml;
|
||||||
|
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
|
||||||
|
|
||||||
my $soap;
|
my $soap;
|
||||||
#2
|
#2
|
||||||
ok( $soap = SOAP::WSDL->new(
|
ok( $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/05_simpleType-restriction.wsdl'
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/05_simpleType-restriction.wsdl'
|
||||||
), 'Instantiated object' );
|
), 'Instantiated object' );
|
||||||
|
|
||||||
#3
|
#3
|
||||||
|
|||||||
@@ -2,19 +2,23 @@ use Test::More tests => 6;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use diagnostics;
|
use diagnostics;
|
||||||
use Cwd;
|
use lib '../lib';
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Spec;
|
use File::Spec;
|
||||||
use lib '../lib';
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok(qw/SOAP::WSDL/);
|
use_ok(qw/SOAP::WSDL/);
|
||||||
|
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
|
||||||
my $soap;
|
my $soap;
|
||||||
#2
|
#2
|
||||||
ok( $soap = SOAP::WSDL->new(
|
ok( $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/02_port.wsdl',
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/02_port.wsdl',
|
||||||
keep_alive => 1,
|
keep_alive => 1,
|
||||||
), 'Instantiated object' );
|
), 'Instantiated object' );
|
||||||
|
|
||||||
ok( ($soap->servicename('testService') ), 'set service' );
|
ok( ($soap->servicename('testService') ), 'set service' );
|
||||||
|
|||||||
@@ -13,9 +13,14 @@
|
|||||||
use strict;
|
use strict;
|
||||||
use Test::More tests => 4;
|
use Test::More tests => 4;
|
||||||
use lib '../../../lib/';
|
use lib '../../../lib/';
|
||||||
use File::Spec;
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
use File::Spec;
|
||||||
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
use_ok q/SOAP::WSDL/;
|
use_ok q/SOAP::WSDL/;
|
||||||
|
|
||||||
@@ -23,19 +28,16 @@ use_ok q/SOAP::WSDL/;
|
|||||||
print "# Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
|
print "# Testing SOAP::WSDL ". $SOAP::WSDL::VERSION."\n";
|
||||||
print "# Acceptance test against sample output with simple WSDL\n";
|
print "# Acceptance test against sample output with simple WSDL\n";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
my $data = {
|
my $data = {
|
||||||
name => 'test',
|
name => 'test',
|
||||||
givenName => 'test',
|
givenName => 'test',
|
||||||
};
|
};
|
||||||
|
|
||||||
my $soap = undef;
|
my $soap = undef;
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
|
||||||
|
|
||||||
ok $soap = SOAP::WSDL->new(
|
ok $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///'.$path.'/../../acceptance/wsdl/11_helloworld.wsdl',
|
wsdl => 'file://'.$url.'/../../acceptance/wsdl/11_helloworld.wsdl',
|
||||||
no_dispatch => 1
|
no_dispatch => 1
|
||||||
), 'Create SOAP::WSDL object';
|
), 'Create SOAP::WSDL object';
|
||||||
|
|
||||||
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
||||||
|
|||||||
@@ -2,9 +2,15 @@ use strict;
|
|||||||
use lib '../../../lib';
|
use lib '../../../lib';
|
||||||
use Test::More tests => 4;
|
use Test::More tests => 4;
|
||||||
use SOAP::WSDL;
|
use SOAP::WSDL;
|
||||||
use File::Spec;
|
|
||||||
use Data::Dumper;
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
use File::Spec;
|
||||||
|
|
||||||
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
my ($volume, $dir) = File::Spec->splitpath($path, 1);
|
||||||
|
my @dir_from = File::Spec->splitdir($dir);
|
||||||
|
unshift @dir_from, $volume if $volume;
|
||||||
|
my $url = join '/', @dir_from;
|
||||||
|
|
||||||
|
|
||||||
print "# Using SOAP::WSDL Version $SOAP::WSDL::VERSION\n";
|
print "# Using SOAP::WSDL Version $SOAP::WSDL::VERSION\n";
|
||||||
|
|
||||||
@@ -13,13 +19,13 @@ my $soap = undef;
|
|||||||
|
|
||||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||||
|
|
||||||
my $url = 'http://127.0.0.1/testPort';
|
my $proxy = 'http://127.0.0.1/testPort';
|
||||||
|
|
||||||
|
|
||||||
ok( $soap = SOAP::WSDL->new(
|
ok( $soap = SOAP::WSDL->new(
|
||||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/02_port.wsdl'
|
wsdl => 'file://' . $url . '/../../acceptance/wsdl/02_port.wsdl'
|
||||||
) );
|
) );
|
||||||
|
|
||||||
ok $soap->wsdlinit( url => $url );
|
ok $soap->wsdlinit( url => $proxy );
|
||||||
ok $soap->servicename('testService');
|
ok $soap->servicename('testService');
|
||||||
ok $soap->portname('testPort');
|
ok $soap->portname('testPort');
|
||||||
|
|||||||
@@ -0,0 +1,206 @@
|
|||||||
|
<wsdl:definitions targetNamespace="http://example.com/soap/services/ETest/impl"
|
||||||
|
xmlns="http://schemas.xmlsoap.org/wsdl/"
|
||||||
|
xmlns:apachesoap="http://xml.apache.org/xml-soap"
|
||||||
|
xmlns:impl="http://example.com/soap/services/ETest/impl"
|
||||||
|
xmlns:intf="http://example.com/soap/services/ETest"
|
||||||
|
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
|
||||||
|
xmlns:tns1="urn:ETest"
|
||||||
|
xmlns:tns2="urn:acquisition"
|
||||||
|
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
|
||||||
|
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||||
|
|
||||||
|
<wsdl:types>
|
||||||
|
<schema targetNamespace="urn:ETest" xmlns="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
|
||||||
|
<complexType name="CreationBaseData">
|
||||||
|
<sequence>
|
||||||
|
<element name="createdBy" nillable="true" type="xsd:long" />
|
||||||
|
<element name="creationDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="updateDateCenter" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="updateDateLocal" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="updatedBy" nillable="true" type="xsd:long" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
<complexType name="CreationData">
|
||||||
|
<complexContent>
|
||||||
|
<extension base="tns1:CreationBaseData">
|
||||||
|
<sequence>
|
||||||
|
<element name="creatorFullName" nillable="true" type="xsd:string" />
|
||||||
|
<element name="modifierFullName" nillable="true" type="xsd:string" />
|
||||||
|
</sequence>
|
||||||
|
</extension>
|
||||||
|
</complexContent>
|
||||||
|
</complexType>
|
||||||
|
<complexType abstract="true" name="EProductData">
|
||||||
|
<sequence>
|
||||||
|
<element name="EStatus" nillable="true" type="xsd:string" />
|
||||||
|
<element name="EStatusUpdatedate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="SFXID" nillable="true" type="xsd:string" />
|
||||||
|
<element name="activationFromDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="activationToDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="activityStatusDateFrom" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="activityStatusDateTo" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="canEditSFXID" type="xsd:boolean" />
|
||||||
|
<element name="concurrentNumberOfUsers" nillable="true" type="xsd:int" />
|
||||||
|
<element name="creationData" nillable="true" type="tns1:CreationData" />
|
||||||
|
<element name="deleteable" type="xsd:boolean" />
|
||||||
|
<element name="ETestCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="id" nillable="true" type="xsd:long" />
|
||||||
|
<element name="instanceCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="mainContact" nillable="true" type="xsd:string" />
|
||||||
|
<element name="metaLibID" nillable="true" type="xsd:string" />
|
||||||
|
<element name="otherID" nillable="true" type="xsd:string" />
|
||||||
|
<element name="otherSource" nillable="true" type="xsd:string" />
|
||||||
|
<element name="privateNote" nillable="true" type="xsd:string" />
|
||||||
|
<element name="procurementStatus" nillable="true" type="xsd:string" />
|
||||||
|
<element name="procurementStatusUpdateDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="procurementStatusUpdatedate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="sourceInstanceCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="sponseringLibraryCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="sponseringLibraryName" nillable="true" type="xsd:string" />
|
||||||
|
<element name="updateTarget" nillable="true" type="xsd:string" />
|
||||||
|
<element name="workExpressionCode" nillable="true" type="xsd:string" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
<complexType name="EProductInformation">
|
||||||
|
<sequence>
|
||||||
|
<element name="acquisitions" nillable="true"
|
||||||
|
type="impl:ArrayOf_tns2_AcquisitionData" />
|
||||||
|
<element name="data" nillable="true" type="tns1:EProductData" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
</schema>
|
||||||
|
<schema targetNamespace="urn:acquisition" xmlns="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
|
||||||
|
<complexType name="AcquisitionCommonData">
|
||||||
|
<sequence>
|
||||||
|
<element name="budgets" nillable="true" type="xsd:string" />
|
||||||
|
<element name="campusCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="concurrentUsersNote" nillable="true" type="xsd:string" />
|
||||||
|
<element name="creationData" nillable="true" type="tns1:CreationData" />
|
||||||
|
<element name="id" nillable="true" type="xsd:long" />
|
||||||
|
<element name="instituteCode" nillable="true" type="xsd:string" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
<complexType name="AcquisitionData">
|
||||||
|
<sequence>
|
||||||
|
<element name="ILSSubscriptionNo" nillable="true" type="xsd:string" />
|
||||||
|
<element name="acquisitionCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="acquisitionCommonData" nillable="true"
|
||||||
|
type="tns2:AcquisitionCommonData" />
|
||||||
|
<element name="acquisitionMethod" nillable="true" type="xsd:string" />
|
||||||
|
<element name="acquisitionNumber" nillable="true" type="xsd:string" />
|
||||||
|
<element name="acquisitionStatus" nillable="true" type="xsd:string" />
|
||||||
|
<element name="acquisitionStatusDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="advanceNoticeDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="autoRenewal" nillable="true" type="xsd:boolean" />
|
||||||
|
<element name="consortialAgreement" type="xsd:boolean" />
|
||||||
|
<element name="discountOnPrice" nillable="true" type="xsd:int" />
|
||||||
|
<element name="id" nillable="true" type="xsd:long" />
|
||||||
|
<element name="instanceCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="materialType" nillable="true" type="xsd:string" />
|
||||||
|
<element name="noteForILS" nillable="true" type="xsd:string" />
|
||||||
|
<element name="noteForVendor" nillable="true" type="xsd:string" />
|
||||||
|
<element name="noticePeriodCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="numberOfCopies" nillable="true" type="xsd:int" />
|
||||||
|
<element name="orderDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="orderForm" nillable="true" type="xsd:string" />
|
||||||
|
<element name="orderSendMethod" nillable="true" type="xsd:string" />
|
||||||
|
<element name="pooledConcurrentUsers" nillable="true" type="xsd:int" />
|
||||||
|
<element name="price" nillable="true" type="xsd:double" />
|
||||||
|
<element name="pricingCap" nillable="true" type="xsd:int" />
|
||||||
|
<element name="pricingCapFrom" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="pricingCapTo" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="pricingModel" nillable="true" type="xsd:string" />
|
||||||
|
<element name="printCancellationNote" nillable="true" type="xsd:string" />
|
||||||
|
<element name="printCancellationRestriction" type="xsd:boolean" />
|
||||||
|
<element name="printPurchaseOrderNo" nillable="true" type="xsd:string" />
|
||||||
|
<element name="purchaseOrderNo" nillable="true" type="xsd:string" />
|
||||||
|
<element name="renewallOrCancellationDate" nillable="true" type="xsd:dateTime" />
|
||||||
|
<element name="renewallOrCancellationDescisionNote" nillable="true"
|
||||||
|
type="xsd:string" />
|
||||||
|
<element name="renewallOrCancellationNoteForILS" nillable="true"
|
||||||
|
type="xsd:string" />
|
||||||
|
<element name="renewallOrCancellationNoteForVendor" nillable="true"
|
||||||
|
type="xsd:string" />
|
||||||
|
<element name="subscriptionNotification" nillable="true" type="xsd:int" />
|
||||||
|
<element name="subscriptionPeriodCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="subscriptionType" nillable="true" type="xsd:string" />
|
||||||
|
<element name="subscriptionTypeNote" nillable="true" type="xsd:string" />
|
||||||
|
<element name="vendorAdvancedNotice" nillable="true" type="xsd:int" />
|
||||||
|
<element name="vendorAdvancedNoticeVal" nillable="true" type="xsd:string" />
|
||||||
|
<element name="vendorCode" nillable="true" type="xsd:string" />
|
||||||
|
<element name="vendorName" nillable="true" type="xsd:string" />
|
||||||
|
<element name="vendorSubscriptionCode" nillable="true" type="xsd:string" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
</schema>
|
||||||
|
<schema targetNamespace="http://example.com/soap/services/ETest/impl"
|
||||||
|
xmlns="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
|
||||||
|
<complexType name="ArrayOf_tns2_AcquisitionData">
|
||||||
|
<complexContent>
|
||||||
|
<restriction base="soapenc:Array">
|
||||||
|
<attribute ref="soapenc:arrayType" wsdl:arrayType="tns2:AcquisitionData[]" />
|
||||||
|
</restriction>
|
||||||
|
</complexContent>
|
||||||
|
</complexType>
|
||||||
|
</schema>
|
||||||
|
</wsdl:types>
|
||||||
|
<wsdl:message name="getETestResponse">
|
||||||
|
<wsdl:part name="getETestReturn" type="tns1:EProductInformation" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:message name="getFixedETestResponse">
|
||||||
|
<wsdl:part name="getFixedETestReturn" type="tns1:EProductInformation" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:message name="getFixedETestRequest"></wsdl:message>
|
||||||
|
<wsdl:message name="getETestRequest">
|
||||||
|
<wsdl:part name="indexName" type="xsd:string" />
|
||||||
|
<wsdl:part name="indexValue" type="xsd:string" />
|
||||||
|
<wsdl:part name="withStatus" type="xsd:string" />
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:portType name="ETestWeb">
|
||||||
|
<wsdl:operation name="getETest" parameterOrder="indexName indexValue withStatus">
|
||||||
|
<wsdl:input message="impl:getETestRequest" name="getETestRequest" />
|
||||||
|
<wsdl:output message="impl:getETestResponse" name="getETestResponse" />
|
||||||
|
</wsdl:operation>
|
||||||
|
<wsdl:operation name="getFixedETest">
|
||||||
|
<wsdl:input message="impl:getFixedETestRequest" name="getFixedETestRequest" />
|
||||||
|
<wsdl:output message="impl:getFixedETestResponse"
|
||||||
|
name="getFixedETestResponse" />
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:portType>
|
||||||
|
|
||||||
|
<wsdl:binding name="ETestSoapBinding" type="impl:ETestWeb">
|
||||||
|
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
|
||||||
|
<wsdl:operation name="getETest">
|
||||||
|
<wsdlsoap:operation soapAction="" />
|
||||||
|
<wsdl:input name="getETestRequest">
|
||||||
|
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
|
||||||
|
namespace="http://example.com/soap/services/ETest" use="encoded" />
|
||||||
|
</wsdl:input>
|
||||||
|
<wsdl:output name="getETestResponse">
|
||||||
|
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
|
||||||
|
namespace="http://example.com/soap/services/ETest" use="encoded" />
|
||||||
|
</wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
<wsdl:operation name="getFixedETest">
|
||||||
|
<wsdlsoap:operation soapAction="" />
|
||||||
|
<wsdl:input name="getFixedETestRequest">
|
||||||
|
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
|
||||||
|
namespace="http://example.com/soap/services/ETest" use="encoded" />
|
||||||
|
</wsdl:input>
|
||||||
|
<wsdl:output name="getFixedETestResponse">
|
||||||
|
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
|
||||||
|
namespace="http://example.com/soap/services/ETest" use="encoded" />
|
||||||
|
</wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
</wsdl:binding>
|
||||||
|
|
||||||
|
<wsdl:service name="ETestWebService">
|
||||||
|
<wsdl:port binding="impl:ETestSoapBinding" name="ETest">
|
||||||
|
<wsdlsoap:address location="http://example.com/soap/services/ETest" />
|
||||||
|
</wsdl:port>
|
||||||
|
</wsdl:service>
|
||||||
|
</wsdl:definitions>
|
||||||
Reference in New Issue
Block a user