Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7ca2154ad6 | ||
|
|
eb096ad88e | ||
|
|
3cfeebae54 |
2
Build.PL
2
Build.PL
@@ -5,7 +5,7 @@ $build = Module::Build->new(
|
||||
create_makefile_pl => 'passthrough',
|
||||
dist_abstract => 'SOAP with WSDL support',
|
||||
dist_name => 'SOAP-WSDL',
|
||||
dist_version => '2.00_25',
|
||||
dist_version => '2.00_28',
|
||||
module_name => 'SOAP::WSDL',
|
||||
license => 'artistic',
|
||||
requires => {
|
||||
|
||||
57
Changes
57
Changes
@@ -1,4 +1,4 @@
|
||||
Release notes for SOAP::WSDL 2.00_24
|
||||
Release notes for SOAP::WSDL 2.00_28
|
||||
-------
|
||||
|
||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
||||
@@ -34,6 +34,61 @@ Features:
|
||||
|
||||
The following changes have been made:
|
||||
|
||||
2.00_28
|
||||
|
||||
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/).
|
||||
|
||||
* #32062: minor doc fixes
|
||||
* [ 1852988 ] Generated Interface POD is invalid
|
||||
* [ 1855583 ] t/SOAP/WSDL/XSD/Typelib/ComplexType.t requires Test::Warn
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Updated SOAP::WSDL::Manual::WS_I to reflect new Server modules
|
||||
|
||||
2.00_27
|
||||
|
||||
The following features were added (the numbers in square brackets are the
|
||||
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||
|
||||
* [ 1850793 ] Add a to_hash_ref method
|
||||
* [ 1844427 ] Support multiple parts in body
|
||||
|
||||
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/).
|
||||
|
||||
* [ 1850795 ] attributes referencing types in default namespace throw
|
||||
* [ 1844458 ] Add warning when generating Interface with multiple parts
|
||||
* [ 1843841 ] Grammar/typos in Manual.pod
|
||||
* [ 1843799 ] ./Build test fails due to testcount mismatch not IO::Scalar
|
||||
* [ 1845077 ] Top level simpleType elements don't serialize correctly
|
||||
|
||||
The following uncategorized improvements have been made:
|
||||
|
||||
* Fixed serializing complexType elements with no elements to empty element
|
||||
* Enhanced test suite
|
||||
* Documentation improvements
|
||||
|
||||
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
|
||||
---
|
||||
WARNING: INCOMPATIBLE CHANGE:
|
||||
|
||||
30
MANIFEST
30
MANIFEST
@@ -1,5 +1,7 @@
|
||||
benchmark/01_expat.t
|
||||
benchmark/hello.pl
|
||||
benchmark/person.pl
|
||||
benchmark/person.xml
|
||||
benchmark/XSD/01_anyType.t
|
||||
benchmark/XSD/02_anySimpleType.t
|
||||
benchmark/XSD/03_string.t
|
||||
@@ -7,6 +9,7 @@ bin/wsdl2perl.pl
|
||||
Build.PL
|
||||
Changes
|
||||
example/cgi-bin/helloworld.pl
|
||||
example/cgi-bin/person.pl
|
||||
example/fortune.pl
|
||||
example/genericbarcode.pl
|
||||
example/hello.pl
|
||||
@@ -25,6 +28,8 @@ example/lib/MyElements/GetSpecificCookieResponse.pm
|
||||
example/lib/MyElements/GetWeather.pm
|
||||
example/lib/MyElements/GetWeatherResponse.pm
|
||||
example/lib/MyElements/int.pm
|
||||
example/lib/MyElements/ListPerson.pm
|
||||
example/lib/MyElements/ListPersonResponse.pm
|
||||
example/lib/MyElements/readNodeCount.pm
|
||||
example/lib/MyElements/readNodeCountResponse.pm
|
||||
example/lib/MyElements/sayHello.pm
|
||||
@@ -34,13 +39,31 @@ example/lib/MyInterfaces/BarCode/BarCodeSoap.pm
|
||||
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
||||
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
||||
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
|
||||
example/lib/MyInterfaces/TestService/TestPort.pm
|
||||
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
|
||||
example/lib/MyServer/TestService/TestPort.pm
|
||||
example/lib/MyTypemaps/BarCode.pm
|
||||
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
||||
example/lib/MyTypemaps/GlobalWeather.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/BarCodeData.pm
|
||||
example/lib/MyTypes/BarcodeOption.pm
|
||||
example/lib/MyTypes/BarcodeType.pm
|
||||
example/lib/MyTypes/CheckSumMethod.pm
|
||||
example/lib/MyTypes/Contract.pm
|
||||
example/lib/MyTypes/ImageFormats.pm
|
||||
example/lib/MyTypes/Person.pm
|
||||
example/lib/MyTypes/PersonID.pm
|
||||
example/lib/MyTypes/PhoneNumber.pm
|
||||
example/lib/MyTypes/ShowTextPosition.pm
|
||||
example/lib/MyTypes/test2.pm
|
||||
example/lib/MyTypes/testExtended.pm
|
||||
example/person.pl
|
||||
example/person_compile.pl
|
||||
example/visitor/visitor.pl
|
||||
example/weather.pl
|
||||
example/weather_wsdl.pl
|
||||
@@ -48,6 +71,7 @@ example/wsdl/11_helloworld.wsdl
|
||||
example/wsdl/FortuneCookie.xml
|
||||
example/wsdl/genericbarcode.xml
|
||||
example/wsdl/globalweather.xml
|
||||
example/wsdl/Person.wsdl
|
||||
HACKING
|
||||
lib/SOAP/WSDL.pm
|
||||
lib/SOAP/WSDL/Base.pm
|
||||
@@ -250,6 +274,7 @@ t/acceptance/wsdl/email_account.wsdl
|
||||
t/acceptance/wsdl/generator_test.wsdl
|
||||
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
||||
t/acceptance/wsdl/message_gateway.wsdl
|
||||
t/contributed.wsdl
|
||||
t/Expat/01_expat.t
|
||||
t/Expat/03_wsdl.t
|
||||
t/lib/MyComplexType.pm
|
||||
@@ -292,6 +317,8 @@ t/SOAP/WSDL/Generator/Visitor/Typemap.t
|
||||
t/SOAP/WSDL/Generator/XCS.t
|
||||
t/SOAP/WSDL/Generator/XSD.t
|
||||
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
||||
t/SOAP/WSDL/Part.t
|
||||
t/SOAP/WSDL/Serializer/XSD.t
|
||||
t/SOAP/WSDL/Server.t
|
||||
t/SOAP/WSDL/Server/CGI.t
|
||||
t/SOAP/WSDL/Transport/01_Test.t
|
||||
@@ -299,6 +326,9 @@ t/SOAP/WSDL/Transport/02_HTTP.t
|
||||
t/SOAP/WSDL/Transport/acceptance/test2.xml
|
||||
t/SOAP/WSDL/Transport/acceptance/test3.xml
|
||||
t/SOAP/WSDL/Typelib/Fault11.t
|
||||
t/SOAP/WSDL/XSD/ComplexType.t
|
||||
t/SOAP/WSDL/XSD/Element.t
|
||||
t/SOAP/WSDL/XSD/SimpleType.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
|
||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
||||
|
||||
26
META.yml
26
META.yml
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: SOAP-WSDL
|
||||
version: 2.00_25
|
||||
version: 2.00_28
|
||||
author:
|
||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||
abstract: SOAP with WSDL support
|
||||
@@ -33,18 +33,18 @@ provides:
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::Base:
|
||||
file: lib/SOAP/WSDL/Base.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Binding:
|
||||
file: lib/SOAP/WSDL/Binding.pm
|
||||
SOAP::WSDL::Client:
|
||||
file: lib/SOAP/WSDL/Client.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Client::Base:
|
||||
file: lib/SOAP/WSDL/Client/Base.pm
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::Definitions:
|
||||
file: lib/SOAP/WSDL/Definitions.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Deserializer::Hash:
|
||||
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
||||
version: 2.00_25
|
||||
@@ -56,13 +56,13 @@ provides:
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::Expat::Base:
|
||||
file: lib/SOAP/WSDL/Expat/Base.pm
|
||||
version: 2.00_24
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Expat::Message2Hash:
|
||||
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
||||
version: 2.00_24
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Expat::MessageParser:
|
||||
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Expat::MessageStreamParser:
|
||||
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
||||
version: 2.00_24
|
||||
@@ -83,7 +83,7 @@ provides:
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::Generator::Template::XSD:
|
||||
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Generator::Visitor:
|
||||
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
||||
version: 2.00_25
|
||||
@@ -120,13 +120,13 @@ provides:
|
||||
version: 2.00_25
|
||||
SOAP::WSDL::Serializer::XSD:
|
||||
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Server:
|
||||
file: lib/SOAP/WSDL/Server.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Server::CGI:
|
||||
file: lib/SOAP/WSDL/Server/CGI.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::Service:
|
||||
file: lib/SOAP/WSDL/Service.pm
|
||||
SOAP::WSDL::Transport::HTTP:
|
||||
@@ -256,10 +256,10 @@ provides:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::XSD::Typelib::Element:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||
version: 2.00_25
|
||||
version: 2.00_27
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||
|
||||
12
TODO
12
TODO
@@ -3,22 +3,22 @@ TODO list for SOAP::WSDL
|
||||
2.00 Pre-releases
|
||||
--------
|
||||
|
||||
* Act as SOAP Server [ 1842436 ]
|
||||
|
||||
2.1 release
|
||||
--------
|
||||
* Support namespaces in SOAP message payload(#1809057)
|
||||
* Support namespaces in SOAP message payload [ 1809057 ]
|
||||
|
||||
* Support the xsi:type attribute on derived types on the wire(#1809059)
|
||||
* Support the xsi:type attribute on derived types on the wire [ 1809059 ]
|
||||
|
||||
* SOAP1.2 support (#1803331)
|
||||
* SOAP1.2 support [ 1803331 ]
|
||||
|
||||
2.2 release
|
||||
--------
|
||||
* XML schema support ("minimal conformant") (#1764845)
|
||||
* XML schema support ("minimal conformant") [ 1764845 ]
|
||||
|
||||
* Support SOAP attachments
|
||||
|
||||
* Act as SOAP Server
|
||||
|
||||
3.0 release
|
||||
--------
|
||||
We're not thinking that far ahead right now.
|
||||
|
||||
114
benchmark/person.pl
Normal file
114
benchmark/person.pl
Normal file
@@ -0,0 +1,114 @@
|
||||
use lib '../lib';
|
||||
use lib '../example/lib';
|
||||
use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||
use strict;
|
||||
|
||||
package MyData;
|
||||
my $XML;
|
||||
sub xml {
|
||||
return $XML if ($XML);
|
||||
|
||||
open my $fh, 'person.xml' or die 'cannot open data file';
|
||||
$XML = join '', <$fh>;
|
||||
close $fh;
|
||||
return $XML;
|
||||
}
|
||||
|
||||
package MyTransport;
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
SOAP::WSDL::Factory::Transport->register( http => __PACKAGE__ );
|
||||
sub send_receive {
|
||||
return MyData::xml();
|
||||
}
|
||||
sub new { return bless {}, 'MyTransport' };
|
||||
|
||||
package main;
|
||||
|
||||
use Benchmark qw(cmpthese);
|
||||
|
||||
# Do this BEFORE the client SOAP handlers are compiled!
|
||||
use XML::Compile::Transport::SOAPHTTP();
|
||||
use XML::Compile::SOAP::Tester ();
|
||||
use XML::Compile::Util;#use Data::Dumper;
|
||||
#print Dumper $result;
|
||||
use XML::Compile::WSDL11;
|
||||
use XML::Simple;
|
||||
|
||||
use SOAP::WSDL::Deserializer::XSD_XS;
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
|
||||
$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';
|
||||
my $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl');
|
||||
|
||||
$tester->actionCallback($action, \&MyData::xml);
|
||||
|
||||
my $call = $compile->compileClient('ListPerson');
|
||||
my $result = $call->({ in => undef});
|
||||
|
||||
# Initialize SOAP::Lite
|
||||
my $deserializer = SOAP::Deserializer->new();
|
||||
|
||||
# Initialize SOAP::WSDL interface
|
||||
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||
# Load all classes - XML::Compile has created everything before, too
|
||||
$soap->ListPerson({});
|
||||
|
||||
# # register for SOAP 1.1
|
||||
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
|
||||
|
||||
my $wsdl_xs = MyInterfaces::TestService::TestPort->new();
|
||||
|
||||
# trigger loading of XML Data
|
||||
{
|
||||
use bytes;
|
||||
print "XML length (bytes): " . length( MyData::xml() ), "\n";
|
||||
}
|
||||
|
||||
my @data = ();
|
||||
my $n = 0;
|
||||
print "Benchmark conducted with
|
||||
SOAP::Lite - $SOAP::Lite::VERSION
|
||||
SOAP::WSDL - $SOAP::WSDL::Client::VERSION
|
||||
SOAP::WSDL_XS - $SOAP::WSDL::Deserializer::XSD_XS::VERSION;
|
||||
XML::Compile::SOAP - $XML::Compile::SOAP::VERSION
|
||||
XML::Simple - $XML::Simple::VERSION
|
||||
|
||||
Benchmark $n: Store result in private variable and destroy it
|
||||
";
|
||||
$n++;
|
||||
cmpthese 300, {
|
||||
'XML::Simple' => sub { my $result = XMLin( MyData::xml() )},
|
||||
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
|
||||
'XML::Compile::SOAP' => sub { my $result = $call->() },
|
||||
'SOAP::WSDL_XS' => sub { my $result = @data, $wsdl_xs->ListPerson({}) },
|
||||
'SOAP::Lite' => sub { my $result = $deserializer->deserialize( MyData::xml() )}
|
||||
};
|
||||
|
||||
print "Benchmark $n: Push result on list\n";
|
||||
$n++;
|
||||
cmpthese 500, {
|
||||
'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||
'XML::Compile::SOAP' => sub { push @data, $call->() },
|
||||
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||
};
|
||||
|
||||
@data = ();
|
||||
print "Benchmark $n: Play it again, Sam\n";
|
||||
|
||||
cmpthese 500, {
|
||||
'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||
'XML::Compile::SOAP' => sub { push @data, $call->() },
|
||||
'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||
};
|
||||
|
||||
437
benchmark/person.xml
Normal file
437
benchmark/person.xml
Normal file
@@ -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>
|
||||
@@ -52,4 +52,5 @@ Then run the helloworld.pl from the examples directory. It should print
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
=cut
|
||||
=cut
|
||||
|
||||
|
||||
83
example/cgi-bin/person.pl
Executable file
83
example/cgi-bin/person.pl
Executable file
@@ -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 },
|
||||
],
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
#!/usr/bin/perl -w
|
||||
use strict;
|
||||
use warnings;
|
||||
use lib 'lib';
|
||||
use lib 'lib'; # just needed because interface lies here
|
||||
|
||||
# I have to generate the interface using wsdl2perl.pl before
|
||||
use MyInterfaces::HelloWorld::HelloWorldSoap;
|
||||
|
||||
# I instantiate a interface class.
|
||||
my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new();
|
||||
|
||||
# I have to lookup the method and synopsis from the interface's pod
|
||||
@@ -14,8 +15,9 @@ my $result = $soap->sayHello({
|
||||
givenName => $ARGV[0] || '"Your given name"',
|
||||
});
|
||||
|
||||
# SOAP::WSDL::SOAP::Typelib::Fault11 objects are false, but serialize to XML
|
||||
die $result if not $result;
|
||||
|
||||
# I have to lookup the output parameter from the interface's POD - or try:
|
||||
# Bad method names will die with a list of available methods
|
||||
print $result->get_sayHelloResult(), "\n";
|
||||
# Will die on bad method names with a list of available methods
|
||||
print $result->get_sayHelloResult(), "\n";
|
||||
|
||||
@@ -4,18 +4,22 @@ use warnings;
|
||||
use XML::Compile::WSDL11;
|
||||
use XML::Compile::Transport::SOAPHTTP;
|
||||
|
||||
# I need access to the WSDL around - or use Data::Dumper::Streamer
|
||||
# for serializing the generated closures into (big) perl files
|
||||
my $wsdl = XML::Compile::WSDL11->new('wsdl/11_helloworld.wsdl');
|
||||
|
||||
# I have to lookup the methods from the WSDL
|
||||
# I compile a interface method for a single SOAP method from the WSDL
|
||||
# I have to lookup the method names from the WSDL
|
||||
my $call = $wsdl->compileClient('sayHello');
|
||||
|
||||
# I have to lookup the parameters from the WSDL
|
||||
# I have to lookup the parameters from the WSDL - can be quite tricky
|
||||
my $result = $call->(
|
||||
name => $ARGV[1] || '"Your name"',
|
||||
givenName => $ARGV[0] || '"Your given name"',
|
||||
);
|
||||
|
||||
# XML::Compile::SOAP's client just returns undef in case of failure
|
||||
die "Error calling soap method" if not defined $result;
|
||||
|
||||
# I have to lookup the output parameters from the WSDL - or try Dumper
|
||||
print $result->{ parameters }->{ sayHelloResult }, "\n";
|
||||
# I have to lookup the output parameters from the WSDL - or try Data::Dumper
|
||||
print $result->{ parameters }->{ sayHelloResult }, "\n";
|
||||
|
||||
@@ -13,15 +13,16 @@ $soap->on_action( sub { "urn:HelloWorld#sayHello" });
|
||||
$soap->autotype(0);
|
||||
|
||||
# I have to lookup the top level element's namespace from the WSDL
|
||||
$soap->default_ns('urn:HelloWorld');
|
||||
|
||||
# I have to encode all parameters as SOAP::Data objects
|
||||
# I have to know the order of parameters
|
||||
my $som = $soap->call(
|
||||
SOAP::Data->name("sayHello")
|
||||
->attr({ xmlns => 'urn:HelloWorld' }),
|
||||
"sayHello",
|
||||
SOAP::Data->name('name')->value( $ARGV[1] || '"Your name"'),
|
||||
SOAP::Data->name('givenName')->value( $ARGV[0] || '"Your given name"'),
|
||||
);
|
||||
|
||||
die $som->fault->{ faultstring } if ($som->fault);
|
||||
|
||||
print $som->result, "\n";
|
||||
print $som->result, "\n";
|
||||
|
||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ CountCookies from the namespace http://www.fullerdata.com/FortuneCookie/FortuneC
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
|
||||
,
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
CountCookiesResult
|
||||
) ],
|
||||
{
|
||||
CountCookiesResult => \%CountCookiesResult_of,
|
||||
{
|
||||
CountCookiesResult => \%CountCookiesResult_of,
|
||||
},
|
||||
{
|
||||
CountCookiesResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
CountCookiesResult => $some_value, # int
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %BarCodeParam_of :ATTR(:get<BarCodeParam>);
|
||||
@@ -29,9 +31,9 @@ __PACKAGE__->_factory(
|
||||
BarCodeParam
|
||||
BarCodeText
|
||||
) ],
|
||||
{
|
||||
BarCodeParam => \%BarCodeParam_of,
|
||||
BarCodeText => \%BarCodeText_of,
|
||||
{
|
||||
BarCodeParam => \%BarCodeParam_of,
|
||||
BarCodeText => \%BarCodeText_of,
|
||||
},
|
||||
{
|
||||
BarCodeParam => 'MyTypes::BarCodeData',
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GenerateBarCodeResult_of :ATTR(:get<GenerateBarCodeResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GenerateBarCodeResult
|
||||
) ],
|
||||
{
|
||||
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
||||
{
|
||||
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
||||
},
|
||||
{
|
||||
GenerateBarCodeResult => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %CountryName_of :ATTR(:get<CountryName>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
CountryName
|
||||
) ],
|
||||
{
|
||||
CountryName => \%CountryName_of,
|
||||
{
|
||||
CountryName => \%CountryName_of,
|
||||
},
|
||||
{
|
||||
CountryName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
CountryName => $some_value, # string
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GetCitiesByCountryResult_of :ATTR(:get<GetCitiesByCountryResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GetCitiesByCountryResult
|
||||
) ],
|
||||
{
|
||||
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
||||
{
|
||||
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
||||
},
|
||||
{
|
||||
GetCitiesByCountryResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetCitiesByCountryResult => $some_value, # string
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ GetFortuneCookie from the namespace http://www.fullerdata.com/FortuneCookie/Fort
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
|
||||
,
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GetFortuneCookieResult
|
||||
) ],
|
||||
{
|
||||
GetFortuneCookieResult => \%GetFortuneCookieResult_of,
|
||||
{
|
||||
GetFortuneCookieResult => \%GetFortuneCookieResult_of,
|
||||
},
|
||||
{
|
||||
GetFortuneCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetFortuneCookieResult => $some_value, # string
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %index_of :ATTR(:get<index>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
index
|
||||
) ],
|
||||
{
|
||||
index => \%index_of,
|
||||
{
|
||||
index => \%index_of,
|
||||
},
|
||||
{
|
||||
index => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
index => $some_value, # int
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GetSpecificCookieResult
|
||||
) ],
|
||||
{
|
||||
GetSpecificCookieResult => \%GetSpecificCookieResult_of,
|
||||
{
|
||||
GetSpecificCookieResult => \%GetSpecificCookieResult_of,
|
||||
},
|
||||
{
|
||||
GetSpecificCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetSpecificCookieResult => $some_value, # string
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %CityName_of :ATTR(:get<CityName>);
|
||||
@@ -29,9 +31,9 @@ __PACKAGE__->_factory(
|
||||
CityName
|
||||
CountryName
|
||||
) ],
|
||||
{
|
||||
CityName => \%CityName_of,
|
||||
CountryName => \%CountryName_of,
|
||||
{
|
||||
CityName => \%CityName_of,
|
||||
CountryName => \%CountryName_of,
|
||||
},
|
||||
{
|
||||
CityName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -74,7 +76,7 @@ Constructor. The following data structure may be passed to new():
|
||||
{
|
||||
CityName => $some_value, # string
|
||||
CountryName => $some_value, # string
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %GetWeatherResult_of :ATTR(:get<GetWeatherResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
GetWeatherResult
|
||||
) ],
|
||||
{
|
||||
GetWeatherResult => \%GetWeatherResult_of,
|
||||
{
|
||||
GetWeatherResult => \%GetWeatherResult_of,
|
||||
},
|
||||
{
|
||||
GetWeatherResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
GetWeatherResult => $some_value, # string
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
111
example/lib/MyElements/ListPerson.pm
Normal file
111
example/lib/MyElements/ListPerson.pm
Normal file
@@ -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
|
||||
|
||||
113
example/lib/MyElements/ListPersonResponse.pm
Normal file
113
example/lib/MyElements/ListPersonResponse.pm
Normal file
@@ -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
|
||||
|
||||
@@ -12,8 +12,8 @@ __PACKAGE__->__set_minOccurs();
|
||||
__PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::int
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::int
|
||||
|
||||
);
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ readNodeCount from the namespace http://www.fullerdata.com/FortuneCookie/Fortune
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
|
||||
,
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||
);
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable constructor => 'none';
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||
|
||||
Class::Std::initialize();
|
||||
|
||||
{ # BLOCK to scope variables
|
||||
|
||||
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
|
||||
@@ -27,8 +29,8 @@ __PACKAGE__->_factory(
|
||||
[ qw(
|
||||
readNodeCountResult
|
||||
) ],
|
||||
{
|
||||
readNodeCountResult => \%readNodeCountResult_of,
|
||||
{
|
||||
readNodeCountResult => \%readNodeCountResult_of,
|
||||
},
|
||||
{
|
||||
readNodeCountResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
@@ -69,7 +71,7 @@ Constructor. The following data structure may be passed to new():
|
||||
|
||||
{
|
||||
readNodeCountResult => $some_value, # int
|
||||
}
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ __PACKAGE__->__set_minOccurs();
|
||||
__PACKAGE__->__set_maxOccurs();
|
||||
__PACKAGE__->__set_ref();
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
SOAP::WSDL::XSD::Typelib::Element
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
|
||||
);
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package MyInterfaces::BarCode::BarCodeSoap;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Storable;
|
||||
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::BarCode
|
||||
if not MyTypemaps::BarCode->can('get_class');
|
||||
if not MyTypemaps::BarCode->can('get_class');
|
||||
|
||||
sub START {
|
||||
$_[0]->set_proxy('http://www.webservicex.net/genericbarcode.asmx') if not $_[2]->{proxy};
|
||||
@@ -16,11 +17,12 @@ sub START {
|
||||
|
||||
sub GenerateBarCode {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GenerateBarCode must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GenerateBarCode',
|
||||
operation => 'GenerateBarCode',
|
||||
soap_action => 'http://www.webservicex.net/GenerateBarCode',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -58,12 +60,12 @@ MyInterfaces::BarCode::BarCodeSoap - SOAP Interface for the BarCode Web Service
|
||||
|
||||
my $response;
|
||||
$response = $interface->GenerateBarCode();
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
SOAP Interface for the BarCode web service
|
||||
SOAP Interface for the BarCode web service
|
||||
located at http://www.webservicex.net/genericbarcode.asmx.
|
||||
|
||||
=head1 SERVICE BarCode
|
||||
@@ -86,12 +88,12 @@ 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.
|
||||
Method synopsis is displayed with hash refs as parameters.
|
||||
|
||||
The commented class names in the method's parameters denote that objects
|
||||
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
|
||||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
|
||||
@@ -124,10 +126,10 @@ WebserviceX.NET barcode library that provides the means to create barcodes for p
|
||||
},,
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on Fri Nov 9 00:18:35 2007
|
||||
Generated by SOAP::WSDL on Sun Dec 16 20:10:20 2007
|
||||
|
||||
=pod
|
||||
@@ -1,12 +1,13 @@
|
||||
package MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Storable;
|
||||
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::FullerData_x0020_Fortune_x0020_Cookie
|
||||
if not MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie->can('get_class');
|
||||
if not MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie->can('get_class');
|
||||
|
||||
sub START {
|
||||
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
|
||||
@@ -16,11 +17,12 @@ sub START {
|
||||
|
||||
sub readNodeCount {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "readNodeCount must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'readNodeCount',
|
||||
operation => 'readNodeCount',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -38,11 +40,12 @@ sub readNodeCount {
|
||||
|
||||
sub GetFortuneCookie {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetFortuneCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetFortuneCookie',
|
||||
operation => 'GetFortuneCookie',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -60,11 +63,12 @@ sub GetFortuneCookie {
|
||||
|
||||
sub CountCookies {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "CountCookies must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'CountCookies',
|
||||
operation => 'CountCookies',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -82,11 +86,12 @@ sub CountCookies {
|
||||
|
||||
sub GetSpecificCookie {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetSpecificCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetSpecificCookie',
|
||||
operation => 'GetSpecificCookie',
|
||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -117,9 +122,22 @@ __END__
|
||||
|
||||
MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap - SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie Web Service
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||
my $interface = MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap->new();
|
||||
|
||||
my $response;
|
||||
$response = $interface->readNodeCount();
|
||||
$response = $interface->GetFortuneCookie();
|
||||
$response = $interface->CountCookies();
|
||||
$response = $interface->GetSpecificCookie();
|
||||
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
||||
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
||||
located at http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx.
|
||||
|
||||
=head1 SERVICE FullerData_x0020_Fortune_x0020_Cookie
|
||||
@@ -142,12 +160,12 @@ 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.
|
||||
Method synopsis is displayed with hash refs as parameters.
|
||||
|
||||
The commented class names in the method's parameters denote that objects
|
||||
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
|
||||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
|
||||
@@ -156,21 +174,21 @@ methods, as long as you meet the structure.
|
||||
|
||||
Display the number of nodes specified in fortune XML document
|
||||
|
||||
$interface->readNodeCount(,
|
||||
$interface->readNodeCount(,,
|
||||
);
|
||||
|
||||
=head3 GetFortuneCookie
|
||||
|
||||
Get a random fortune cookie from the XML document
|
||||
|
||||
$interface->GetFortuneCookie(,
|
||||
$interface->GetFortuneCookie(,,
|
||||
);
|
||||
|
||||
=head3 CountCookies
|
||||
|
||||
Count the actual number of nodes in the XML document of fortunes
|
||||
|
||||
$interface->CountCookies(,
|
||||
$interface->CountCookies(,,
|
||||
);
|
||||
|
||||
=head3 GetSpecificCookie
|
||||
@@ -179,13 +197,13 @@ Get a specific cookie by the XML node number
|
||||
|
||||
$interface->GetSpecificCookie( {
|
||||
index => $some_value, # int
|
||||
},
|
||||
},,
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on Tue Nov 6 20:56:46 2007
|
||||
Generated by SOAP::WSDL on Sun Dec 16 19:58:30 2007
|
||||
|
||||
=pod
|
||||
@@ -1,12 +1,13 @@
|
||||
package MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Storable;
|
||||
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::GlobalWeather
|
||||
if not MyTypemaps::GlobalWeather->can('get_class');
|
||||
if not MyTypemaps::GlobalWeather->can('get_class');
|
||||
|
||||
sub START {
|
||||
$_[0]->set_proxy('http://www.webservicex.net/globalweather.asmx') if not $_[2]->{proxy};
|
||||
@@ -16,11 +17,12 @@ sub START {
|
||||
|
||||
sub GetWeather {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetWeather must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetWeather',
|
||||
operation => 'GetWeather',
|
||||
soap_action => 'http://www.webserviceX.NET/GetWeather',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -38,11 +40,12 @@ sub GetWeather {
|
||||
|
||||
sub GetCitiesByCountry {
|
||||
my ($self, $body, $header) = @_;
|
||||
die "GetCitiesByCountry must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||
return $self->SUPER::call({
|
||||
operation => 'GetCitiesByCountry',
|
||||
operation => 'GetCitiesByCountry',
|
||||
soap_action => 'http://www.webserviceX.NET/GetCitiesByCountry',
|
||||
style => 'document',
|
||||
body => {
|
||||
body => {
|
||||
|
||||
'use' => 'literal',
|
||||
namespace => '',
|
||||
@@ -73,9 +76,20 @@ __END__
|
||||
|
||||
MyInterfaces::GlobalWeather::GlobalWeatherSoap - SOAP Interface for the GlobalWeather Web Service
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||
my $interface = MyInterfaces::GlobalWeather::GlobalWeatherSoap->new();
|
||||
|
||||
my $response;
|
||||
$response = $interface->GetWeather();
|
||||
$response = $interface->GetCitiesByCountry();
|
||||
|
||||
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
SOAP Interface for the GlobalWeather web service
|
||||
SOAP Interface for the GlobalWeather web service
|
||||
located at http://www.webservicex.net/globalweather.asmx.
|
||||
|
||||
=head1 SERVICE GlobalWeather
|
||||
@@ -98,12 +112,12 @@ 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.
|
||||
Method synopsis is displayed with hash refs as parameters.
|
||||
|
||||
The commented class names in the method's parameters denote that objects
|
||||
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
|
||||
You may pass any combination of objects, hash and list refs to these
|
||||
methods, as long as you meet the structure.
|
||||
|
||||
|
||||
@@ -115,7 +129,7 @@ Get weather report for all major cities around the world.
|
||||
$interface->GetWeather( {
|
||||
CityName => $some_value, # string
|
||||
CountryName => $some_value, # string
|
||||
},
|
||||
},,
|
||||
);
|
||||
|
||||
=head3 GetCitiesByCountry
|
||||
@@ -124,13 +138,13 @@ Get all major cities by country name(full / part).
|
||||
|
||||
$interface->GetCitiesByCountry( {
|
||||
CountryName => $some_value, # string
|
||||
},
|
||||
},,
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL on Tue Nov 6 21:00:30 2007
|
||||
Generated by SOAP::WSDL on Sun Dec 16 20:05:01 2007
|
||||
|
||||
=pod
|
||||
@@ -38,12 +38,8 @@ sub sayHello {
|
||||
}, $body, $header);
|
||||
}
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
146
example/lib/MyInterfaces/TestService/TestPort.pm
Normal file
146
example/lib/MyInterfaces/TestService/TestPort.pm
Normal file
@@ -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
|
||||
145
example/lib/MyServer/TestService/TestPort.pm
Normal file
145
example/lib/MyServer/TestService/TestPort.pm
Normal file
@@ -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
|
||||
@@ -10,13 +10,13 @@ our $typemap_1 = {
|
||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||
'GenerateBarCode' => 'MyElements::GenerateBarCode',
|
||||
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GenerateBarCode/BarCodeParam/Width' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'GenerateBarCode/BarCodeParam/Angle' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'GenerateBarCode/BarCodeParam/Width' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||
'GenerateBarCode/BarCodeParam/BarCodeImageFormat' => 'MyTypes::ImageFormats',
|
||||
'GenerateBarCode/BarCodeParam/BGColor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GenerateBarCode/BarCodeParam/Ratio' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::TOKEN',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||
'GenerateBarCode/BarCodeParam/Height' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'GenerateBarCode/BarCodeParam/CheckSum' => 'SOAP::WSDL::XSD::Typelib::Builtin::boolean',
|
||||
'GenerateBarCode/BarCodeParam/checkSumMethod' => 'MyTypes::CheckSumMethod',
|
||||
@@ -27,18 +27,22 @@ our $typemap_1 = {
|
||||
'GenerateBarCodeResponse/GenerateBarCodeResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||
'GenerateBarCodeResponse' => 'MyElements::GenerateBarCodeResponse',
|
||||
'GenerateBarCode/BarCodeParam/Module' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'GenerateBarCode/BarCodeParam' => 'MyTypes::BarCodeData',
|
||||
'GenerateBarCode/BarCodeParam/showTextPosition' => 'MyTypes::ShowTextPosition',
|
||||
'GenerateBarCode/BarCodeParam' => 'MyTypes::BarCodeData',
|
||||
'GenerateBarCode/BarCodeParam/FontName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string'
|
||||
};
|
||||
;
|
||||
|
||||
sub get_class {
|
||||
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__
|
||||
|
||||
@@ -13,7 +13,7 @@ our $typemap_1 = {
|
||||
'GetFortuneCookieResponse' => 'MyElements::GetFortuneCookieResponse',
|
||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||
'GetSpecificCookie' => 'MyElements::GetSpecificCookie',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::TOKEN',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||
'CountCookies' => 'MyElements::CountCookies',
|
||||
'GetSpecificCookie/index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
@@ -24,12 +24,16 @@ our $typemap_1 = {
|
||||
};
|
||||
;
|
||||
|
||||
sub get_class {
|
||||
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__
|
||||
|
||||
@@ -6,7 +6,7 @@ our $typemap_1 = {
|
||||
'GetWeatherResponse/GetWeatherResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'GetWeather' => 'MyElements::GetWeather',
|
||||
'GetCitiesByCountryResponse/GetCitiesByCountryResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::TOKEN',
|
||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||
'GetWeatherResponse' => 'MyElements::GetWeatherResponse',
|
||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||
@@ -20,12 +20,16 @@ our $typemap_1 = {
|
||||
};
|
||||
;
|
||||
|
||||
sub get_class {
|
||||
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__
|
||||
|
||||
92
example/lib/MyTypemaps/TestService.pm
Normal file
92
example/lib/MyTypemaps/TestService.pm
Normal file
@@ -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
|
||||
|
||||
98
example/lib/MyTypes/Address.pm
Normal file
98
example/lib/MyTypes/Address.pm
Normal file
@@ -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
|
||||
|
||||
71
example/lib/MyTypes/ArrayOfContract.pm
Normal file
71
example/lib/MyTypes/ArrayOfContract.pm
Normal file
@@ -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
|
||||
|
||||
98
example/lib/MyTypes/ArrayOfPerson.pm
Normal file
98
example/lib/MyTypes/ArrayOfPerson.pm
Normal file
@@ -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
|
||||
|
||||
164
example/lib/MyTypes/BarCodeData.pm
Normal file
164
example/lib/MyTypes/BarCodeData.pm
Normal file
@@ -0,0 +1,164 @@
|
||||
package MyTypes::BarCodeData;
|
||||
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 %Height_of :ATTR(:get<Height>);
|
||||
my %Width_of :ATTR(:get<Width>);
|
||||
my %Angle_of :ATTR(:get<Angle>);
|
||||
my %Ratio_of :ATTR(:get<Ratio>);
|
||||
my %Module_of :ATTR(:get<Module>);
|
||||
my %Left_of :ATTR(:get<Left>);
|
||||
my %Top_of :ATTR(:get<Top>);
|
||||
my %CheckSum_of :ATTR(:get<CheckSum>);
|
||||
my %FontName_of :ATTR(:get<FontName>);
|
||||
my %BarColor_of :ATTR(:get<BarColor>);
|
||||
my %BGColor_of :ATTR(:get<BGColor>);
|
||||
my %FontSize_of :ATTR(:get<FontSize>);
|
||||
my %barcodeOption_of :ATTR(:get<barcodeOption>);
|
||||
my %barcodeType_of :ATTR(:get<barcodeType>);
|
||||
my %checkSumMethod_of :ATTR(:get<checkSumMethod>);
|
||||
my %showTextPosition_of :ATTR(:get<showTextPosition>);
|
||||
my %BarCodeImageFormat_of :ATTR(:get<BarCodeImageFormat>);
|
||||
|
||||
__PACKAGE__->_factory(
|
||||
[ qw(
|
||||
Height
|
||||
Width
|
||||
Angle
|
||||
Ratio
|
||||
Module
|
||||
Left
|
||||
Top
|
||||
CheckSum
|
||||
FontName
|
||||
BarColor
|
||||
BGColor
|
||||
FontSize
|
||||
barcodeOption
|
||||
barcodeType
|
||||
checkSumMethod
|
||||
showTextPosition
|
||||
BarCodeImageFormat
|
||||
) ],
|
||||
{
|
||||
Height => \%Height_of,
|
||||
Width => \%Width_of,
|
||||
Angle => \%Angle_of,
|
||||
Ratio => \%Ratio_of,
|
||||
Module => \%Module_of,
|
||||
Left => \%Left_of,
|
||||
Top => \%Top_of,
|
||||
CheckSum => \%CheckSum_of,
|
||||
FontName => \%FontName_of,
|
||||
BarColor => \%BarColor_of,
|
||||
BGColor => \%BGColor_of,
|
||||
FontSize => \%FontSize_of,
|
||||
barcodeOption => \%barcodeOption_of,
|
||||
barcodeType => \%barcodeType_of,
|
||||
checkSumMethod => \%checkSumMethod_of,
|
||||
showTextPosition => \%showTextPosition_of,
|
||||
BarCodeImageFormat => \%BarCodeImageFormat_of,
|
||||
},
|
||||
{
|
||||
Height => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
Width => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
Angle => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
Ratio => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
Module => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
Left => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
Top => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||
CheckSum => 'SOAP::WSDL::XSD::Typelib::Builtin::boolean',
|
||||
FontName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
BarColor => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
BGColor => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||
FontSize => 'SOAP::WSDL::XSD::Typelib::Builtin::float',
|
||||
barcodeOption => 'MyTypes::BarcodeOption',
|
||||
barcodeType => 'MyTypes::BarcodeType',
|
||||
checkSumMethod => 'MyTypes::CheckSumMethod',
|
||||
showTextPosition => 'MyTypes::ShowTextPosition',
|
||||
BarCodeImageFormat => 'MyTypes::ImageFormats',
|
||||
}
|
||||
);
|
||||
|
||||
} # end BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
MyTypes::BarCodeData
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined complextype
|
||||
BarCodeData from the namespace http://www.webservicex.net/.
|
||||
|
||||
=head2 PROPERTIES
|
||||
|
||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||
methods:
|
||||
|
||||
Height
|
||||
Width
|
||||
Angle
|
||||
Ratio
|
||||
Module
|
||||
Left
|
||||
Top
|
||||
CheckSum
|
||||
FontName
|
||||
BarColor
|
||||
BGColor
|
||||
FontSize
|
||||
barcodeOption
|
||||
barcodeType
|
||||
checkSumMethod
|
||||
showTextPosition
|
||||
BarCodeImageFormat
|
||||
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
Constructor. The following data structure may be passed to new():
|
||||
|
||||
{ # MyTypes::BarCodeData
|
||||
Height => $some_value, # int
|
||||
Width => $some_value, # int
|
||||
Angle => $some_value, # int
|
||||
Ratio => $some_value, # int
|
||||
Module => $some_value, # int
|
||||
Left => $some_value, # int
|
||||
Top => $some_value, # int
|
||||
CheckSum => $some_value, # boolean
|
||||
FontName => $some_value, # string
|
||||
BarColor => $some_value, # string
|
||||
BGColor => $some_value, # string
|
||||
FontSize => $some_value, # float
|
||||
barcodeOption => $some_value, # BarcodeOption
|
||||
barcodeType => $some_value, # BarcodeType
|
||||
checkSumMethod => $some_value, # CheckSumMethod
|
||||
showTextPosition => $some_value, # ShowTextPosition
|
||||
BarCodeImageFormat => $some_value, # ImageFormats
|
||||
},
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Generated by SOAP::WSDL
|
||||
|
||||
=cut
|
||||
|
||||
56
example/lib/MyTypes/BarcodeOption.pm
Normal file
56
example/lib/MyTypes/BarcodeOption.pm
Normal file
@@ -0,0 +1,56 @@
|
||||
package MyTypes::BarcodeOption;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||
|
||||
# derivation by restriction
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 MyTypes::BarcodeOption
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined simpleType
|
||||
BarcodeOption from the namespace http://www.webservicex.net/.
|
||||
|
||||
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
|
||||
|
||||
56
example/lib/MyTypes/BarcodeType.pm
Normal file
56
example/lib/MyTypes/BarcodeType.pm
Normal file
@@ -0,0 +1,56 @@
|
||||
package MyTypes::BarcodeType;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||
|
||||
# derivation by restriction
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 MyTypes::BarcodeType
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined simpleType
|
||||
BarcodeType from the namespace http://www.webservicex.net/.
|
||||
|
||||
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
|
||||
|
||||
56
example/lib/MyTypes/CheckSumMethod.pm
Normal file
56
example/lib/MyTypes/CheckSumMethod.pm
Normal file
@@ -0,0 +1,56 @@
|
||||
package MyTypes::CheckSumMethod;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||
|
||||
# derivation by restriction
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 MyTypes::CheckSumMethod
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined simpleType
|
||||
CheckSumMethod from the namespace http://www.webservicex.net/.
|
||||
|
||||
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
|
||||
|
||||
74
example/lib/MyTypes/Contract.pm
Normal file
74
example/lib/MyTypes/Contract.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/ImageFormats.pm
Normal file
56
example/lib/MyTypes/ImageFormats.pm
Normal file
@@ -0,0 +1,56 @@
|
||||
package MyTypes::ImageFormats;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||
|
||||
# derivation by restriction
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 MyTypes::ImageFormats
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined simpleType
|
||||
ImageFormats from the namespace http://www.webservicex.net/.
|
||||
|
||||
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
|
||||
|
||||
131
example/lib/MyTypes/Person.pm
Normal file
131
example/lib/MyTypes/Person.pm
Normal file
@@ -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
|
||||
|
||||
68
example/lib/MyTypes/PersonID.pm
Normal file
68
example/lib/MyTypes/PersonID.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/PhoneNumber.pm
Normal file
56
example/lib/MyTypes/PhoneNumber.pm
Normal file
@@ -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
|
||||
|
||||
56
example/lib/MyTypes/ShowTextPosition.pm
Normal file
56
example/lib/MyTypes/ShowTextPosition.pm
Normal file
@@ -0,0 +1,56 @@
|
||||
package MyTypes::ShowTextPosition;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub get_xmlns { 'http://www.webservicex.net/'};
|
||||
|
||||
# derivation by restriction
|
||||
use base qw(
|
||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||
);
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 MyTypes::ShowTextPosition
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Perl data type class for the XML Schema defined simpleType
|
||||
ShowTextPosition from the namespace http://www.webservicex.net/.
|
||||
|
||||
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
|
||||
|
||||
12
example/person.pl
Normal file
12
example/person.pl
Normal file
@@ -0,0 +1,12 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use lib 'lib';
|
||||
use MyInterfaces::TestService::TestPort;
|
||||
|
||||
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||
|
||||
my $result = $soap->ListPerson({})
|
||||
or die "error calling SOAP method";
|
||||
|
||||
print "Found " . @{ $result->get_out()->get_NewElement } . " persons\n";
|
||||
|
||||
21
example/person_compile.pl
Normal file
21
example/person_compile.pl
Normal file
@@ -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";
|
||||
121
example/wsdl/Person.wsdl
Normal file
121
example/wsdl/Person.wsdl
Normal file
@@ -0,0 +1,121 @@
|
||||
<?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:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
|
||||
<xsd:element name="ListPersonResponse">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="out" type="tns:ArrayOfPerson" />
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:complexType name="Person">
|
||||
|
||||
<xsd:sequence>
|
||||
<xsd:element name="PersonID" type="tns:PersonID" />
|
||||
<xsd:element name="Salutation" type="xsd:string" />
|
||||
<xsd:element name="Name" type="xsd:string" />
|
||||
<xsd:element name="GivenName" type="xsd:string" />
|
||||
<xsd:element name="DateOfBirth" type="xsd:date" />
|
||||
<xsd:element name="HomeAddress" type="tns:Address"
|
||||
maxOccurs="1" minOccurs="1" />
|
||||
<xsd:element name="WorkAddress" type="tns:Address"
|
||||
maxOccurs="1" minOccurs="0" />
|
||||
<xsd:element name="Contracts"
|
||||
type="tns:ArrayOfContract" />
|
||||
</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: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 name="ZIP" type="xsd:string" />
|
||||
<xsd:element name="City" type="xsd:string" />
|
||||
<xsd:element name="Country" type="xsd:string" />
|
||||
<xsd:element name="PhoneNumber" type="tns:PhoneNumber" />
|
||||
<xsd:element name="MobilePhoneNumber" type="tns:PhoneNumber" />
|
||||
</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 name="ContractName" type="xsd:string" />
|
||||
</xsd:sequence>
|
||||
</xsd:complexType>
|
||||
</xsd:schema>
|
||||
</wsdl:types>
|
||||
<wsdl:message name="ListPersonRequest">
|
||||
<wsdl:part name="parameters" element="tns:ListPerson" />
|
||||
</wsdl:message>
|
||||
<wsdl:message name="ListPersonResponse">
|
||||
<wsdl:part name="parameters" element="tns:ListPersonResponse" />
|
||||
</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>
|
||||
@@ -669,16 +669,16 @@ The following facets have no influence yet:
|
||||
|
||||
=item * L<SOAP::Lite|SOAP::Lite>
|
||||
|
||||
Full featured SOAP-library, little WSDL support. Supports rpc-encoded style only. Many protocols supported.
|
||||
Full featured SOAP-library, little WSDL support. Supports rpc-encoded style
|
||||
only. Many protocols supported.
|
||||
|
||||
=item * L<XML::Compile::WSDL|XML::Compile::WSDL> / L<XML::Compile::SOAP|XML::Compile::SOAP>
|
||||
|
||||
A promising-looking approach derived from a cool functional DOM-based XML schema parser.
|
||||
Creates parser/generator functions for SOAP messages. Includes SOAP Client
|
||||
and Server implementatios.
|
||||
|
||||
Will support encoding/decoding of SOAP messages based on WSDL definitions.
|
||||
|
||||
Not yet finished at the time of writing - but you may wish to give it a try, especially
|
||||
if you need to adhere very closely to the XML Schema / WSDL specs.
|
||||
You might want to give it a try, especially if you need to adhere very
|
||||
closely to the XML Schema / WSDL specs.
|
||||
|
||||
=back
|
||||
|
||||
@@ -730,9 +730,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 427 $
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: WSDL.pm 427 2007-12-02 22:20:24Z kutterma $
|
||||
$Id: WSDL.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
use List::Util qw(first);
|
||||
use Carp qw(croak carp confess);
|
||||
|
||||
our $VERSION='2.00_25';
|
||||
our $VERSION='2.00_27';
|
||||
|
||||
my %id_of :ATTR(:name<id> :default<()>);
|
||||
my %name_of :ATTR(:name<name> :default<()>);
|
||||
@@ -14,6 +14,11 @@ my %targetNamespace_of :ATTR(:name<targetNamespace> :default<()>);
|
||||
my %xmlns_of :ATTR(:name<xmlns> :default<{}>);
|
||||
my %parent_of :ATTR(:name<parent> :default<()>);
|
||||
|
||||
sub START {
|
||||
my ($self, $ident, $arg_ref) = @_;
|
||||
$xmlns_of{ $ident }->{ '#default' } = $self->get_xmlns()->{ '#default' };
|
||||
}
|
||||
|
||||
sub DEMOLISH {
|
||||
my $self = shift;
|
||||
# delete upward references
|
||||
@@ -82,7 +87,7 @@ sub AUTOMETHOD {
|
||||
return $result_ref->[0];
|
||||
};
|
||||
}
|
||||
confess "$subname not found in class " . (ref $self || $self) ;
|
||||
confess "$subname not found in class " . ref $self;
|
||||
}
|
||||
|
||||
sub init {
|
||||
@@ -95,11 +100,6 @@ sub init {
|
||||
$xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value };
|
||||
next;
|
||||
}
|
||||
elsif ($value->{ Name } =~m{^xmlns$}xms) {
|
||||
# just ignore xmlns = for now
|
||||
# TODO handle xmlns correctly - maybe via setting a prefix ?
|
||||
next;
|
||||
}
|
||||
|
||||
my $name = $value->{ LocalName };
|
||||
my $method = "set_$name";
|
||||
@@ -110,16 +110,23 @@ sub init {
|
||||
|
||||
sub expand {
|
||||
my ($self, , $qname) = @_;
|
||||
my $ns_of = $self->get_xmlns();
|
||||
if (not $qname=~m{:}xm) {
|
||||
die "un-prefixed element name <$qname> found, but no default namespace set\n"
|
||||
if not defined $ns_of->{ '#default' };
|
||||
return $ns_of->{ '#default' }, $qname;
|
||||
}
|
||||
|
||||
my ($prefix, $localname) = split /:/x, $qname;
|
||||
# my %ns_map = reverse %{ $self->get_xmlns() };
|
||||
my %ns_map = %{ $self->get_xmlns() };
|
||||
return ($ns_map{ $prefix }, $localname) if ($ns_map{ $prefix });
|
||||
|
||||
|
||||
return ($ns_of->{ $prefix }, $localname) if ($ns_of->{ $prefix });
|
||||
|
||||
if (my $parent = $self->get_parent()) {
|
||||
return $parent->expand($qname);
|
||||
}
|
||||
confess "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are"
|
||||
. join(', ', keys %ns_map);
|
||||
. join(', ', keys %{ $ns_of });
|
||||
}
|
||||
sub _expand;
|
||||
*_expand = \&expand;
|
||||
|
||||
@@ -11,7 +11,7 @@ use SOAP::WSDL::Factory::Serializer;
|
||||
use SOAP::WSDL::Factory::Transport;
|
||||
use SOAP::WSDL::Expat::MessageParser;
|
||||
|
||||
our $VERSION = '2.00_25';
|
||||
our $VERSION = '2.00_27';
|
||||
|
||||
my %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
||||
my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
|
||||
@@ -268,17 +268,6 @@ Default:
|
||||
|
||||
text/xml; charset: utf8
|
||||
|
||||
=head3 set_trace
|
||||
|
||||
$soap->set_trace(1);
|
||||
$soap->set_trace( sub { Log::Log4perl::get_logger()->debug( @_ ) } );
|
||||
|
||||
When set to a true value, tracing (via warn) is enabled.
|
||||
|
||||
When set to a code reference, this function will be called on every
|
||||
trace call, making it really easy for you to set up log4perl logging
|
||||
or whatever you need.
|
||||
|
||||
=head2 Features different from SOAP::Lite
|
||||
|
||||
SOAP::WSDL does not aim to be a complete replacement for SOAP::Lite - the
|
||||
@@ -371,9 +360,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 427 $
|
||||
$Rev: 455 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Client.pm 427 2007-12-02 22:20:24Z kutterma $
|
||||
$Id: Client.pm 455 2007-12-14 15:50:16Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -10,9 +10,16 @@ sub call {
|
||||
my ($self, $method, $body, $header) = @_;
|
||||
if (not blessed $body) {
|
||||
$body = {} if not defined $body;
|
||||
my $class = $method->{ body }->{ parts }->[0];
|
||||
eval "require $class" || die $@;
|
||||
$body = $class->new($body);
|
||||
$body = ref $body eq 'ARRAY' ? $body : [ $body ];
|
||||
my $index = 0;
|
||||
my @part_from;
|
||||
foreach my $part (@{ $body }) {
|
||||
my $class = $method->{ body }->{ parts }->[$index];
|
||||
eval "require $class" || die $@;
|
||||
push @part_from, $class->new($part);
|
||||
$index++;
|
||||
}
|
||||
$body = $#part_from ? \@part_from : $part_from[0];
|
||||
}
|
||||
|
||||
# if we have a header
|
||||
@@ -94,9 +101,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 427 $
|
||||
$Rev: 440 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Base.pm 427 2007-12-02 22:20:24Z kutterma $
|
||||
$Id: Base.pm 440 2007-12-04 22:24:33Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -9,7 +9,7 @@ use List::Util qw(first);
|
||||
use Class::Std::Fast::Storable;
|
||||
use base qw(SOAP::WSDL::Base);
|
||||
|
||||
our $VERSION='2.00_25';
|
||||
our $VERSION='2.00_27';
|
||||
|
||||
my %types_of :ATTR(:name<types> :default<[]>);
|
||||
my %message_of :ATTR(:name<message> :default<()>);
|
||||
@@ -18,7 +18,7 @@ my %binding_of :ATTR(:name<binding> :default<()>);
|
||||
my %service_of :ATTR(:name<service> :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();
|
||||
%attributes_of = (
|
||||
binding => \%binding_of,
|
||||
@@ -105,7 +105,7 @@ Returns the message matching the namespace/localname pair passed as arguments.
|
||||
Accessors/Mutators for accessing / setting the E<gt>typesE<lt> child
|
||||
element(s).
|
||||
|
||||
=head1 LICENSE and COPYRIGHT
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
@@ -118,9 +118,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 427 $
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Definitions.pm 427 2007-12-02 22:20:24Z kutterma $
|
||||
$Id: Definitions.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -3,7 +3,7 @@ use strict;
|
||||
use warnings;
|
||||
use XML::Parser::Expat;
|
||||
|
||||
our $VERSION = '2.00_24';
|
||||
our $VERSION = '2.00_27';
|
||||
|
||||
sub new {
|
||||
my ($class, $args) = @_;
|
||||
@@ -41,4 +41,38 @@ sub get_data {
|
||||
return $_[0]->{ data };
|
||||
}
|
||||
|
||||
1;
|
||||
1;
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Expat::Base - Base class for XML::Parser::Expat based XML parsers
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Base class for XML::Parser::Expat based XML parsers. All XML::SAX::Expat based
|
||||
parsers in SOAP::WSDL inherit from this class.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Replace the whitespace by @ for E-Mail Address.
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 Repository information
|
||||
|
||||
$Id: $
|
||||
|
||||
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
||||
$LastChangedRevision: 218 $
|
||||
$LastChangedBy: kutterma $
|
||||
|
||||
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||
|
||||
@@ -4,7 +4,7 @@ use strict;
|
||||
use warnings;
|
||||
use base qw(SOAP::WSDL::Expat::Base);
|
||||
|
||||
our $VERSION = '2.00_24';
|
||||
our $VERSION = '2.00_27';
|
||||
|
||||
sub _initialize {
|
||||
my ($self, $parser) = @_;
|
||||
@@ -113,13 +113,16 @@ Replace the whitespace by @ for E-Mail Address.
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 COPYING
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
This module may be used under the same terms as perl itself.
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 Repository information
|
||||
|
||||
$ID: $
|
||||
$Id: $
|
||||
|
||||
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
||||
$LastChangedRevision: 218 $
|
||||
|
||||
@@ -4,7 +4,7 @@ use strict;
|
||||
use warnings;
|
||||
use Carp qw(croak confess);
|
||||
|
||||
our $VERSION = q{2.00_25};
|
||||
our $VERSION = q{2.00_27};
|
||||
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||
@@ -48,7 +48,7 @@ sub load_classes {
|
||||
|
||||
# a bad test - do you know a better one?
|
||||
next if $class eq '__SKIP__';
|
||||
next if defined @{ "$class\::ISA"}; # check if namespace exists
|
||||
next if defined *{ "$class\::" }; # check if namespace exists
|
||||
|
||||
$class =~s{ :: }{/}xmsg;
|
||||
$class .= '.pm';
|
||||
@@ -260,7 +260,7 @@ See L<SOAP::WSDL::Manual::Parser> for details.
|
||||
Sometimes there's unneccessary information transported in SOAP messages.
|
||||
|
||||
To skip XML nodes (including all child nodes), just edit the type map for
|
||||
the message, set the type map entry to '__SKIP__', and comment out all
|
||||
the message, set the type map entry to '__SKIP__', and comment out all
|
||||
child elements you want to skip.
|
||||
|
||||
=head1 Bugs and Limitations
|
||||
@@ -281,16 +281,19 @@ Replace the whitespace by @ for E-Mail Address.
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 COPYING
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
This module may be used under the same terms as perl itself.
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 Repository information
|
||||
|
||||
$ID: $
|
||||
$Id: $
|
||||
|
||||
$LastChangedDate: 2007-12-02 23:20:24 +0100 (So, 02 Dez 2007) $
|
||||
$LastChangedRevision: 427 $
|
||||
$LastChangedDate: 2007-12-24 11:23:52 +0100 (Mo, 24 Dez 2007) $
|
||||
$LastChangedRevision: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
||||
|
||||
@@ -56,22 +56,22 @@ See L<SOAP::WSDL::Manual::Parser> for details.
|
||||
|
||||
See SOAP::WSDL::Expat::MessageParser
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2007 Martin Kutter. All rights reserved.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribte/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 391 $
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: MessageStreamParser.pm 391 2007-11-17 21:56:13Z kutterma $
|
||||
$Id: MessageStreamParser.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use Carp;
|
||||
use SOAP::WSDL::TypeLookup;
|
||||
use base qw(SOAP::WSDL::Expat::Base);
|
||||
|
||||
our $VERSION = q{2.00_25};
|
||||
our $VERSION = q{2.00_27};
|
||||
|
||||
sub _initialize {
|
||||
my ($self, $parser) = @_;
|
||||
@@ -36,7 +36,9 @@ sub _initialize {
|
||||
eval "require $action->{ class }";
|
||||
croak $@ if ($@);
|
||||
|
||||
my $obj = $action->{ class }->new({ parent => $current })
|
||||
my $obj = $action->{ class }->new({ parent => $current,
|
||||
xmlns => { '#default' => $parser->namespace($localname) }
|
||||
})
|
||||
->init( _fixup_attrs( $parser, %attrs ) );
|
||||
|
||||
if ($current) {
|
||||
@@ -143,3 +145,43 @@ sub _fixup_attrs {
|
||||
|
||||
1;
|
||||
|
||||
|
||||
=pod
|
||||
|
||||
=head1 NAME
|
||||
|
||||
SOAP::WSDL::Expat::WSDLParser - Parse WSDL files into object trees
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
||||
$parser->parse( $xml );
|
||||
my $obj = $parser->get_data();
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
WSDL parser used by SOAP::WSDL.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Replace the whitespace by @ for E-Mail Address.
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 Repository information
|
||||
|
||||
$Id: $
|
||||
|
||||
$LastChangedDate: 2007-12-24 11:23:52 +0100 (Mo, 24 Dez 2007) $
|
||||
$LastChangedRevision: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ passed as a single hash ref:
|
||||
|
||||
Copyright 2007 Martin Kutter. All rights reserved.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribte/modify it under
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -155,7 +155,7 @@ Set user-defined typemap snippet
|
||||
|
||||
Copyright 2007 Martin Kutter. All rights reserved.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribte/modify it under
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -37,8 +37,10 @@ sub get_transport {
|
||||
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}smx;
|
||||
|
||||
if ($registered_transport_of{ $scheme }) {
|
||||
eval "require $registered_transport_of{ $scheme }"
|
||||
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
|
||||
no strict qw(refs);
|
||||
defined %{ "$registered_transport_of{ $scheme }::" }
|
||||
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
|
||||
# a package withoug the ::Client appended, and then
|
||||
@@ -68,8 +70,10 @@ sub get_transport {
|
||||
}
|
||||
|
||||
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
||||
eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
|
||||
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
|
||||
no strict qw(refs);
|
||||
defined %{ "$SOAP_WSDL_TRANSPORT_OF{ $scheme }::" }
|
||||
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 );
|
||||
}
|
||||
|
||||
@@ -236,9 +240,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 427 $
|
||||
$Rev: 459 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Transport.pm 427 2007-12-02 22:20:24Z kutterma $
|
||||
$Id: Transport.pm 459 2007-12-16 16:00:14Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
||||
use File::Basename;
|
||||
use File::Spec;
|
||||
|
||||
our $VERSION = q{2.00_25};
|
||||
our $VERSION = q{2.00_27};
|
||||
|
||||
use SOAP::WSDL::Generator::Visitor::Typemap;
|
||||
use SOAP::WSDL::Generator::Visitor::Typelib;
|
||||
@@ -55,9 +55,11 @@ sub generate {
|
||||
}
|
||||
|
||||
sub generate_typelib {
|
||||
my ($self) = @_;
|
||||
my ($self, $arg_ref) = @_;
|
||||
# $output_of{ ident $self } = "";
|
||||
my @schema = @{ $self->get_definitions()->first_types()->get_schema() };
|
||||
my @schema = exists $arg_ref->{ schema }
|
||||
? @{ $arg_ref->{schema} }
|
||||
: @{ $self->get_definitions()->first_types()->get_schema() };
|
||||
for my $type (map { @{ $_->get_type() } , @{ $_->get_element() } } @schema[1..$#schema] ) {
|
||||
$type->_accept( $self );
|
||||
}
|
||||
@@ -164,6 +166,7 @@ sub _generate_filename :PRIVATE {
|
||||
my ($self, @parts) = @_;
|
||||
my $name = join '::', @parts;
|
||||
$name =~s{ \. }{::}xmsg;
|
||||
$name =~s{ \- }{_}xmsg;
|
||||
$name =~s{ :: }{/}xmsg;
|
||||
return "$name.pm";
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
package [% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('^.+\.','') %];
|
||||
[% interface_name = interface_prefix _ '::'
|
||||
_ service.get_name.replace('\.', '::') _ '::'
|
||||
_ port.get_name.replace('^.+\.','');
|
||||
interface_name = interface_name.replace('-','_'); -%]
|
||||
package [% interface_name %];
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
@@ -6,12 +10,12 @@ use Scalar::Util qw(blessed);
|
||||
use base qw(SOAP::WSDL::Client::Base);
|
||||
|
||||
# only load if it hasn't been loaded before
|
||||
require [% typemap_prefix %]::[% service.get_name.replace('\.', '::') %]
|
||||
if not [% typemap_prefix %]::[% service.get_name.replace('\.', '::') %]->can('get_class');
|
||||
require [% typemap_prefix %]::[% service.get_name.replace('\.', '::').replace('-', '_') %]
|
||||
if not [% typemap_prefix %]::[% service.get_name.replace('\.', '::').replace('-', '_') %]->can('get_class');
|
||||
|
||||
sub START {
|
||||
$_[0]->set_proxy('[% port.first_address.get_location %]') if not $_[2]->{proxy};
|
||||
$_[0]->set_class_resolver('[% typemap_prefix %]::[% service.get_name.replace('\.', '::') %]')
|
||||
$_[0]->set_class_resolver('[% typemap_prefix %]::[% service.get_name.replace('\.', '::').replace('-', '_') %]')
|
||||
if not $_[2]->{class_resolver};
|
||||
}
|
||||
|
||||
@@ -33,13 +37,12 @@ __END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
||||
[% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %] - SOAP Interface for the [% service.get_name %] Web Service
|
||||
[% interface_name %] - SOAP Interface for the [% service.get_name %] Web Service
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use [% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %];
|
||||
my $interface = [% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %]->new();
|
||||
use [% interface_name %];
|
||||
my $interface = [% interface_name %]->new();
|
||||
|
||||
my $response;
|
||||
[% FOREACH operation = binding.get_operation;
|
||||
|
||||
@@ -55,6 +55,11 @@
|
||||
: die "input must have either type or element";
|
||||
} @{ $part_from };
|
||||
}
|
||||
|
||||
warn "Multiple parts detected in message " . $stash->{ message }->get_name() . ".\n",
|
||||
"WS-I BP demands 0 to 1 parts in message body\n"
|
||||
if (@parts > 1);
|
||||
|
||||
$stash->{ parts } = \@parts;
|
||||
|
||||
[% END %]
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
package [% server_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('^.+\.','') %];
|
||||
[% server_name = server_prefix _ '::'
|
||||
_ service.get_name.replace('\.', '::') _ '::'
|
||||
_ port.get_name.replace('^.+\.','');
|
||||
server_name = server_name.replace('-','_'); -%]
|
||||
package [% server_name %];
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
@@ -23,7 +27,7 @@ my $action_map_ref = {
|
||||
|
||||
sub START {
|
||||
my ($self, $ident, $arg_ref) = @_;
|
||||
eval "require $transport_class_of{ $ident }"
|
||||
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,
|
||||
@@ -46,12 +50,12 @@ __END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
[% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %] - SOAP Server Class for the [% service.get_name %] Web Service
|
||||
[% server_name %] - SOAP Server Class for the [% service.get_name %] Web Service
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use [% server_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %];
|
||||
my $server = [% server_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %]->new({
|
||||
use [% server_name %];
|
||||
my $server = [% server_name %]->new({
|
||||
dispatch_to => 'My::Handler::Class',
|
||||
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||
});
|
||||
@@ -79,7 +83,7 @@ located at [% port.first_address.get_location %].
|
||||
|
||||
Constructor.
|
||||
|
||||
The C<dispatch_to> argument is mandatory. It must be a class or object
|
||||
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
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||
port_op.get_documentation %]
|
||||
|
||||
sub [% operation.get_name %](
|
||||
sub [% operation.get_name %] {
|
||||
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 [% INCLUDE Server/POD/Message.tt %]
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#element;
|
||||
#STOP;
|
||||
-%]
|
||||
[% element_prefix %]::[% element.get_name.replace('\.', '::') %]->new([%
|
||||
[% element_prefix %]::[% element.get_name.replace('\.', '::') %]->new([%
|
||||
type = element.first_complexType || element.first_simpleType || definitions.first_types.find_type(
|
||||
element.expand( element.get_type ) );
|
||||
INCLUDE Interface/POD/Type.tt; %]
|
||||
|
||||
@@ -22,7 +22,7 @@ __END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
[% typemap_prefix %]::[% service.get_name.replace('\.','::') %]; - typemap for ::[% service.get_name %];
|
||||
[% typemap_prefix %]::[% service.get_name.replace('\.','::').replace('-', '_') %]; - typemap for ::[% service.get_name %];
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package [% type_prefix %]::[% complexType.get_name %];
|
||||
package [% type_prefix %]::[% complexType.get_name.replace('\.','::').replace('-','_') %];
|
||||
use strict;
|
||||
use warnings;
|
||||
[% INCLUDE complexType/contentModel.tt %]
|
||||
@@ -12,7 +12,7 @@ use warnings;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
[% type_prefix %]::[% complexType.get_name %]
|
||||
[% type_prefix %]::[% complexType.get_name.replace('\.','::').replace('-','_') %]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[%
|
||||
|
||||
base_name=complexType.expand( complexType.get_base);
|
||||
base_name=complexType.expand( complexType.get_base );
|
||||
base_type = definitions.first_types.find_type( base_name );
|
||||
|
||||
element_from = complexType.get_element;
|
||||
@@ -8,12 +8,16 @@ element_from = complexType.get_element;
|
||||
#
|
||||
# Sanity check: All original elements must be noted first
|
||||
#
|
||||
FOREACH element = base_type.get_element;
|
||||
IF element_from.${ loop.index }.get_name != element.get_name;
|
||||
THROW WSDL "${element.get_name} not found at position ${ loop.index } in extension type ${ complexType.get_name }";
|
||||
element_list = base_type.get_element;
|
||||
|
||||
FOREACH element = element_from;
|
||||
IF element_list.${ 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 }";
|
||||
END;
|
||||
END;
|
||||
|
||||
complexType.set_element( element_list );
|
||||
|
||||
-%]
|
||||
use base qw([% type_prefix %]::[% base_name.1.replace('\.', '::') %]);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package [% element_prefix %]::[% element.get_name %];
|
||||
package [% element_prefix %]::[% element.get_name.replace('\.','::') %];
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package [% type_prefix %]::[% simpleType.get_name %];
|
||||
package [% type_prefix %]::[% simpleType.get_name.replace('\.','::').replace('-','_') %];
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
@@ -13,7 +13,7 @@ sub get_xmlns { '[% simpleType.get_targetNamespace %]'};
|
||||
|
||||
=pod
|
||||
|
||||
=head1 [% type_prefix %]::[% simpleType.get_name %]
|
||||
=head1 [% type_prefix %]::[% simpleType.get_name.replace('\.','::').replace('-','_') %]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ SOAP::WSDL::Generator::Visitor - SOAP::WSDL's Visitor-based Code Generator
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
SOAP::WSDL featores a code generating facility. This code generation facility
|
||||
SOAP::WSDL features a code generating facility. This code generation facility
|
||||
(in fact there are several of them) is implemented as Visitor to
|
||||
SOAP::WSDL::Base-derived objects.
|
||||
|
||||
@@ -186,8 +186,8 @@ mimicing .NET's .asmx example pages.
|
||||
|
||||
=back
|
||||
|
||||
All these behaviours could well (and has historically been) implemented in the
|
||||
classes holding the WSDL data. This made these classes rather bloated, and
|
||||
All these behaviours could well be (and have historically been) implemented in
|
||||
the classes holding the WSDL data. This made these classes rather bloated, and
|
||||
made it hard to change behaviour (like, supporting SOAP Headers,
|
||||
supporting atomic types and other features which were missing from early
|
||||
versions of SOAP::WSDL).
|
||||
|
||||
@@ -123,7 +123,7 @@ sub visit_Part {
|
||||
# TODO: auto-generate element for RPC bindings
|
||||
if ( my $type_name = $part->get_type ) {
|
||||
# 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)
|
||||
@@ -211,6 +211,8 @@ sub visit_XSD_Element {
|
||||
|
||||
# for atomic and complex types , and ref elements
|
||||
my $typeclass = join q{::}, $element_prefix_of{$ident}, $element->get_name();
|
||||
$typeclass =~s{\.}{::}g;
|
||||
$typeclass =~s{\-}{_}g;
|
||||
$self->set_typemap_entry($typeclass);
|
||||
|
||||
$self->process_atomic_type( $element->first_complexType()
|
||||
@@ -225,6 +227,8 @@ sub visit_XSD_Element {
|
||||
if (not defined($parent)) {
|
||||
# for atomic and complex types , and ref elements
|
||||
my $typeclass = join q{::}, $element_prefix_of{$ident}, $element->get_name();
|
||||
$typeclass =~s{\.}{::}g;
|
||||
$typeclass =~s{\-}{_}g;
|
||||
$self->set_typemap_entry($typeclass);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ SOAP::WSDL::Manual - Accessing WSDL based web services
|
||||
|
||||
=item * Create WSDL bindings
|
||||
|
||||
perl wsdl2perl.pl -b base_dir URL
|
||||
perl wsdl2perl.pl -b base_dir URL
|
||||
|
||||
=item * Look what has been generated
|
||||
|
||||
@@ -37,7 +37,7 @@ The results of all calls to your service object's methods (except new) are
|
||||
objects based on SOAP::WSDL's XML schema implementation.
|
||||
|
||||
To access the object's properties use get_NAME / set_NAME getter/setter
|
||||
methods whith NAME corresponding to the XML tag name / the hash structure as
|
||||
methods with NAME corresponding to the XML tag name / the hash structure as
|
||||
showed in the generated pod.
|
||||
|
||||
=item * Run script
|
||||
@@ -91,7 +91,7 @@ and you may even want to add custom typemap elements.
|
||||
|
||||
There should be a bunch of classes for types (in the MyTypes:: namespace by
|
||||
default), elements (in MyElements::), and at least one typemap (in
|
||||
MyTypemaps::) and one ore more interface classes (in MyInterfaces::).
|
||||
MyTypemaps::) and one or more interface classes (in MyInterfaces::).
|
||||
|
||||
If you don't already know the details of the web service you're going to
|
||||
instrument, it's now time to read the perldoc of the generated interface
|
||||
@@ -111,7 +111,7 @@ included perldoc will be, too - if not, blame the web service author.
|
||||
print $result;
|
||||
|
||||
The above handling of errors ("die $result if not $result") may look a bit
|
||||
strange - it is due to the nature of
|
||||
strange - it is due to the nature of the
|
||||
L<SOAP::WSDL::SOAP::Typelib::Fault11|SOAP::WSDL::SOAP::Typelib::Fault11>
|
||||
objects SOAP::WSDL uses for signalling failure.
|
||||
|
||||
@@ -144,12 +144,12 @@ generated classes - while generated classes may be many, you probably will
|
||||
only implement a few by hand. These (precious) few classes may get lost in
|
||||
the mass of (cheap) generated ones. Just imagine one of your co-workers (or
|
||||
even yourself) deleting the whole bunch and re-generating everything - oops
|
||||
- almost everything. You got the point.
|
||||
- almost everything. You get the point.
|
||||
|
||||
For simplicity, you probably just want to use builtin types wherever possible
|
||||
- you are probably not interested in whether a fault detail's error code is
|
||||
presented to you as a simpleType ranging from 1 to 10 (which you have to
|
||||
write) or as a int (which is a builtin type ready to use).
|
||||
write) or as an int (which is a builtin type ready to use).
|
||||
|
||||
Using builtin types for simpleType definitions may greatly reduce the number
|
||||
of additional classes you need to implement.
|
||||
@@ -230,6 +230,17 @@ L<SOAP::WSDL::Manual::Parser> will tell you how to create a typemap class.
|
||||
|
||||
=back
|
||||
|
||||
=head1 Creating a SOAP Server
|
||||
|
||||
Creating a SOAP server works just like creating a client - just add the
|
||||
C<--server> or C<-s> option to the call to C<wsdl2perl.pl>.
|
||||
|
||||
perl wsdl2perl.pl -s -b BASE_DIR URL
|
||||
|
||||
Note that SOAP::WSDL only includes a basic CGI based SOAP servers by now -
|
||||
while more advanced servers (like standalone or mod_perl based) are no big
|
||||
deal, no base implementation is included yet.
|
||||
|
||||
=head1 Troubleshooting
|
||||
|
||||
=head2 Accessing HTTPS webservices
|
||||
|
||||
@@ -84,7 +84,7 @@ SOAP::WSDL::Expat::MessageParser allows the use of XML Declarations.
|
||||
the soap:Body element.
|
||||
|
||||
SOAP::WSDL::Serializer::SOAP11 does not emit children of soap:Envelope following
|
||||
the soap:Body element. Other serializers may behave differentls.
|
||||
the soap:Body element. Other serializers may behave different.
|
||||
|
||||
=head2 R1012
|
||||
|
||||
@@ -302,6 +302,73 @@ SOAP::WSDL::Expat::MessageParser checks the namespace of the SOAP envelope.
|
||||
SOAP::WSDL::Expat::MessageParser does not check that Envelope is the root
|
||||
element, yet.
|
||||
|
||||
=head2 R1110
|
||||
|
||||
An INSTANCE MAY accept connections on TCP port 80 (HTTP)
|
||||
|
||||
SOAP::WSDL::Server::CGI may be used in a web server listening at port 80.
|
||||
|
||||
=head2 R1124
|
||||
|
||||
An INSTANCE MUST use a 2xx HTTP status code for responses that
|
||||
indicate a successful outcome of a request.
|
||||
|
||||
SOAP::WSDL::Server::CGI sends a 2xx HTTP status code for successful requests.
|
||||
|
||||
=head2 R1111
|
||||
|
||||
An INSTANCE SHOULD use a "200 OK" HTTP status code for responses
|
||||
that contain a SOAP message that is not a SOAP fault.
|
||||
|
||||
SOAP::WSDL::Server::CGI does this.
|
||||
|
||||
=head2 R1112
|
||||
|
||||
An INSTANCE SHOULD use either a "200 OK" or "202 Accepted" HTTP
|
||||
status code for a response that does do not contain a SOAP message
|
||||
but indicates successful HTTP outcome of a request.
|
||||
|
||||
SOAP::WSDL::Server::CGI does this.
|
||||
|
||||
=head2 R1130
|
||||
|
||||
An INSTANCE MUST use HTTP status code "307 Temporary Redirect"
|
||||
when redirecting a request to a different endpoint.
|
||||
|
||||
SOAP::WSDL::Server::CGI has no means of redirecting. The web server running
|
||||
a SOAP::WSDL::Server::CGI script is responsible for redirecting with a 307
|
||||
HTTP status code.
|
||||
|
||||
=head2 R1125
|
||||
|
||||
An INSTANCE MUST use a 4xx HTTP status code for responses that indicate
|
||||
a problem with the format of the request.
|
||||
|
||||
SOAP::WSDL does this.
|
||||
|
||||
=head2 R1113
|
||||
|
||||
An INSTANCE SHOULD use a "400 Bad Request "HTTP status code, if the
|
||||
request message is a malformed HTTP request, or not well-formed XML.
|
||||
|
||||
SOAP::WSDL does this.
|
||||
|
||||
=head2 R1114
|
||||
|
||||
An INSTANCE SHOULD use a "405 Method not Allowed" HTTP status code if the
|
||||
request method was not "POST".
|
||||
|
||||
SOAP::WSDL does this.
|
||||
|
||||
=head2 R1115
|
||||
|
||||
An INSTANCE SHOULD use a "415 Unsupported Media Type" HTTP status code if
|
||||
the Content-Type HTTP request header did not have a value consistent with
|
||||
the value specified for the corresponding binding of the input message.
|
||||
|
||||
SOAP::WSDL::Server::CGI does not support any content type other than text/xml
|
||||
and application/xml yet.
|
||||
|
||||
|
||||
=head1 RULES NOT CONFIRMED
|
||||
|
||||
@@ -310,7 +377,7 @@ element, yet.
|
||||
A RECEIVER MUST accept messages that include the Unicode Byte Order Mark
|
||||
(BOM).
|
||||
|
||||
May automatically work with XML::Parser::Expat, but is not testet yet.
|
||||
May automatically work with XML::Parser::Expat, but is not tested yet.
|
||||
|
||||
TODO write test. If not confirmed, add encoding support.
|
||||
|
||||
@@ -339,6 +406,8 @@ TODO add processing of arbitrary attributes to SOAP::WSDL::SOAP::Typelib::Fault1
|
||||
A RECEIVER MUST accept fault messages that carry an xml:lang attribute on
|
||||
the faultstring element.
|
||||
|
||||
SOAP::WSDL::Expat::MessageParser currently ignores all attributes.
|
||||
|
||||
TODO add processing of the xml:lang attribute to SOAP::WSDL::SOAP::Typelib::Fault11
|
||||
|
||||
=head2 R1007
|
||||
@@ -555,94 +624,37 @@ SOAP::WSDL does not check mandatory header blocks yet.
|
||||
|
||||
SOAP::WSDL does not check mandatory header blocks yet.
|
||||
|
||||
=head2 R1110
|
||||
|
||||
An INSTANCE MAY accept connections on TCP port 80 (HTTP)
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1124
|
||||
|
||||
An INSTANCE MUST use a 2xx HTTP status code for responses that
|
||||
indicate a successful outcome of a request.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1111
|
||||
|
||||
An INSTANCE SHOULD use a "200 OK" HTTP status code for responses
|
||||
that contain a SOAP message that is not a SOAP fault.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1112
|
||||
|
||||
An INSTANCE SHOULD use either a "200 OK" or "202 Accepted" HTTP
|
||||
status code for a response that does do not contain a SOAP message
|
||||
but indicates successful HTTP outcome of a request.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1130
|
||||
|
||||
An INSTANCE MUST use HTTP status code "307 Temporary Redirect"
|
||||
when redirecting a request to a different endpoint.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1125
|
||||
|
||||
An INSTANCE MUST use a 4xx HTTP status code for responses that indicate
|
||||
a problem with the format of the request.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1113
|
||||
|
||||
An INSTANCE SHOULD use a "400 Bad Request "HTTP status code, if the
|
||||
request message is a malformed HTTP request, or not well-formed XML.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1114
|
||||
|
||||
An INSTANCE SHOULD use a "405 Method not Allowed" HTTP status code if the
|
||||
request method was not "POST".
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1115
|
||||
|
||||
An INSTANCE SHOULD use a "415 Unsupported Media Type" HTTP status code if
|
||||
the Content-Type HTTP request header did not have a value consistent with
|
||||
the value specified for the corresponding binding of the input message.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
=head2 R1120
|
||||
|
||||
An INSTANCE MAY use the HTTP state mechanism ("Cookies").
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
SOAP::WSDL::Server::CGI does not use cookies. A web server running a
|
||||
SOAP::WSDL::Server::CGI script may use cookies..
|
||||
|
||||
=head2 R1122
|
||||
|
||||
An INSTANCE using Cookies SHOULD conform to RFC2965.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
SOAP::WSDL::Server::CGI does not use cookies. A web server running a
|
||||
SOAP::WSDL::Server::CGI script may use cookies..
|
||||
|
||||
=head2 R1121
|
||||
|
||||
An INSTANCE SHOULD NOT require consumer support for Cookies in order to
|
||||
function correctly
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
SOAP::WSDL::Server::CGI does not use cookies. A web server running a
|
||||
SOAP::WSDL::Server::CGI script may use cookies.
|
||||
|
||||
=head2 R1123
|
||||
|
||||
The value of the cookie MUST be considered to be opaque by the CONSUMER.
|
||||
|
||||
SOAP::WSDL does not act as server yet.
|
||||
|
||||
SOAP::WSDL::Server::CGI does not use cookies. A web server running a
|
||||
SOAP::WSDL::Server::CGI script may use cookies.
|
||||
|
||||
=head2 R2028
|
||||
|
||||
@@ -1237,9 +1249,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 391 $
|
||||
$Rev: 478 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: WS_I.pod 391 2007-11-17 21:56:13Z kutterma $
|
||||
$Id: WS_I.pod 478 2007-12-27 14:15:01Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Manual/WS_I.pod $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -3,8 +3,8 @@ package SOAP::WSDL::Serializer::XSD;
|
||||
use strict;
|
||||
use warnings;
|
||||
use Class::Std::Fast::Storable;
|
||||
|
||||
our $VERSION=q{2.00_25};
|
||||
use Scalar::Util qw(blessed);
|
||||
our $VERSION=q{2.00_27};
|
||||
|
||||
my $SOAP_NS = 'http://schemas.xmlsoap.org/soap/envelope/';
|
||||
my $XML_INSTANCE_NS = 'http://www.w3.org/2001/XMLSchema-instance';
|
||||
@@ -49,7 +49,7 @@ sub serialize_header {
|
||||
return q{} if not $data;
|
||||
return join ( q{},
|
||||
"<$opt->{ namespace }->{ $SOAP_NS }\:Header>",
|
||||
"$data",
|
||||
blessed $data ? $data->serialize_qualified : (),
|
||||
"</$opt->{ namespace }->{ $SOAP_NS }\:Header>",
|
||||
);
|
||||
}
|
||||
@@ -61,7 +61,13 @@ sub serialize_body {
|
||||
# if we have no data.
|
||||
return join ( q{},
|
||||
"<$opt->{ namespace }->{ $SOAP_NS }\:Body>",
|
||||
defined $data ? "$data" : (),
|
||||
defined $data
|
||||
? ref $data eq 'ARRAY'
|
||||
? join q{}, map { blessed $_ ? $_->serialize_qualified() : () } @{ $data }
|
||||
: blessed $data
|
||||
? $data->serialize_qualified()
|
||||
: ()
|
||||
: (),
|
||||
"</$opt->{ namespace }->{ $SOAP_NS }\:Body>",
|
||||
);
|
||||
}
|
||||
@@ -113,9 +119,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 427 $
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: XSD.pm 427 2007-12-02 22:20:24Z kutterma $
|
||||
$Id: XSD.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Serializer/XSD.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -6,7 +6,7 @@ use Scalar::Util qw(blessed);
|
||||
use SOAP::WSDL::Factory::Deserializer;
|
||||
use SOAP::WSDL::Factory::Serializer;
|
||||
|
||||
our $VERSION = q{2.00_25};
|
||||
our $VERSION = q{2.00_27};
|
||||
|
||||
my %dispatch_to_of :ATTR(:name<dispatch_to> :default<()>);
|
||||
my %action_map_ref_of :ATTR(:name<action_map_ref> :default<{}>);
|
||||
@@ -28,7 +28,7 @@ sub handle {
|
||||
soap_version => '1.1'
|
||||
});
|
||||
|
||||
# TODO: factor out dispatcher logic into dispatcher factory + dispatcher
|
||||
# TODO: factor out dispatcher logic into dispatcher factory + dispatcher
|
||||
# classes
|
||||
# $dispatcher_of{ $ident } ||= SOAP::WSDL::Factory::Dispatcher->get_dispatcher({});
|
||||
|
||||
@@ -143,12 +143,12 @@ SOAP::WSDL::Server basically follows the architecture sketched below
|
||||
| Handler |
|
||||
-------------------------------------
|
||||
|
||||
All of the components (Transport class, deserializer, dispatcher and
|
||||
All of the components (Transport class, deserializer, dispatcher and
|
||||
serializer) are implemented as plugins.
|
||||
|
||||
The architecture is not implemented as planned yet, but the dispatcher is
|
||||
The architecture is not implemented as planned yet, but the dispatcher is
|
||||
currently part of SOAP::WSDL::Server, which aggregates serializer and
|
||||
deserializer, and is subclassed by transport classes (of which
|
||||
deserializer, and is subclassed by transport classes (of which
|
||||
SOAP::WSDL::Server::CGI is the only implemented one yet).
|
||||
|
||||
The dispatcher is currently based on the SOAPAction header. This does not
|
||||
|
||||
@@ -9,17 +9,16 @@ use HTTP::Headers;
|
||||
use Scalar::Util qw(blessed);
|
||||
|
||||
use Class::Std::Fast::Storable;
|
||||
# use Class::Std::Storable;
|
||||
|
||||
use base qw(SOAP::WSDL::Server);
|
||||
|
||||
our $VERSION=q{2.00_25};
|
||||
our $VERSION=q{2.00_27};
|
||||
|
||||
# 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...
|
||||
#
|
||||
# This should be a warning for us: We should not handle methods via inheritance,
|
||||
# but via some plugin mechanism, to allow alternative handlers to be plugge
|
||||
# but via some plugin mechanism, to allow alternative handlers to be plugged
|
||||
# in.
|
||||
|
||||
sub handle {
|
||||
@@ -27,7 +26,7 @@ sub handle {
|
||||
my $response;
|
||||
my $length = $ENV{'CONTENT_LENGTH'} || 0;
|
||||
|
||||
if (!$length) {
|
||||
if (!$length) {
|
||||
$response = HTTP::Response->new(411); # LENGTH REQUIRED
|
||||
$self->_output($response);
|
||||
return;
|
||||
@@ -38,7 +37,7 @@ sub handle {
|
||||
}
|
||||
|
||||
my $content = q{};
|
||||
my $buffer;
|
||||
my $buffer;
|
||||
binmode(STDIN);
|
||||
while (read(STDIN,$buffer,$length - length($content))) {
|
||||
$content .= $buffer;
|
||||
@@ -48,10 +47,10 @@ sub handle {
|
||||
$ENV{'REQUEST_METHOD'} || '' => $ENV{'SCRIPT_NAME'},
|
||||
HTTP::Headers->new(
|
||||
map {
|
||||
(/^HTTP_(.+)/i
|
||||
? ($1=~m/SOAPACTION/)
|
||||
(/^HTTP_(.+)/i
|
||||
? ($1=~m/SOAPACTION/)
|
||||
?('SOAPAction')
|
||||
:($1)
|
||||
:($1)
|
||||
: $_
|
||||
) => $ENV{$_}
|
||||
} keys %ENV),
|
||||
@@ -80,6 +79,10 @@ sub handle {
|
||||
'Content-type' => 'text/xml; charset="utf-8"'
|
||||
);
|
||||
$response->content( $response_message );
|
||||
{
|
||||
use bytes;
|
||||
$response->header('Content-length', length $response_message);
|
||||
}
|
||||
}
|
||||
|
||||
$self->_output($response);
|
||||
@@ -90,15 +93,14 @@ sub _output :PRIVATE {
|
||||
my ($self, $response) = @_;
|
||||
# imitate nph- cgi for IIS (pointed by Murray Nesbitt)
|
||||
my $status = defined($ENV{'SERVER_SOFTWARE'}) && $ENV{'SERVER_SOFTWARE'}=~/IIS/
|
||||
? $ENV{SERVER_PROTOCOL} || 'HTTP/1.0'
|
||||
? $ENV{SERVER_PROTOCOL} || 'HTTP/1.0'
|
||||
: 'Status:';
|
||||
|
||||
my $code = $response->code;
|
||||
binmode(STDOUT);
|
||||
binmode(STDOUT);
|
||||
print STDOUT "$status $code ", HTTP::Status::status_message($code)
|
||||
, "\015\012", $response->headers_as_string("\015\012")
|
||||
, "\015\012", $response->content;
|
||||
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
@@ -409,11 +409,11 @@ Replace whitespace by @ in e-mail address.
|
||||
|
||||
Martin Kutter E<gt>martin.kutter fen-net.deE<lt>
|
||||
|
||||
=head1 Licenxe
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This library is free software, you may distribute/modify it under the
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under the
|
||||
same terms as perl itself
|
||||
|
||||
=cut
|
||||
|
||||
@@ -7,9 +7,12 @@ sub get_xmlns { 'http://www.w3.org/2001/XMLSchema' };
|
||||
|
||||
# use $_[1] for performance
|
||||
sub start_tag {
|
||||
my $opt = $_[1] ||= {};
|
||||
return '<' . $opt->{name} . ' >' if $opt->{ name };
|
||||
return q{}
|
||||
return q{} if not $#_; # return if no second argument ($opt)
|
||||
if ($_[1]->{ name }) {
|
||||
return "<$_[1]->{name} />" if $_[1]->{ empty };
|
||||
return "<$_[1]->{name} >";
|
||||
}
|
||||
return q{};
|
||||
}
|
||||
|
||||
# use $_[1] for performance
|
||||
|
||||
@@ -3,6 +3,7 @@ use strict;
|
||||
use warnings;
|
||||
use Date::Parse;
|
||||
use Date::Format;
|
||||
use Time::Zone;
|
||||
use Class::Std::Fast::Storable constructor => 'none', cache => 1;
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType);
|
||||
|
||||
@@ -16,13 +17,17 @@ sub set_value {
|
||||
[\+\-] \d{2} \: \d{2} $
|
||||
}xms
|
||||
);
|
||||
|
||||
no warnings qw(uninitialized);
|
||||
# strptime sets empty values to undef - and strftime doesn't like that...
|
||||
my @time_from = map { ! defined $_ ? 0 : $_ } strptime($_[1]);
|
||||
|
||||
undef $time_from[$#time_from];
|
||||
|
||||
my $time_str = strftime( '%Y-%m-%dT%H:%M:%S%z', @time_from );
|
||||
my $time_str = do { # no warnings;
|
||||
strftime( '%Y-%m-%dT%H:%M:%S%z', @time_from );
|
||||
};
|
||||
|
||||
# insert : in timezone info
|
||||
substr $time_str, -2, 0, ':';
|
||||
$_[0]->SUPER::set_value($time_str);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ require Class::Std::Fast::Storable;
|
||||
|
||||
use base qw(SOAP::WSDL::XSD::Typelib::Builtin::anyType);
|
||||
|
||||
our $VERSION = '2.00_25';
|
||||
our $VERSION = '2.00_27';
|
||||
|
||||
my %ELEMENTS_FROM;
|
||||
my %ATTRIBUTES_OF;
|
||||
@@ -39,6 +39,34 @@ sub AUTOMETHOD {
|
||||
. "\n"
|
||||
}
|
||||
|
||||
sub as_hash_ref {
|
||||
my $self = shift;
|
||||
my $attributes_ref = $ATTRIBUTES_OF{ ref $self };
|
||||
my $ident = ident $self;
|
||||
|
||||
my $hash_of_ref = {};
|
||||
foreach my $attribute (keys %{ $attributes_ref }) {
|
||||
next if not defined $attributes_ref->{ $attribute }->{ $ident };
|
||||
my $value = $attributes_ref->{ $attribute }->{ $ident };
|
||||
|
||||
$hash_of_ref->{ $attribute } = blessed $value
|
||||
? $value->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType')
|
||||
? $value
|
||||
: $value->as_hash_ref()
|
||||
: ref $value eq 'ARRAY'
|
||||
? [
|
||||
map {
|
||||
$_->isa('SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType')
|
||||
? $_
|
||||
: $_->as_hash_ref()
|
||||
} @{ $value }
|
||||
]
|
||||
: die "Neither blessed obj nor list ref";
|
||||
};
|
||||
|
||||
return $hash_of_ref;
|
||||
}
|
||||
|
||||
# we store per-class elements.
|
||||
# call as __PACKAGE__->_factory
|
||||
sub _factory {
|
||||
@@ -352,6 +380,10 @@ This means you may set element properties by passing
|
||||
|
||||
Examples are similar to the examples provided for new() above.
|
||||
|
||||
=head2 as_hash_ref
|
||||
|
||||
Returns a hash ref representation of the complexType object
|
||||
|
||||
=head1 Bugs and limitations
|
||||
|
||||
=over
|
||||
@@ -380,10 +412,10 @@ No facets are implemented yet.
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright (c) 2007 Martin Kutter. All rights reserved.
|
||||
Copyright 2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under
|
||||
the same terms as perl itself.
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under the same
|
||||
terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
@@ -391,9 +423,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 412 $
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: ComplexType.pm 412 2007-11-27 22:57:52Z kutterma $
|
||||
$Id: ComplexType.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm $
|
||||
|
||||
=cut
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package SOAP::WSDL::XSD::Typelib::Element;
|
||||
use strict;
|
||||
|
||||
our $VERSION=q{2.00_25};
|
||||
our $VERSION=q{2.00_27};
|
||||
|
||||
my %NAME;
|
||||
my %NILLABLE;
|
||||
@@ -159,4 +159,24 @@ namespace combination (Default for SOAP::WSDL::Envelope).
|
||||
|
||||
=back
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under the same
|
||||
terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: Element.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/Element.pm $
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
|
||||
@@ -116,15 +116,23 @@ No facets are implemented yet.
|
||||
|
||||
=back
|
||||
|
||||
=head1 LICENSE AND COPYRIGHT
|
||||
|
||||
Copyright 2004-2007 Martin Kutter.
|
||||
|
||||
This file is part of SOAP-WSDL. You may distribute/modify it under the same
|
||||
terms as perl itself
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Replace whitespace by @ in e-mail address.
|
||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
||||
|
||||
Martin Kutter E<gt>martin.kutter fen-net.deE<lt>
|
||||
=head1 REPOSITORY INFORMATION
|
||||
|
||||
=head1 COPYING
|
||||
|
||||
This library is free software, you may distribute/modify it under the
|
||||
same terms as perl itself
|
||||
$Rev: 477 $
|
||||
$LastChangedBy: kutterma $
|
||||
$Id: SimpleType.pm 477 2007-12-24 10:23:52Z kutterma $
|
||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm $
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
@@ -3,16 +3,19 @@ use strict;
|
||||
use warnings;
|
||||
use Test::More qw/no_plan/; # TODO: change to tests => N;
|
||||
use lib '../lib';
|
||||
use File::Basename;
|
||||
use File::Spec;
|
||||
|
||||
use Cwd;
|
||||
|
||||
my $path = cwd;
|
||||
$path =~s|\/t\/?$||; # allow running from t/ and above (Build test)
|
||||
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/);
|
||||
|
||||
my $soap = SOAP::WSDL->new(
|
||||
wsdl => 'file:///' . $path .'/t/acceptance/wsdl/008_complexType.wsdl'
|
||||
wsdl => 'file://' . $url .'/acceptance/wsdl/008_complexType.wsdl'
|
||||
)->wsdlinit();
|
||||
|
||||
my $wsdl = $soap->get_definitions;
|
||||
|
||||
@@ -11,8 +11,14 @@ use Cwd;
|
||||
|
||||
use SOAP::WSDL;
|
||||
use SOAP::WSDL::XSD::Typelib::Builtin;
|
||||
my $path = cwd;
|
||||
$path =~s|\/t\/?$||; # allow running from t/ and above (Build test)
|
||||
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;
|
||||
|
||||
my $parser;
|
||||
|
||||
@@ -37,7 +43,7 @@ else
|
||||
# TODO factor out into different test
|
||||
|
||||
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();
|
||||
|
||||
$soap->servicename('MessageGateway');
|
||||
|
||||
@@ -23,7 +23,7 @@ is $obj, '<MyTestName >test</MyTestName ><MyTestName >test2</MyTestName >',
|
||||
# try on the fly factory
|
||||
@MyComplexType2::ISA = ('SOAP::WSDL::XSD::Typelib::ComplexType');
|
||||
{
|
||||
use Class::Std::Storable;
|
||||
use Class::Std::Fast::Storable;
|
||||
my %MyTestName_of;
|
||||
|
||||
MyComplexType2->_factory(
|
||||
|
||||
@@ -3,17 +3,23 @@ use strict;
|
||||
use warnings;
|
||||
use diagnostics;
|
||||
use Cwd;
|
||||
use lib '../lib';
|
||||
|
||||
use File::Basename;
|
||||
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/);
|
||||
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
my $soap;
|
||||
#2
|
||||
ok( $soap = SOAP::WSDL->new(
|
||||
wsdl => 'file:///' . $path . '/../../acceptance/wsdl/02_port.wsdl'
|
||||
wsdl => 'file://' . $url . '/../../acceptance/wsdl/02_port.wsdl'
|
||||
), 'Instantiated object' );
|
||||
|
||||
ok( ($soap->servicename('testService') ), 'set service' );
|
||||
|
||||
@@ -6,16 +6,21 @@ 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/);
|
||||
|
||||
my $xml;
|
||||
|
||||
my $soap = undef;
|
||||
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
|
||||
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' );
|
||||
|
||||
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
||||
|
||||
@@ -2,19 +2,22 @@ use Test::More tests => 8;
|
||||
use strict;
|
||||
use lib '../lib';
|
||||
use lib 't/lib';
|
||||
use File::Spec;
|
||||
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/);
|
||||
|
||||
my ($soap, $xml, $xml2);
|
||||
|
||||
# chdir to my location
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
|
||||
#2
|
||||
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' );
|
||||
|
||||
# won't work without - would require SOAP::WSDL::Deserializer::SOM,
|
||||
|
||||
@@ -7,16 +7,23 @@ use File::Basename;
|
||||
use lib '../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/);
|
||||
|
||||
my $xml;
|
||||
|
||||
my $path = File::Spec->rel2abs( dirname __FILE__ );
|
||||
|
||||
my $soap;
|
||||
#2
|
||||
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' );
|
||||
|
||||
#3
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user