Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51db446428 | ||
|
|
f0b3bdc201 | ||
|
|
874251225f | ||
|
|
2bad767211 | ||
|
|
7ca2154ad6 | ||
|
|
eb096ad88e | ||
|
|
3cfeebae54 |
@@ -5,7 +5,7 @@ $build = Module::Build->new(
|
|||||||
create_makefile_pl => 'passthrough',
|
create_makefile_pl => 'passthrough',
|
||||||
dist_abstract => 'SOAP with WSDL support',
|
dist_abstract => 'SOAP with WSDL support',
|
||||||
dist_name => 'SOAP-WSDL',
|
dist_name => 'SOAP-WSDL',
|
||||||
dist_version => '2.00_25',
|
dist_version => '2.00_32',
|
||||||
module_name => 'SOAP::WSDL',
|
module_name => 'SOAP::WSDL',
|
||||||
license => 'artistic',
|
license => 'artistic',
|
||||||
requires => {
|
requires => {
|
||||||
@@ -24,6 +24,7 @@ $build = Module::Build->new(
|
|||||||
'LWP::UserAgent' => 0,
|
'LWP::UserAgent' => 0,
|
||||||
'Template' => 0,
|
'Template' => 0,
|
||||||
'Term::ReadKey' => 0,
|
'Term::ReadKey' => 0,
|
||||||
|
'URI' => 0,
|
||||||
'XML::Parser::Expat' => 0,
|
'XML::Parser::Expat' => 0,
|
||||||
},
|
},
|
||||||
buildrequires => {
|
buildrequires => {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Release notes for SOAP::WSDL 2.00_24
|
Release notes for SOAP::WSDL 2.00_32
|
||||||
-------
|
-------
|
||||||
|
|
||||||
I'm proud to present a new pre-release version of SOAP::WSDL.
|
I'm proud to present a new pre-release version of SOAP::WSDL.
|
||||||
@@ -34,6 +34,140 @@ Features:
|
|||||||
|
|
||||||
The following changes have been made:
|
The following changes have been made:
|
||||||
|
|
||||||
|
2.00_32
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1893147 ] Segfault on 2.0.0_31
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* changed SOAP::WSDL::XSD::ComplexType's set_/get_flavor methods to
|
||||||
|
set_/get_variety to reflect the XML standard more closely.
|
||||||
|
get_flavor is retained for compatibility reasons.
|
||||||
|
* added initial support for complexType/simpleContent definitions. Right
|
||||||
|
now, only restriction derivations are supported.
|
||||||
|
* fixed an error in the generator_test.wsdl
|
||||||
|
|
||||||
|
2.00_31 - Feb 11 2007
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1883843 ] Support wsdl:import
|
||||||
|
* [ 1883863 ] Support xsd:import
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* The WSDL Parser now warns about unsupported WSDL / XML schema elements
|
||||||
|
* Fixed path handling in t/006_client.t
|
||||||
|
* Removed useless ms regex flag in SOAP::WSDL::Factory::Transport
|
||||||
|
* The test suite has been improved
|
||||||
|
|
||||||
|
2.00_30 - unreleased
|
||||||
|
|
||||||
|
The following features were added (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924):
|
||||||
|
|
||||||
|
* [ 1875288 ] Support XML attributes (partial)
|
||||||
|
|
||||||
|
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/).
|
||||||
|
|
||||||
|
* [ 1876435 ] Test on perl-5.10 fails
|
||||||
|
* #32611 empty complexType structure classes are missing 'use Class::Std::Fast::Storable'
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* ComplexType objects now accept { foo => undef } in constructor and handle
|
||||||
|
it as non-present child element foo.
|
||||||
|
* Updated test suite
|
||||||
|
* Updated SOAP::WSDL::Client::Base to correctly handle SOAP calls with
|
||||||
|
no parameters (empty parts)
|
||||||
|
* Test on perl-5.10 fails when SOAP::Lite is not installed
|
||||||
|
|
||||||
|
2.00_29
|
||||||
|
|
||||||
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
|
tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660921):
|
||||||
|
The numbers with # are CPAN RT IDs (http://rt.cpan.org/).
|
||||||
|
|
||||||
|
* #32188: minor bug found and fixed in WSDL generation
|
||||||
|
* [ 1871175 ] Can't delete attributes from ComplexType objects
|
||||||
|
|
||||||
|
The following uncategorized improvements have been made:
|
||||||
|
|
||||||
|
* Updated SOAP::WSDL::Manual::XSD
|
||||||
|
* Removed pod directives from templates to avoid confusing CPAN's pod
|
||||||
|
viewer
|
||||||
|
* Initial (incomplete) XML attribute support
|
||||||
|
* Updated test suite
|
||||||
|
|
||||||
|
2.00_28
|
||||||
|
|
||||||
|
The following bugs have been fixed (the numbers in square brackets are the
|
||||||
|
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
|
2.00_25
|
||||||
---
|
---
|
||||||
WARNING: INCOMPATIBLE CHANGE:
|
WARNING: INCOMPATIBLE CHANGE:
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
benchmark/01_expat.t
|
benchmark/01_expat.t
|
||||||
benchmark/hello.pl
|
benchmark/hello.pl
|
||||||
|
benchmark/person.pl
|
||||||
|
benchmark/person.xml
|
||||||
|
benchmark/person_profile.pl
|
||||||
benchmark/XSD/01_anyType.t
|
benchmark/XSD/01_anyType.t
|
||||||
benchmark/XSD/02_anySimpleType.t
|
benchmark/XSD/02_anySimpleType.t
|
||||||
benchmark/XSD/03_string.t
|
benchmark/XSD/03_string.t
|
||||||
@@ -7,6 +10,7 @@ bin/wsdl2perl.pl
|
|||||||
Build.PL
|
Build.PL
|
||||||
Changes
|
Changes
|
||||||
example/cgi-bin/helloworld.pl
|
example/cgi-bin/helloworld.pl
|
||||||
|
example/cgi-bin/person.pl
|
||||||
example/fortune.pl
|
example/fortune.pl
|
||||||
example/genericbarcode.pl
|
example/genericbarcode.pl
|
||||||
example/hello.pl
|
example/hello.pl
|
||||||
@@ -25,6 +29,8 @@ example/lib/MyElements/GetSpecificCookieResponse.pm
|
|||||||
example/lib/MyElements/GetWeather.pm
|
example/lib/MyElements/GetWeather.pm
|
||||||
example/lib/MyElements/GetWeatherResponse.pm
|
example/lib/MyElements/GetWeatherResponse.pm
|
||||||
example/lib/MyElements/int.pm
|
example/lib/MyElements/int.pm
|
||||||
|
example/lib/MyElements/ListPerson.pm
|
||||||
|
example/lib/MyElements/ListPersonResponse.pm
|
||||||
example/lib/MyElements/readNodeCount.pm
|
example/lib/MyElements/readNodeCount.pm
|
||||||
example/lib/MyElements/readNodeCountResponse.pm
|
example/lib/MyElements/readNodeCountResponse.pm
|
||||||
example/lib/MyElements/sayHello.pm
|
example/lib/MyElements/sayHello.pm
|
||||||
@@ -34,13 +40,31 @@ example/lib/MyInterfaces/BarCode/BarCodeSoap.pm
|
|||||||
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
example/lib/MyInterfaces/FullerData_x0020_Fortune_x0020_Cookie/FullerData_x0020_Fortune_x0020_CookieSoap.pm
|
||||||
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
example/lib/MyInterfaces/GlobalWeather/GlobalWeatherSoap.pm
|
||||||
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
|
example/lib/MyInterfaces/HelloWorld/HelloWorldSoap.pm
|
||||||
|
example/lib/MyInterfaces/TestService/TestPort.pm
|
||||||
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
|
example/lib/MyServer/HelloWorld/HelloWorldSoap.pm
|
||||||
|
example/lib/MyServer/TestService/TestPort.pm
|
||||||
example/lib/MyTypemaps/BarCode.pm
|
example/lib/MyTypemaps/BarCode.pm
|
||||||
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
example/lib/MyTypemaps/FullerData_x0020_Fortune_x0020_Cookie.pm
|
||||||
example/lib/MyTypemaps/GlobalWeather.pm
|
example/lib/MyTypemaps/GlobalWeather.pm
|
||||||
example/lib/MyTypemaps/HelloWorld.pm
|
example/lib/MyTypemaps/HelloWorld.pm
|
||||||
|
example/lib/MyTypemaps/TestService.pm
|
||||||
|
example/lib/MyTypes/Address.pm
|
||||||
|
example/lib/MyTypes/ArrayOfContract.pm
|
||||||
|
example/lib/MyTypes/ArrayOfPerson.pm
|
||||||
|
example/lib/MyTypes/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/test2.pm
|
||||||
example/lib/MyTypes/testExtended.pm
|
example/lib/MyTypes/testExtended.pm
|
||||||
|
example/person.pl
|
||||||
|
example/person_compile.pl
|
||||||
example/visitor/visitor.pl
|
example/visitor/visitor.pl
|
||||||
example/weather.pl
|
example/weather.pl
|
||||||
example/weather_wsdl.pl
|
example/weather_wsdl.pl
|
||||||
@@ -48,6 +72,7 @@ example/wsdl/11_helloworld.wsdl
|
|||||||
example/wsdl/FortuneCookie.xml
|
example/wsdl/FortuneCookie.xml
|
||||||
example/wsdl/genericbarcode.xml
|
example/wsdl/genericbarcode.xml
|
||||||
example/wsdl/globalweather.xml
|
example/wsdl/globalweather.xml
|
||||||
|
example/wsdl/Person.wsdl
|
||||||
HACKING
|
HACKING
|
||||||
lib/SOAP/WSDL.pm
|
lib/SOAP/WSDL.pm
|
||||||
lib/SOAP/WSDL/Base.pm
|
lib/SOAP/WSDL/Base.pm
|
||||||
@@ -68,11 +93,13 @@ lib/SOAP/WSDL/Factory/Generator.pm
|
|||||||
lib/SOAP/WSDL/Factory/Serializer.pm
|
lib/SOAP/WSDL/Factory/Serializer.pm
|
||||||
lib/SOAP/WSDL/Factory/Transport.pm
|
lib/SOAP/WSDL/Factory/Transport.pm
|
||||||
lib/SOAP/WSDL/Generator/Template.pm
|
lib/SOAP/WSDL/Generator/Template.pm
|
||||||
|
lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD.pm
|
lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/_type_class.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/_type_class.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/all.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/all.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/atomicTypes.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/atomicTypes.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/attributeSet.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/complexContent.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/complexContent.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/contentModel.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/contentModel.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/extension.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/extension.tt
|
||||||
@@ -80,8 +107,10 @@ lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/all.tt
|
|||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/choice.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/choice.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/complexContent.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/complexContent.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/restriction.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/restriction.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/simpleContent.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/structure.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/POD/structure.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/restriction.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/restriction.tt
|
||||||
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/simpleContent.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/complexType/variety.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/complexType/variety.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/element.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/element.tt
|
||||||
lib/SOAP/WSDL/Generator/Template/XSD/element/POD/structure.tt
|
lib/SOAP/WSDL/Generator/Template/XSD/element/POD/structure.tt
|
||||||
@@ -140,12 +169,15 @@ lib/SOAP/WSDL/Transport/Loopback.pm
|
|||||||
lib/SOAP/WSDL/Transport/Test.pm
|
lib/SOAP/WSDL/Transport/Test.pm
|
||||||
lib/SOAP/WSDL/TypeLookup.pm
|
lib/SOAP/WSDL/TypeLookup.pm
|
||||||
lib/SOAP/WSDL/Types.pm
|
lib/SOAP/WSDL/Types.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Attribute.pm
|
||||||
lib/SOAP/WSDL/XSD/Builtin.pm
|
lib/SOAP/WSDL/XSD/Builtin.pm
|
||||||
lib/SOAP/WSDL/XSD/ComplexType.pm
|
lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||||
lib/SOAP/WSDL/XSD/Element.pm
|
lib/SOAP/WSDL/XSD/Element.pm
|
||||||
lib/SOAP/WSDL/XSD/Schema.pm
|
lib/SOAP/WSDL/XSD/Schema.pm
|
||||||
lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
lib/SOAP/WSDL/XSD/Schema/Builtin.pm
|
||||||
lib/SOAP/WSDL/XSD/SimpleType.pm
|
lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||||
|
lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||||
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||||
@@ -216,6 +248,7 @@ t/013_complexType.t
|
|||||||
t/016_client_object.t
|
t/016_client_object.t
|
||||||
t/017_generator.t
|
t/017_generator.t
|
||||||
t/020_storable.t
|
t/020_storable.t
|
||||||
|
t/095_copying.t
|
||||||
t/096_characters.t
|
t/096_characters.t
|
||||||
t/097_kwalitee.t
|
t/097_kwalitee.t
|
||||||
t/098_pod.t
|
t/098_pod.t
|
||||||
@@ -243,14 +276,22 @@ t/acceptance/wsdl/10_helloworld.asmx.xml
|
|||||||
t/acceptance/wsdl/11_helloworld.wsdl
|
t/acceptance/wsdl/11_helloworld.wsdl
|
||||||
t/acceptance/wsdl/contributed/Axis.wsdl
|
t/acceptance/wsdl/contributed/Axis.wsdl
|
||||||
t/acceptance/wsdl/contributed/ETest.wsdl
|
t/acceptance/wsdl/contributed/ETest.wsdl
|
||||||
|
t/acceptance/wsdl/contributed/gasquery.wsdl
|
||||||
t/acceptance/wsdl/contributed/OITest.wsdl
|
t/acceptance/wsdl/contributed/OITest.wsdl
|
||||||
t/acceptance/wsdl/contributed/tools.wsdl
|
t/acceptance/wsdl/contributed/tools.wsdl
|
||||||
t/acceptance/wsdl/elementAtomicComplexType.xml
|
t/acceptance/wsdl/elementAtomicComplexType.xml
|
||||||
t/acceptance/wsdl/email_account.wsdl
|
t/acceptance/wsdl/email_account.wsdl
|
||||||
t/acceptance/wsdl/generator_test.wsdl
|
t/acceptance/wsdl/generator_test.wsdl
|
||||||
|
t/acceptance/wsdl/generator_test_dot_names.wsdl
|
||||||
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
t/acceptance/wsdl/generator_unsupported_test.wsdl
|
||||||
|
t/acceptance/wsdl/import.xsd
|
||||||
|
t/acceptance/wsdl/import_loop.xsd
|
||||||
t/acceptance/wsdl/message_gateway.wsdl
|
t/acceptance/wsdl/message_gateway.wsdl
|
||||||
t/Expat/01_expat.t
|
t/acceptance/wsdl/WSDLParser-import.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser-imported.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser.wsdl
|
||||||
|
t/acceptance/wsdl/WSDLParser_import_loop.wsdl
|
||||||
|
t/contributed.wsdl
|
||||||
t/Expat/03_wsdl.t
|
t/Expat/03_wsdl.t
|
||||||
t/lib/MyComplexType.pm
|
t/lib/MyComplexType.pm
|
||||||
t/lib/MyElement.pm
|
t/lib/MyElement.pm
|
||||||
@@ -278,11 +319,15 @@ t/SOAP/WSDL/05_simpleType-union.t
|
|||||||
t/SOAP/WSDL/06_keep_alive.t
|
t/SOAP/WSDL/06_keep_alive.t
|
||||||
t/SOAP/WSDL/11_helloworld.NET.t
|
t/SOAP/WSDL/11_helloworld.NET.t
|
||||||
t/SOAP/WSDL/12_binding.t
|
t/SOAP/WSDL/12_binding.t
|
||||||
|
t/SOAP/WSDL/Client.t
|
||||||
t/SOAP/WSDL/Client/Base.t
|
t/SOAP/WSDL/Client/Base.t
|
||||||
|
t/SOAP/WSDL/Definitions.t
|
||||||
t/SOAP/WSDL/Deserializer/Hash.t
|
t/SOAP/WSDL/Deserializer/Hash.t
|
||||||
t/SOAP/WSDL/Deserializer/SOM.t
|
t/SOAP/WSDL/Deserializer/SOM.t
|
||||||
t/SOAP/WSDL/Deserializer/XSD.t
|
t/SOAP/WSDL/Deserializer/XSD.t
|
||||||
t/SOAP/WSDL/Expat/Base.t
|
t/SOAP/WSDL/Expat/Base.t
|
||||||
|
t/SOAP/WSDL/Expat/MessageParser.t
|
||||||
|
t/SOAP/WSDL/Expat/WSDLParser.t
|
||||||
t/SOAP/WSDL/Factory/Deserializer.t
|
t/SOAP/WSDL/Factory/Deserializer.t
|
||||||
t/SOAP/WSDL/Factory/Serializer.t
|
t/SOAP/WSDL/Factory/Serializer.t
|
||||||
t/SOAP/WSDL/Factory/Transport.t
|
t/SOAP/WSDL/Factory/Transport.t
|
||||||
@@ -291,7 +336,11 @@ t/SOAP/WSDL/Generator/Visitor.t
|
|||||||
t/SOAP/WSDL/Generator/Visitor/Typemap.t
|
t/SOAP/WSDL/Generator/Visitor/Typemap.t
|
||||||
t/SOAP/WSDL/Generator/XCS.t
|
t/SOAP/WSDL/Generator/XCS.t
|
||||||
t/SOAP/WSDL/Generator/XSD.t
|
t/SOAP/WSDL/Generator/XSD.t
|
||||||
|
t/SOAP/WSDL/Generator/XSD_dot_names.t
|
||||||
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
t/SOAP/WSDL/Generator/XSD_unsupported.t
|
||||||
|
t/SOAP/WSDL/Part.t
|
||||||
|
t/SOAP/WSDL/PortType.t
|
||||||
|
t/SOAP/WSDL/Serializer/XSD.t
|
||||||
t/SOAP/WSDL/Server.t
|
t/SOAP/WSDL/Server.t
|
||||||
t/SOAP/WSDL/Server/CGI.t
|
t/SOAP/WSDL/Server/CGI.t
|
||||||
t/SOAP/WSDL/Transport/01_Test.t
|
t/SOAP/WSDL/Transport/01_Test.t
|
||||||
@@ -299,6 +348,12 @@ t/SOAP/WSDL/Transport/02_HTTP.t
|
|||||||
t/SOAP/WSDL/Transport/acceptance/test2.xml
|
t/SOAP/WSDL/Transport/acceptance/test2.xml
|
||||||
t/SOAP/WSDL/Transport/acceptance/test3.xml
|
t/SOAP/WSDL/Transport/acceptance/test3.xml
|
||||||
t/SOAP/WSDL/Typelib/Fault11.t
|
t/SOAP/WSDL/Typelib/Fault11.t
|
||||||
|
t/SOAP/WSDL/XSD/Attribute.t
|
||||||
|
t/SOAP/WSDL/XSD/ComplexType.t
|
||||||
|
t/SOAP/WSDL/XSD/Element.t
|
||||||
|
t/SOAP/WSDL/XSD/Schema.t
|
||||||
|
t/SOAP/WSDL/XSD/SimpleType.t
|
||||||
|
t/SOAP/WSDL/XSD/Typelib/Attribute.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/01_constructors.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.t
|
||||||
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
t/SOAP/WSDL/XSD/Typelib/Builtin/anyType.t
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: SOAP-WSDL
|
name: SOAP-WSDL
|
||||||
version: 2.00_25
|
version: 2.00_32
|
||||||
author:
|
author:
|
||||||
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
- 'Martin Kutter <martin.kutter@fen-net.de>'
|
||||||
abstract: SOAP with WSDL support
|
abstract: SOAP with WSDL support
|
||||||
@@ -25,26 +25,27 @@ requires:
|
|||||||
List::Util: 0
|
List::Util: 0
|
||||||
Template: 0
|
Template: 0
|
||||||
Term::ReadKey: 0
|
Term::ReadKey: 0
|
||||||
|
URI: 0
|
||||||
XML::Parser::Expat: 0
|
XML::Parser::Expat: 0
|
||||||
perl: 5.8.0
|
perl: 5.8.0
|
||||||
provides:
|
provides:
|
||||||
SOAP::WSDL:
|
SOAP::WSDL:
|
||||||
file: lib/SOAP/WSDL.pm
|
file: lib/SOAP/WSDL.pm
|
||||||
version: 2.00_25
|
version: 2.00_32
|
||||||
SOAP::WSDL::Base:
|
SOAP::WSDL::Base:
|
||||||
file: lib/SOAP/WSDL/Base.pm
|
file: lib/SOAP/WSDL/Base.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Binding:
|
SOAP::WSDL::Binding:
|
||||||
file: lib/SOAP/WSDL/Binding.pm
|
file: lib/SOAP/WSDL/Binding.pm
|
||||||
SOAP::WSDL::Client:
|
SOAP::WSDL::Client:
|
||||||
file: lib/SOAP/WSDL/Client.pm
|
file: lib/SOAP/WSDL/Client.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Client::Base:
|
SOAP::WSDL::Client::Base:
|
||||||
file: lib/SOAP/WSDL/Client/Base.pm
|
file: lib/SOAP/WSDL/Client/Base.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::Definitions:
|
SOAP::WSDL::Definitions:
|
||||||
file: lib/SOAP/WSDL/Definitions.pm
|
file: lib/SOAP/WSDL/Definitions.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Deserializer::Hash:
|
SOAP::WSDL::Deserializer::Hash:
|
||||||
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
file: lib/SOAP/WSDL/Deserializer/Hash.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -56,13 +57,13 @@ provides:
|
|||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::Expat::Base:
|
SOAP::WSDL::Expat::Base:
|
||||||
file: lib/SOAP/WSDL/Expat/Base.pm
|
file: lib/SOAP/WSDL/Expat/Base.pm
|
||||||
version: 2.00_24
|
version: 2.00_32
|
||||||
SOAP::WSDL::Expat::Message2Hash:
|
SOAP::WSDL::Expat::Message2Hash:
|
||||||
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
file: lib/SOAP/WSDL/Expat/Message2Hash.pm
|
||||||
version: 2.00_24
|
version: 2.00_27
|
||||||
SOAP::WSDL::Expat::MessageParser:
|
SOAP::WSDL::Expat::MessageParser:
|
||||||
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
file: lib/SOAP/WSDL/Expat/MessageParser.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Expat::MessageStreamParser:
|
SOAP::WSDL::Expat::MessageStreamParser:
|
||||||
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm
|
||||||
version: 2.00_24
|
version: 2.00_24
|
||||||
@@ -77,13 +78,15 @@ provides:
|
|||||||
version: 2.00_24
|
version: 2.00_24
|
||||||
SOAP::WSDL::Factory::Transport:
|
SOAP::WSDL::Factory::Transport:
|
||||||
file: lib/SOAP/WSDL/Factory/Transport.pm
|
file: lib/SOAP/WSDL/Factory/Transport.pm
|
||||||
version: 2.00_25
|
version: 2.00_31
|
||||||
SOAP::WSDL::Generator::Template:
|
SOAP::WSDL::Generator::Template:
|
||||||
file: lib/SOAP/WSDL/Generator/Template.pm
|
file: lib/SOAP/WSDL/Generator/Template.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
|
SOAP::WSDL::Generator::Template::Plugin::XSD:
|
||||||
|
file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm
|
||||||
SOAP::WSDL::Generator::Template::XSD:
|
SOAP::WSDL::Generator::Template::XSD:
|
||||||
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
file: lib/SOAP/WSDL/Generator/Template/XSD.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Generator::Visitor:
|
SOAP::WSDL::Generator::Visitor:
|
||||||
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
file: lib/SOAP/WSDL/Generator/Visitor.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -120,13 +123,13 @@ provides:
|
|||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::Serializer::XSD:
|
SOAP::WSDL::Serializer::XSD:
|
||||||
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
file: lib/SOAP/WSDL/Serializer/XSD.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Server:
|
SOAP::WSDL::Server:
|
||||||
file: lib/SOAP/WSDL/Server.pm
|
file: lib/SOAP/WSDL/Server.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Server::CGI:
|
SOAP::WSDL::Server::CGI:
|
||||||
file: lib/SOAP/WSDL/Server/CGI.pm
|
file: lib/SOAP/WSDL/Server/CGI.pm
|
||||||
version: 2.00_25
|
version: 2.00_27
|
||||||
SOAP::WSDL::Service:
|
SOAP::WSDL::Service:
|
||||||
file: lib/SOAP/WSDL/Service.pm
|
file: lib/SOAP/WSDL/Service.pm
|
||||||
SOAP::WSDL::Transport::HTTP:
|
SOAP::WSDL::Transport::HTTP:
|
||||||
@@ -139,13 +142,17 @@ provides:
|
|||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
SOAP::WSDL::TypeLookup:
|
SOAP::WSDL::TypeLookup:
|
||||||
file: lib/SOAP/WSDL/TypeLookup.pm
|
file: lib/SOAP/WSDL/TypeLookup.pm
|
||||||
|
version: 2.00_31
|
||||||
SOAP::WSDL::Types:
|
SOAP::WSDL::Types:
|
||||||
file: lib/SOAP/WSDL/Types.pm
|
file: lib/SOAP/WSDL/Types.pm
|
||||||
|
SOAP::WSDL::XSD::Attribute:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Attribute.pm
|
||||||
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Builtin:
|
SOAP::WSDL::XSD::Builtin:
|
||||||
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
file: lib/SOAP/WSDL/XSD/Builtin.pm
|
||||||
SOAP::WSDL::XSD::ComplexType:
|
SOAP::WSDL::XSD::ComplexType:
|
||||||
file: lib/SOAP/WSDL/XSD/ComplexType.pm
|
file: lib/SOAP/WSDL/XSD/ComplexType.pm
|
||||||
version: 2.00_25
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Element:
|
SOAP::WSDL::XSD::Element:
|
||||||
file: lib/SOAP/WSDL/XSD/Element.pm
|
file: lib/SOAP/WSDL/XSD/Element.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -157,6 +164,12 @@ provides:
|
|||||||
SOAP::WSDL::XSD::SimpleType:
|
SOAP::WSDL::XSD::SimpleType:
|
||||||
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
file: lib/SOAP/WSDL/XSD/SimpleType.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
|
SOAP::WSDL::XSD::Typelib::Attribute:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm
|
||||||
|
version: 2.00_29
|
||||||
|
SOAP::WSDL::XSD::Typelib::AttributeSet:
|
||||||
|
file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm
|
||||||
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin:
|
SOAP::WSDL::XSD::Typelib::Builtin:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm
|
||||||
version: 2.00_25
|
version: 2.00_25
|
||||||
@@ -184,6 +197,7 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::anyType:
|
SOAP::WSDL::XSD::Typelib::Builtin::anyType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm
|
||||||
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
SOAP::WSDL::XSD::Typelib::Builtin::anyURI:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
SOAP::WSDL::XSD::Typelib::Builtin::base64Binary:
|
||||||
@@ -256,10 +270,10 @@ provides:
|
|||||||
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType:
|
SOAP::WSDL::XSD::Typelib::ComplexType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm
|
||||||
version: 2.00_25
|
version: 2.00_31
|
||||||
SOAP::WSDL::XSD::Typelib::Element:
|
SOAP::WSDL::XSD::Typelib::Element:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/Element.pm
|
||||||
version: 2.00_25
|
version: 2.00_29
|
||||||
SOAP::WSDL::XSD::Typelib::SimpleType:
|
SOAP::WSDL::XSD::Typelib::SimpleType:
|
||||||
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm
|
||||||
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
SOAP::WSDL::XSD::Typelib::SimpleType::restriction:
|
||||||
|
|||||||
@@ -1,7 +1,23 @@
|
|||||||
MIGRATING
|
MIGRATING
|
||||||
---------
|
---------
|
||||||
|
|
||||||
This document describes how to migrate from 2.00_24 and before versions to
|
MIGRATING FROM PRE-2.00_29
|
||||||
|
--------------------------
|
||||||
|
SOAP::WSDL 2.00_29 added experimental XML attribute support. The attribute
|
||||||
|
support changed the code of the generated classes, which may now
|
||||||
|
require the class SOAP::WSDL::XSD::Typelib::Attribute introduced in the same
|
||||||
|
pre-release.
|
||||||
|
|
||||||
|
While interfaces generated with pre-releases back to 2.00_25 work without
|
||||||
|
change, this does not hold true vice versa: Interfaces generated with
|
||||||
|
2.00_29 and above won't work with older pre-releases.
|
||||||
|
|
||||||
|
You'll have to update SOAP::WSDL on all your machines.
|
||||||
|
|
||||||
|
MIGRATING FROM PRE-2.00_24
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
This section describes how to migrate from 2.00_24 and before versions to
|
||||||
2.00_25.
|
2.00_25.
|
||||||
|
|
||||||
Migrating from 2.00_xx
|
Migrating from 2.00_xx
|
||||||
|
|||||||
@@ -3,22 +3,22 @@ TODO list for SOAP::WSDL
|
|||||||
2.00 Pre-releases
|
2.00 Pre-releases
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
* Act as SOAP Server [ 1842436 ]
|
||||||
|
|
||||||
2.1 release
|
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
|
2.2 release
|
||||||
--------
|
--------
|
||||||
* XML schema support ("minimal conformant") (#1764845)
|
* XML schema support ("minimal conformant") [ 1764845 ]
|
||||||
|
|
||||||
* Support SOAP attachments
|
* Support SOAP attachments
|
||||||
|
|
||||||
* Act as SOAP Server
|
|
||||||
|
|
||||||
3.0 release
|
3.0 release
|
||||||
--------
|
--------
|
||||||
We're not thinking that far ahead right now.
|
We're not thinking that far ahead right now.
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
use lib '../lib';
|
||||||
|
use lib '../example/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Benchmark qw(cmpthese);
|
||||||
|
|
||||||
|
use XML::Compile::Transport::SOAPHTTP();
|
||||||
|
use XML::Compile::Util;
|
||||||
|
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 $compile = XML::Compile::WSDL11->new('../example/wsdl/Person.wsdl');
|
||||||
|
my $call = $compile->compileClient('ListPerson');
|
||||||
|
$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({});
|
||||||
|
|
||||||
|
my $lite = SOAP::Lite->new()->default_ns('http://www.example.org/benchmark/')
|
||||||
|
->proxy('http://localhost:81/soap-wsdl-test/person.pl');
|
||||||
|
$lite->on_action( sub { 'http://www.example.org/benchmark/ListPerson' } );
|
||||||
|
|
||||||
|
# # register for SOAP 1.1
|
||||||
|
SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );
|
||||||
|
my $wsdl_xs = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
# trigger loading of XML Data
|
||||||
|
my $count = 100;
|
||||||
|
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
|
||||||
|
|
||||||
|
Benchmark $n: Store result in private variable and destroy it
|
||||||
|
";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
# 'XML::Simple' => sub { my $result = XMLin( MyData::xml() )},
|
||||||
|
'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) },
|
||||||
|
'XML::Compile' => sub { my $result = $call->() },
|
||||||
|
'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) },
|
||||||
|
# 'SOAP::Lite' => sub { my $result = $deserializer->deserialize( MyData::xml() )},
|
||||||
|
'SOAP::Lite' => sub { my $som = $lite->call('ListPerson') },
|
||||||
|
};
|
||||||
|
|
||||||
|
print "\nBenchmark $n: Push result on list\n";
|
||||||
|
$n++;
|
||||||
|
cmpthese $count, {
|
||||||
|
# 'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||||
|
'XML::Compile' => sub { push @data, $call->() },
|
||||||
|
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||||
|
# 'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||||
|
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||||
|
};
|
||||||
|
|
||||||
|
@data = ();
|
||||||
|
print "\nBenchmark $n: Play it again, Sam\n";
|
||||||
|
|
||||||
|
cmpthese $count, {
|
||||||
|
# 'XML::Simple' => sub { push @data, XMLin( MyData::xml() )},
|
||||||
|
'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) },
|
||||||
|
'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) },
|
||||||
|
'XML::Compile' => sub { push @data, $call->() },
|
||||||
|
# 'SOAP::Lite' => sub { push @data, $deserializer->deserialize( MyData::xml() )}
|
||||||
|
'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') },
|
||||||
|
};
|
||||||
|
|
||||||
@@ -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>2</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation2</Salutation>
|
||||||
|
<Name>Name2</Name>
|
||||||
|
<GivenName>Martin2</GivenName>
|
||||||
|
<DateOfBirth>1970-01-02</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 2</Street>
|
||||||
|
<ZIP>00002</ZIP>
|
||||||
|
<City>City2</City>
|
||||||
|
<Country>Country2</Country>
|
||||||
|
<PhoneNumber>++4900000002</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000002</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 2</Street>
|
||||||
|
<ZIP>222222</ZIP>
|
||||||
|
<City>SomeCity2</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4920000002</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4920000002</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100002</ContractID>
|
||||||
|
<ContractName>SomeContract2</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100021</ContractID>
|
||||||
|
<ContractName>SomeContract21</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100022</ContractID>
|
||||||
|
<ContractName>SomeContract22</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000023</ContractID>
|
||||||
|
<ContractName>SomeContract23</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>3</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation3</Salutation>
|
||||||
|
<Name>Name3</Name>
|
||||||
|
<GivenName>Martin3</GivenName>
|
||||||
|
<DateOfBirth>1970-01-03</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 3</Street>
|
||||||
|
<ZIP>00003</ZIP>
|
||||||
|
<City>City3</City>
|
||||||
|
<Country>Country3</Country>
|
||||||
|
<PhoneNumber>++4900000003</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000003</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 3</Street>
|
||||||
|
<ZIP>333333</ZIP>
|
||||||
|
<City>SomeCity3</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4930000003</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4930000003</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100003</ContractID>
|
||||||
|
<ContractName>SomeContract3</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100031</ContractID>
|
||||||
|
<ContractName>SomeContract31</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100033</ContractID>
|
||||||
|
<ContractName>SomeContract33</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000033</ContractID>
|
||||||
|
<ContractName>SomeContract33</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>4</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation4</Salutation>
|
||||||
|
<Name>Name4</Name>
|
||||||
|
<GivenName>Martin4</GivenName>
|
||||||
|
<DateOfBirth>1970-01-04</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 4</Street>
|
||||||
|
<ZIP>00004</ZIP>
|
||||||
|
<City>City4</City>
|
||||||
|
<Country>Country4</Country>
|
||||||
|
<PhoneNumber>++4900000004</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000004</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 4</Street>
|
||||||
|
<ZIP>444444</ZIP>
|
||||||
|
<City>SomeCity4</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4940000004</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4940000004</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100004</ContractID>
|
||||||
|
<ContractName>SomeContract4</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100041</ContractID>
|
||||||
|
<ContractName>SomeContract41</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100044</ContractID>
|
||||||
|
<ContractName>SomeContract44</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000044</ContractID>
|
||||||
|
<ContractName>SomeContract44</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>5</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation5</Salutation>
|
||||||
|
<Name>Name5</Name>
|
||||||
|
<GivenName>Martin5</GivenName>
|
||||||
|
<DateOfBirth>1970-01-05</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 5</Street>
|
||||||
|
<ZIP>00005</ZIP>
|
||||||
|
<City>City5</City>
|
||||||
|
<Country>Country5</Country>
|
||||||
|
<PhoneNumber>++4900000005</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000005</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 5</Street>
|
||||||
|
<ZIP>555555</ZIP>
|
||||||
|
<City>SomeCity5</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4950000005</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4950000005</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100005</ContractID>
|
||||||
|
<ContractName>SomeContract5</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100051</ContractID>
|
||||||
|
<ContractName>SomeContract51</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100055</ContractID>
|
||||||
|
<ContractName>SomeContract55</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000053</ContractID>
|
||||||
|
<ContractName>SomeContract53</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>6</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation6</Salutation>
|
||||||
|
<Name>Name6</Name>
|
||||||
|
<GivenName>Martin6</GivenName>
|
||||||
|
<DateOfBirth>1970-01-06</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 6</Street>
|
||||||
|
<ZIP>00006</ZIP>
|
||||||
|
<City>City6</City>
|
||||||
|
<Country>Country6</Country>
|
||||||
|
<PhoneNumber>++4900000006</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000006</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 6</Street>
|
||||||
|
<ZIP>666666</ZIP>
|
||||||
|
<City>SomeCity6</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4960000006</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4960000006</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100006</ContractID>
|
||||||
|
<ContractName>SomeContract6</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100061</ContractID>
|
||||||
|
<ContractName>SomeContract61</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100066</ContractID>
|
||||||
|
<ContractName>SomeContract66</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000063</ContractID>
|
||||||
|
<ContractName>SomeContract63</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>7</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation7</Salutation>
|
||||||
|
<Name>Name7</Name>
|
||||||
|
<GivenName>Martin7</GivenName>
|
||||||
|
<DateOfBirth>1970-01-07</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 7</Street>
|
||||||
|
<ZIP>00007</ZIP>
|
||||||
|
<City>City7</City>
|
||||||
|
<Country>Country7</Country>
|
||||||
|
<PhoneNumber>++4900000007</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000007</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 7</Street>
|
||||||
|
<ZIP>777777</ZIP>
|
||||||
|
<City>SomeCity7</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4970000007</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4970000007</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100007</ContractID>
|
||||||
|
<ContractName>SomeContract7</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100071</ContractID>
|
||||||
|
<ContractName>SomeContract71</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100077</ContractID>
|
||||||
|
<ContractName>SomeContract77</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000073</ContractID>
|
||||||
|
<ContractName>SomeContract73</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>8</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation8</Salutation>
|
||||||
|
<Name>Name8</Name>
|
||||||
|
<GivenName>Martin8</GivenName>
|
||||||
|
<DateOfBirth>1970-01-08</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 8</Street>
|
||||||
|
<ZIP>00008</ZIP>
|
||||||
|
<City>City8</City>
|
||||||
|
<Country>Country8</Country>
|
||||||
|
<PhoneNumber>++4900000008</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000008</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 8</Street>
|
||||||
|
<ZIP>888888</ZIP>
|
||||||
|
<City>SomeCity8</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4980000008</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4980000008</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100008</ContractID>
|
||||||
|
<ContractName>SomeContract8</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100081</ContractID>
|
||||||
|
<ContractName>SomeContract81</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100088</ContractID>
|
||||||
|
<ContractName>SomeContract88</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000083</ContractID>
|
||||||
|
<ContractName>SomeContract83</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>9</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation9</Salutation>
|
||||||
|
<Name>Name9</Name>
|
||||||
|
<GivenName>Martin9</GivenName>
|
||||||
|
<DateOfBirth>1970-01-09</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 9</Street>
|
||||||
|
<ZIP>00009</ZIP>
|
||||||
|
<City>City9</City>
|
||||||
|
<Country>Country9</Country>
|
||||||
|
<PhoneNumber>++4900000009</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491700000009</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 9</Street>
|
||||||
|
<ZIP>999999</ZIP>
|
||||||
|
<City>SomeCity9</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++4990000009</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4990000009</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100009</ContractID>
|
||||||
|
<ContractName>SomeContract9</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100091</ContractID>
|
||||||
|
<ContractName>SomeContract91</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>100099</ContractID>
|
||||||
|
<ContractName>SomeContract99</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000093</ContractID>
|
||||||
|
<ContractName>SomeContract93</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
<NewElement>
|
||||||
|
<PersonID>
|
||||||
|
<ID>10</ID>
|
||||||
|
</PersonID>
|
||||||
|
<Salutation>Salutation10</Salutation>
|
||||||
|
<Name>Name10</Name>
|
||||||
|
<GivenName>Martin10</GivenName>
|
||||||
|
<DateOfBirth>1970-01-010</DateOfBirth>
|
||||||
|
<HomeAddress>
|
||||||
|
<Street>Street 10</Street>
|
||||||
|
<ZIP>000010</ZIP>
|
||||||
|
<City>City10</City>
|
||||||
|
<Country>Country10</Country>
|
||||||
|
<PhoneNumber>++49000000010</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++4917000000010</MobilePhoneNumber>
|
||||||
|
</HomeAddress>
|
||||||
|
<WorkAddress>
|
||||||
|
<Street>Somestreet 10</Street>
|
||||||
|
<ZIP>101010101010</ZIP>
|
||||||
|
<City>SomeCity10</City>
|
||||||
|
<Country>Germany</Country>
|
||||||
|
<PhoneNumber>++491000000010</PhoneNumber>
|
||||||
|
<MobilePhoneNumber>++491000000010</MobilePhoneNumber>
|
||||||
|
</WorkAddress>
|
||||||
|
<Contracts>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000010</ContractID>
|
||||||
|
<ContractName>SomeContract10</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>1000101</ContractID>
|
||||||
|
<ContractName>SomeContract101</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>10001010</ContractID>
|
||||||
|
<ContractName>SomeContract1010</ContractName>
|
||||||
|
</Contract>
|
||||||
|
<Contract>
|
||||||
|
<ContractID>10000103</ContractID>
|
||||||
|
<ContractName>SomeContract103</ContractName>
|
||||||
|
</Contract>
|
||||||
|
</Contracts>
|
||||||
|
</NewElement>
|
||||||
|
</out>
|
||||||
|
</ListPersonResponse>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
use lib '../lib';
|
||||||
|
use lib '../example/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/lib';
|
||||||
|
use lib '../../SOAP-WSDL_XS/blib/arch';
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
|
||||||
|
my $soap = MyInterfaces::TestService::TestPort->new();
|
||||||
|
# Load all classes - XML::Compile has created everything before, too
|
||||||
|
for (1..100) { $soap->ListPerson({}) };
|
||||||
+5
-8
@@ -69,8 +69,6 @@ my $url = $ARGV[0];
|
|||||||
pod2usage( -exit => 1 , verbose => 2 ) if ($opt{help});
|
pod2usage( -exit => 1 , verbose => 2 ) if ($opt{help});
|
||||||
pod2usage( -exit => 1 , verbose => 1 ) if not ($url);
|
pod2usage( -exit => 1 , verbose => 1 ) if not ($url);
|
||||||
|
|
||||||
my $parser = SOAP::WSDL::Expat::WSDLParser->new();
|
|
||||||
|
|
||||||
local $ENV{HTTP_PROXY} = $opt{proxy} if $opt{proxy};
|
local $ENV{HTTP_PROXY} = $opt{proxy} if $opt{proxy};
|
||||||
local $ENV{HTTPS_PROXY} = $opt{proxy} if $opt{proxy};
|
local $ENV{HTTPS_PROXY} = $opt{proxy} if $opt{proxy};
|
||||||
|
|
||||||
@@ -81,12 +79,11 @@ my $lwp = LWP::UserAgent->new(
|
|||||||
);
|
);
|
||||||
$lwp->env_proxy(); # get proxy from environment. Works for both http & https.
|
$lwp->env_proxy(); # get proxy from environment. Works for both http & https.
|
||||||
|
|
||||||
my $response = $lwp->get($url);
|
my $parser = SOAP::WSDL::Expat::WSDLParser->new({
|
||||||
die $response->message(), "\n" if $response->code != 200;
|
user_agent => $lwp,
|
||||||
|
});
|
||||||
|
|
||||||
my $xml = $response->content();
|
my $definitions = $parser->parse_uri( $url );
|
||||||
|
|
||||||
my $definitions = $parser->parse_string( $xml );
|
|
||||||
|
|
||||||
my %typemap = ();
|
my %typemap = ();
|
||||||
|
|
||||||
@@ -112,7 +109,7 @@ $generator->set_element_prefix($opt{ element_prefix }) if $generator->can('set_e
|
|||||||
$generator->set_interface_prefix($opt{ interface_prefix }) if $generator->can('set_interface_prefix');
|
$generator->set_interface_prefix($opt{ interface_prefix }) if $generator->can('set_interface_prefix');
|
||||||
$generator->set_OUTPUT_PATH($opt{ base_path }) if $generator->can('set_OUTPUT_PATH');
|
$generator->set_OUTPUT_PATH($opt{ base_path }) if $generator->can('set_OUTPUT_PATH');
|
||||||
$generator->set_definitions($definitions) if $generator->can('set_definitions');
|
$generator->set_definitions($definitions) if $generator->can('set_definitions');
|
||||||
$generator->set_wsdl($xml) if $generator->can('set_wsdl');
|
# $generator->set_wsdl($xml) if $generator->can('set_wsdl');
|
||||||
|
|
||||||
# start with typelib, as errors will most likely occur here...
|
# start with typelib, as errors will most likely occur here...
|
||||||
$generator->generate();
|
$generator->generate();
|
||||||
|
|||||||
@@ -53,3 +53,4 @@ Then run the helloworld.pl from the examples directory. It should print
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|||||||
Executable
+84
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
package main;
|
||||||
|
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 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
+5
-2
@@ -1,11 +1,12 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use lib 'lib';
|
use lib 'lib'; # just needed because interface lies here
|
||||||
|
|
||||||
# I have to generate the interface using wsdl2perl.pl before
|
# I have to generate the interface using wsdl2perl.pl before
|
||||||
use MyInterfaces::HelloWorld::HelloWorldSoap;
|
use MyInterfaces::HelloWorld::HelloWorldSoap;
|
||||||
|
|
||||||
|
# I instantiate a interface class.
|
||||||
my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new();
|
my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new();
|
||||||
|
|
||||||
# I have to lookup the method and synopsis from the interface's pod
|
# I have to lookup the method and synopsis from the interface's pod
|
||||||
@@ -14,8 +15,10 @@ my $result = $soap->sayHello({
|
|||||||
givenName => $ARGV[0] || '"Your given name"',
|
givenName => $ARGV[0] || '"Your given name"',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
# SOAP::WSDL::SOAP::Typelib::Fault11 objects are false, but serialize to XML
|
||||||
die $result if not $result;
|
die $result if not $result;
|
||||||
|
|
||||||
# I have to lookup the output parameter from the interface's POD - or try:
|
# 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
|
# Will die on bad method names with a list of available methods
|
||||||
print $result->get_sayHelloResult(), "\n";
|
print $result->get_sayHelloResult(), "\n";
|
||||||
|
|
||||||
|
|||||||
@@ -4,18 +4,22 @@ use warnings;
|
|||||||
use XML::Compile::WSDL11;
|
use XML::Compile::WSDL11;
|
||||||
use XML::Compile::Transport::SOAPHTTP;
|
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');
|
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');
|
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->(
|
my $result = $call->(
|
||||||
name => $ARGV[1] || '"Your name"',
|
name => $ARGV[1] || '"Your name"',
|
||||||
givenName => $ARGV[0] || '"Your given 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;
|
die "Error calling soap method" if not defined $result;
|
||||||
|
|
||||||
# I have to lookup the output parameters from the WSDL - or try Dumper
|
# I have to lookup the output parameters from the WSDL - or try Data::Dumper
|
||||||
print $result->{ parameters }->{ sayHelloResult }, "\n";
|
print $result->{ parameters }->{ sayHelloResult }, "\n";
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
use strict;
|
#use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use SOAP::Lite;
|
use SOAP::Lite +trace;
|
||||||
|
|
||||||
# I have to lookup the URL from the WSDL
|
# I have to lookup the URL from the WSDL
|
||||||
my $soap = SOAP::Lite->new(
|
my $soap = SOAP::Lite->new(
|
||||||
@@ -13,11 +13,12 @@ $soap->on_action( sub { "urn:HelloWorld#sayHello" });
|
|||||||
$soap->autotype(0);
|
$soap->autotype(0);
|
||||||
|
|
||||||
# I have to lookup the top level element's namespace from the WSDL
|
# 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 encode all parameters as SOAP::Data objects
|
||||||
# I have to know the order of parameters
|
# I have to know the order of parameters
|
||||||
my $som = $soap->call(
|
my $som = $soap->call(
|
||||||
SOAP::Data->name("sayHello")
|
"sayHello",
|
||||||
->attr({ xmlns => 'urn:HelloWorld' }),
|
|
||||||
SOAP::Data->name('name')->value( $ARGV[1] || '"Your name"'),
|
SOAP::Data->name('name')->value( $ARGV[1] || '"Your name"'),
|
||||||
SOAP::Data->name('givenName')->value( $ARGV[0] || '"Your given name"'),
|
SOAP::Data->name('givenName')->value( $ARGV[0] || '"Your given name"'),
|
||||||
);
|
);
|
||||||
@@ -25,3 +26,4 @@ my $som = $soap->call(
|
|||||||
die $som->fault->{ faultstring } if ($som->fault);
|
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();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
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():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
|
my %CountCookiesResult_of :ATTR(:get<CountCookiesResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
CountCookiesResult
|
CountCookiesResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
CountCookiesResult => \%CountCookiesResult_of,
|
CountCookiesResult => \%CountCookiesResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CountCookiesResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
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
|
CountCookiesResult => $some_value, # int
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %BarCodeParam_of :ATTR(:get<BarCodeParam>);
|
my %BarCodeParam_of :ATTR(:get<BarCodeParam>);
|
||||||
@@ -30,8 +32,8 @@ __PACKAGE__->_factory(
|
|||||||
BarCodeText
|
BarCodeText
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
BarCodeParam => \%BarCodeParam_of,
|
BarCodeParam => \%BarCodeParam_of,
|
||||||
BarCodeText => \%BarCodeText_of,
|
BarCodeText => \%BarCodeText_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
BarCodeParam => 'MyTypes::BarCodeData',
|
BarCodeParam => 'MyTypes::BarCodeData',
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GenerateBarCodeResult_of :ATTR(:get<GenerateBarCodeResult>);
|
my %GenerateBarCodeResult_of :ATTR(:get<GenerateBarCodeResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GenerateBarCodeResult
|
GenerateBarCodeResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
GenerateBarCodeResult => \%GenerateBarCodeResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GenerateBarCodeResult => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
GenerateBarCodeResult => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %CountryName_of :ATTR(:get<CountryName>);
|
my %CountryName_of :ATTR(:get<CountryName>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
CountryName
|
CountryName
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
CountryName => \%CountryName_of,
|
CountryName => \%CountryName_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CountryName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
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
|
CountryName => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetCitiesByCountryResult_of :ATTR(:get<GetCitiesByCountryResult>);
|
my %GetCitiesByCountryResult_of :ATTR(:get<GetCitiesByCountryResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetCitiesByCountryResult
|
GetCitiesByCountryResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
GetCitiesByCountryResult => \%GetCitiesByCountryResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetCitiesByCountryResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
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
|
GetCitiesByCountryResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
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():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
|
my %GetFortuneCookieResult_of :ATTR(:get<GetFortuneCookieResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetFortuneCookieResult
|
GetFortuneCookieResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetFortuneCookieResult => \%GetFortuneCookieResult_of,
|
GetFortuneCookieResult => \%GetFortuneCookieResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetFortuneCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
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
|
GetFortuneCookieResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %index_of :ATTR(:get<index>);
|
my %index_of :ATTR(:get<index>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
index
|
index
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
index => \%index_of,
|
index => \%index_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
index => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
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
|
index => $some_value, # int
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
|
my %GetSpecificCookieResult_of :ATTR(:get<GetSpecificCookieResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetSpecificCookieResult
|
GetSpecificCookieResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetSpecificCookieResult => \%GetSpecificCookieResult_of,
|
GetSpecificCookieResult => \%GetSpecificCookieResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetSpecificCookieResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
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
|
GetSpecificCookieResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %CityName_of :ATTR(:get<CityName>);
|
my %CityName_of :ATTR(:get<CityName>);
|
||||||
@@ -30,8 +32,8 @@ __PACKAGE__->_factory(
|
|||||||
CountryName
|
CountryName
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
CityName => \%CityName_of,
|
CityName => \%CityName_of,
|
||||||
CountryName => \%CountryName_of,
|
CountryName => \%CountryName_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
CityName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
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
|
CityName => $some_value, # string
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %GetWeatherResult_of :ATTR(:get<GetWeatherResult>);
|
my %GetWeatherResult_of :ATTR(:get<GetWeatherResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
GetWeatherResult
|
GetWeatherResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
GetWeatherResult => \%GetWeatherResult_of,
|
GetWeatherResult => \%GetWeatherResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
GetWeatherResult => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
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
|
GetWeatherResult => $some_value, # string
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
package MyElements::ListPerson;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('ListPerson');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %in_of :ATTR(:get<in>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
in
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
in => \%in_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
in => 'MyTypes::Person',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::ListPerson
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
ListPerson from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::ListPerson->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
in => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
package MyElements::ListPersonResponse;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/' }
|
||||||
|
|
||||||
|
__PACKAGE__->__set_name('ListPersonResponse');
|
||||||
|
__PACKAGE__->__set_nillable();
|
||||||
|
__PACKAGE__->__set_minOccurs();
|
||||||
|
__PACKAGE__->__set_maxOccurs();
|
||||||
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
|
);
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %out_of :ATTR(:get<out>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
out
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
out => \%out_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
out => 'MyTypes::ArrayOfPerson',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} # end of BLOCK
|
||||||
|
1;
|
||||||
|
|
||||||
|
# __END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyElements::ListPersonResponse
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined element
|
||||||
|
ListPersonResponse from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
my $element = MyElements::ListPersonResponse->new($data);
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -12,8 +12,8 @@ __PACKAGE__->__set_minOccurs();
|
|||||||
__PACKAGE__->__set_maxOccurs();
|
__PACKAGE__->__set_maxOccurs();
|
||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::int
|
SOAP::WSDL::XSD::Typelib::Builtin::int
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
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():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
,
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ __PACKAGE__->__set_maxOccurs();
|
|||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
|
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
{ # BLOCK to scope variables
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
|
my %readNodeCountResult_of :ATTR(:get<readNodeCountResult>);
|
||||||
@@ -28,7 +30,7 @@ __PACKAGE__->_factory(
|
|||||||
readNodeCountResult
|
readNodeCountResult
|
||||||
) ],
|
) ],
|
||||||
{
|
{
|
||||||
readNodeCountResult => \%readNodeCountResult_of,
|
readNodeCountResult => \%readNodeCountResult_of,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
readNodeCountResult => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
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
|
readNodeCountResult => $some_value, # int
|
||||||
}
|
},
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ __PACKAGE__->__set_minOccurs();
|
|||||||
__PACKAGE__->__set_maxOccurs();
|
__PACKAGE__->__set_maxOccurs();
|
||||||
__PACKAGE__->__set_ref();
|
__PACKAGE__->__set_ref();
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::Builtin::string
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
package MyInterfaces::BarCode::BarCodeSoap;
|
package MyInterfaces::BarCode::BarCodeSoap;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
use base qw(SOAP::WSDL::Client::Base);
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
# only load if it hasn't been loaded before
|
# only load if it hasn't been loaded before
|
||||||
require MyTypemaps::BarCode
|
require MyTypemaps::BarCode
|
||||||
if not MyTypemaps::BarCode->can('get_class');
|
if not MyTypemaps::BarCode->can('get_class');
|
||||||
|
|
||||||
sub START {
|
sub START {
|
||||||
$_[0]->set_proxy('http://www.webservicex.net/genericbarcode.asmx') if not $_[2]->{proxy};
|
$_[0]->set_proxy('http://www.webservicex.net/genericbarcode.asmx') if not $_[2]->{proxy};
|
||||||
@@ -16,8 +17,9 @@ sub START {
|
|||||||
|
|
||||||
sub GenerateBarCode {
|
sub GenerateBarCode {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GenerateBarCode must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GenerateBarCode',
|
operation => 'GenerateBarCode',
|
||||||
soap_action => 'http://www.webservicex.net/GenerateBarCode',
|
soap_action => 'http://www.webservicex.net/GenerateBarCode',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -128,6 +130,6 @@ WebserviceX.NET barcode library that provides the means to create barcodes for p
|
|||||||
|
|
||||||
=head1 AUTHOR
|
=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
|
=pod
|
||||||
+29
-11
@@ -1,12 +1,13 @@
|
|||||||
package MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
package MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
use base qw(SOAP::WSDL::Client::Base);
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
# only load if it hasn't been loaded before
|
# only load if it hasn't been loaded before
|
||||||
require MyTypemaps::FullerData_x0020_Fortune_x0020_Cookie
|
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 {
|
sub START {
|
||||||
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
|
$_[0]->set_proxy('http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx') if not $_[2]->{proxy};
|
||||||
@@ -16,8 +17,9 @@ sub START {
|
|||||||
|
|
||||||
sub readNodeCount {
|
sub readNodeCount {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "readNodeCount must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'readNodeCount',
|
operation => 'readNodeCount',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/readNodeCount',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -38,8 +40,9 @@ sub readNodeCount {
|
|||||||
|
|
||||||
sub GetFortuneCookie {
|
sub GetFortuneCookie {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetFortuneCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetFortuneCookie',
|
operation => 'GetFortuneCookie',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetFortuneCookie',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -60,8 +63,9 @@ sub GetFortuneCookie {
|
|||||||
|
|
||||||
sub CountCookies {
|
sub CountCookies {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "CountCookies must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'CountCookies',
|
operation => 'CountCookies',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/CountCookies',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -82,8 +86,9 @@ sub CountCookies {
|
|||||||
|
|
||||||
sub GetSpecificCookie {
|
sub GetSpecificCookie {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetSpecificCookie must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetSpecificCookie',
|
operation => 'GetSpecificCookie',
|
||||||
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie',
|
soap_action => 'http://www.fullerdata.com/FortuneCookie/FortuneCookie.asmx/GetSpecificCookie',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -117,6 +122,19 @@ __END__
|
|||||||
|
|
||||||
MyInterfaces::FullerData_x0020_Fortune_x0020_Cookie::FullerData_x0020_Fortune_x0020_CookieSoap - SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie Web Service
|
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
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
SOAP Interface for the FullerData_x0020_Fortune_x0020_Cookie web service
|
||||||
@@ -156,21 +174,21 @@ methods, as long as you meet the structure.
|
|||||||
|
|
||||||
Display the number of nodes specified in fortune XML document
|
Display the number of nodes specified in fortune XML document
|
||||||
|
|
||||||
$interface->readNodeCount(,
|
$interface->readNodeCount(,,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 GetFortuneCookie
|
=head3 GetFortuneCookie
|
||||||
|
|
||||||
Get a random fortune cookie from the XML document
|
Get a random fortune cookie from the XML document
|
||||||
|
|
||||||
$interface->GetFortuneCookie(,
|
$interface->GetFortuneCookie(,,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 CountCookies
|
=head3 CountCookies
|
||||||
|
|
||||||
Count the actual number of nodes in the XML document of fortunes
|
Count the actual number of nodes in the XML document of fortunes
|
||||||
|
|
||||||
$interface->CountCookies(,
|
$interface->CountCookies(,,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 GetSpecificCookie
|
=head3 GetSpecificCookie
|
||||||
@@ -179,13 +197,13 @@ Get a specific cookie by the XML node number
|
|||||||
|
|
||||||
$interface->GetSpecificCookie( {
|
$interface->GetSpecificCookie( {
|
||||||
index => $some_value, # int
|
index => $some_value, # int
|
||||||
},
|
},,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=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
|
=pod
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
package MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
package MyInterfaces::GlobalWeather::GlobalWeatherSoap;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
use base qw(SOAP::WSDL::Client::Base);
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
# only load if it hasn't been loaded before
|
# only load if it hasn't been loaded before
|
||||||
require MyTypemaps::GlobalWeather
|
require MyTypemaps::GlobalWeather
|
||||||
if not MyTypemaps::GlobalWeather->can('get_class');
|
if not MyTypemaps::GlobalWeather->can('get_class');
|
||||||
|
|
||||||
sub START {
|
sub START {
|
||||||
$_[0]->set_proxy('http://www.webservicex.net/globalweather.asmx') if not $_[2]->{proxy};
|
$_[0]->set_proxy('http://www.webservicex.net/globalweather.asmx') if not $_[2]->{proxy};
|
||||||
@@ -16,8 +17,9 @@ sub START {
|
|||||||
|
|
||||||
sub GetWeather {
|
sub GetWeather {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetWeather must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetWeather',
|
operation => 'GetWeather',
|
||||||
soap_action => 'http://www.webserviceX.NET/GetWeather',
|
soap_action => 'http://www.webserviceX.NET/GetWeather',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -38,8 +40,9 @@ sub GetWeather {
|
|||||||
|
|
||||||
sub GetCitiesByCountry {
|
sub GetCitiesByCountry {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
|
die "GetCitiesByCountry must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
return $self->SUPER::call({
|
return $self->SUPER::call({
|
||||||
operation => 'GetCitiesByCountry',
|
operation => 'GetCitiesByCountry',
|
||||||
soap_action => 'http://www.webserviceX.NET/GetCitiesByCountry',
|
soap_action => 'http://www.webserviceX.NET/GetCitiesByCountry',
|
||||||
style => 'document',
|
style => 'document',
|
||||||
body => {
|
body => {
|
||||||
@@ -73,6 +76,17 @@ __END__
|
|||||||
|
|
||||||
MyInterfaces::GlobalWeather::GlobalWeatherSoap - SOAP Interface for the GlobalWeather Web Service
|
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
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
SOAP Interface for the GlobalWeather web service
|
SOAP Interface for the GlobalWeather web service
|
||||||
@@ -115,7 +129,7 @@ Get weather report for all major cities around the world.
|
|||||||
$interface->GetWeather( {
|
$interface->GetWeather( {
|
||||||
CityName => $some_value, # string
|
CityName => $some_value, # string
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
},
|
},,
|
||||||
);
|
);
|
||||||
|
|
||||||
=head3 GetCitiesByCountry
|
=head3 GetCitiesByCountry
|
||||||
@@ -124,13 +138,13 @@ Get all major cities by country name(full / part).
|
|||||||
|
|
||||||
$interface->GetCitiesByCountry( {
|
$interface->GetCitiesByCountry( {
|
||||||
CountryName => $some_value, # string
|
CountryName => $some_value, # string
|
||||||
},
|
},,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=head1 AUTHOR
|
=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
|
=pod
|
||||||
@@ -38,12 +38,8 @@ sub sayHello {
|
|||||||
}, $body, $header);
|
}, $body, $header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
|||||||
@@ -0,0 +1,146 @@
|
|||||||
|
package MyInterfaces::TestService::TestPort;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::TestService
|
||||||
|
if not MyTypemaps::TestService->can('get_class');
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
$_[0]->set_proxy('http://localhost:81/soap-wsdl-test/person.pl') if not $_[2]->{proxy};
|
||||||
|
$_[0]->set_class_resolver('MyTypemaps::TestService')
|
||||||
|
if not $_[2]->{class_resolver};
|
||||||
|
}
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
die "ListPerson must be called as object method (\$self is <$self>)" if not blessed($self);
|
||||||
|
return $self->SUPER::call({
|
||||||
|
operation => 'ListPerson',
|
||||||
|
soap_action => 'http://www.example.org/benchmark/ListPerson',
|
||||||
|
style => 'document',
|
||||||
|
body => {
|
||||||
|
|
||||||
|
'use' => 'literal',
|
||||||
|
namespace => '',
|
||||||
|
encodingStyle => '',
|
||||||
|
parts => [qw( MyElements::ListPerson )],
|
||||||
|
},
|
||||||
|
header => {
|
||||||
|
|
||||||
|
},
|
||||||
|
headerfault => {
|
||||||
|
|
||||||
|
}
|
||||||
|
}, $body, $header);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
|
||||||
|
MyInterfaces::TestService::TestPort - SOAP Interface for the TestService Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyInterfaces::TestService::TestPort;
|
||||||
|
my $interface = MyInterfaces::TestService::TestPort->new();
|
||||||
|
|
||||||
|
my $response;
|
||||||
|
$response = $interface->ListPerson();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Interface for the TestService web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/person.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE TestService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port TestPort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Method synopsis is displayed with hash refs as parameters.
|
||||||
|
|
||||||
|
The commented class names in the method's parameters denote that objects
|
||||||
|
of the corresponding class can be passed instead of the marked hash ref.
|
||||||
|
|
||||||
|
You may pass any combination of objects, hash and list refs to these
|
||||||
|
methods, as long as you meet the structure.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head3 ListPerson
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$interface->ListPerson( {
|
||||||
|
in => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Mon Dec 3 22:20:49 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
package MyServer::TestService::TestPort;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable;
|
||||||
|
use Scalar::Util qw(blessed);
|
||||||
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
|
# only load if it hasn't been loaded before
|
||||||
|
require MyTypemaps::TestService
|
||||||
|
if not MyTypemaps::TestService->can('get_class');
|
||||||
|
|
||||||
|
my %transport_class_of :ATTR(:name<transport_class> :default<SOAP::WSDL::Server::CGI>);
|
||||||
|
my %transport_of :ATTR(:name<transport> :default<()>);
|
||||||
|
my %dispatch_to :ATTR(:name<dispatch_to>);
|
||||||
|
|
||||||
|
my $action_map_ref = {
|
||||||
|
'http://www.example.org/benchmark/ListPerson' => 'ListPerson',
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
sub START {
|
||||||
|
my ($self, $ident, $arg_ref) = @_;
|
||||||
|
eval "require $transport_class_of{ $ident }"
|
||||||
|
or die "Cannot load transport class $transport_class_of{ $ident }: $@";
|
||||||
|
$transport_of{ $ident } = $transport_class_of{ $ident }->new({
|
||||||
|
action_map_ref => $action_map_ref,
|
||||||
|
class_resolver => 'MyTypemaps::TestService',
|
||||||
|
dispatch_to => $dispatch_to{ $ident },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
sub handle {
|
||||||
|
$transport_of{ ${ $_[0] } }->handle();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyInterfaces::TestService::TestPort - SOAP Server Class for the TestService Web Service
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
use MyServer::TestService::TestPort;
|
||||||
|
my $server = MyServer::TestService::TestPort->new({
|
||||||
|
dispatch_to => 'My::Handler::Class',
|
||||||
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
|
});
|
||||||
|
$server->handle();
|
||||||
|
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
SOAP Server handler for the TestService web service
|
||||||
|
located at http://localhost:81/soap-wsdl-test/person.pl.
|
||||||
|
|
||||||
|
=head1 SERVICE TestService
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head2 Port TestPort
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 General methods
|
||||||
|
|
||||||
|
=head3 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
The C<dispatch_to> argument is mandatory. It must be a class or object
|
||||||
|
implementing the SOAP Service methods listed below.
|
||||||
|
|
||||||
|
=head2 SOAP Service methods
|
||||||
|
|
||||||
|
Your dispatch_to class has to implement the following methods:
|
||||||
|
|
||||||
|
The examples below serve as copy-and-paste prototypes to use in your
|
||||||
|
class.
|
||||||
|
|
||||||
|
=head3 ListPerson
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
sub ListPerson {
|
||||||
|
my ($self, $body, $header) = @_;
|
||||||
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|
||||||
|
# do something with body and header...
|
||||||
|
|
||||||
|
return MyElements::ListPersonResponse->new( {
|
||||||
|
out => { # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL on Mon Dec 3 22:20:32 2007
|
||||||
|
|
||||||
|
=pod
|
||||||
@@ -10,13 +10,13 @@ our $typemap_1 = {
|
|||||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
'GenerateBarCode' => 'MyElements::GenerateBarCode',
|
'GenerateBarCode' => 'MyElements::GenerateBarCode',
|
||||||
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'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/Angle' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'GenerateBarCode/BarCodeParam/Width' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
'GenerateBarCode/BarCodeParam/BarCodeImageFormat' => 'MyTypes::ImageFormats',
|
'GenerateBarCode/BarCodeParam/BarCodeImageFormat' => 'MyTypes::ImageFormats',
|
||||||
'GenerateBarCode/BarCodeParam/BGColor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'GenerateBarCode/BarCodeParam/BGColor' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'GenerateBarCode/BarCodeParam/Ratio' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
'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/Height' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
'GenerateBarCode/BarCodeParam/CheckSum' => 'SOAP::WSDL::XSD::Typelib::Builtin::boolean',
|
'GenerateBarCode/BarCodeParam/CheckSum' => 'SOAP::WSDL::XSD::Typelib::Builtin::boolean',
|
||||||
'GenerateBarCode/BarCodeParam/checkSumMethod' => 'MyTypes::CheckSumMethod',
|
'GenerateBarCode/BarCodeParam/checkSumMethod' => 'MyTypes::CheckSumMethod',
|
||||||
@@ -27,8 +27,8 @@ our $typemap_1 = {
|
|||||||
'GenerateBarCodeResponse/GenerateBarCodeResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
'GenerateBarCodeResponse/GenerateBarCodeResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary',
|
||||||
'GenerateBarCodeResponse' => 'MyElements::GenerateBarCodeResponse',
|
'GenerateBarCodeResponse' => 'MyElements::GenerateBarCodeResponse',
|
||||||
'GenerateBarCode/BarCodeParam/Module' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
'GenerateBarCode/BarCodeParam/Module' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
'GenerateBarCode/BarCodeParam' => 'MyTypes::BarCodeData',
|
|
||||||
'GenerateBarCode/BarCodeParam/showTextPosition' => 'MyTypes::ShowTextPosition',
|
'GenerateBarCode/BarCodeParam/showTextPosition' => 'MyTypes::ShowTextPosition',
|
||||||
|
'GenerateBarCode/BarCodeParam' => 'MyTypes::BarCodeData',
|
||||||
'GenerateBarCode/BarCodeParam/FontName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string'
|
'GenerateBarCode/BarCodeParam/FontName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string'
|
||||||
};
|
};
|
||||||
;
|
;
|
||||||
@@ -39,6 +39,10 @@ sub get_class {
|
|||||||
return $typemap_1->{ $name };
|
return $typemap_1->{ $name };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ our $typemap_1 = {
|
|||||||
'GetFortuneCookieResponse' => 'MyElements::GetFortuneCookieResponse',
|
'GetFortuneCookieResponse' => 'MyElements::GetFortuneCookieResponse',
|
||||||
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
'GetSpecificCookie' => 'MyElements::GetSpecificCookie',
|
'GetSpecificCookie' => 'MyElements::GetSpecificCookie',
|
||||||
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::TOKEN',
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
'CountCookies' => 'MyElements::CountCookies',
|
'CountCookies' => 'MyElements::CountCookies',
|
||||||
'GetSpecificCookie/index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
'GetSpecificCookie/index' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
@@ -30,6 +30,10 @@ sub get_class {
|
|||||||
return $typemap_1->{ $name };
|
return $typemap_1->{ $name };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ our $typemap_1 = {
|
|||||||
'GetWeatherResponse/GetWeatherResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'GetWeatherResponse/GetWeatherResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'GetWeather' => 'MyElements::GetWeather',
|
'GetWeather' => 'MyElements::GetWeather',
|
||||||
'GetCitiesByCountryResponse/GetCitiesByCountryResult' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'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',
|
'GetWeatherResponse' => 'MyElements::GetWeatherResponse',
|
||||||
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
@@ -26,6 +26,10 @@ sub get_class {
|
|||||||
return $typemap_1->{ $name };
|
return $typemap_1->{ $name };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package MyTypemaps::TestService;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
our $typemap_1 = {
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/Contracts' => 'MyTypes::ArrayOfContract',
|
||||||
|
'ListPerson/in/HomeAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress' => 'MyTypes::Address',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract' => 'MyTypes::Contract',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/HomeAddress' => 'MyTypes::Address',
|
||||||
|
'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI',
|
||||||
|
'ListPerson/in/HomeAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPerson/in/WorkAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts' => 'MyTypes::ArrayOfContract',
|
||||||
|
'ListPerson/in/WorkAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in' => 'MyTypes::Person',
|
||||||
|
'ListPersonResponse/out/NewElement/GivenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement' => 'MyTypes::Person',
|
||||||
|
'ListPerson/in/PersonID/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'ListPerson/in/HomeAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/PersonID/ID' => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
'ListPerson/in/HomeAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/GivenName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/HomeAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPerson/in/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/PersonID' => 'MyTypes::PersonID',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out' => 'MyTypes::ArrayOfPerson',
|
||||||
|
'ListPerson/in/Contracts/Contract' => 'MyTypes::Contract',
|
||||||
|
'ListPersonResponse/out/NewElement/Name' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/DateOfBirth' => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/HomeAddress/Street' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract/ContractName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11',
|
||||||
|
'ListPerson/in/Contracts/Contract/ContractName' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse' => 'MyElements::ListPersonResponse',
|
||||||
|
'ListPersonResponse/out/NewElement/Salutation' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/City' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token',
|
||||||
|
'ListPerson' => 'MyElements::ListPerson',
|
||||||
|
'ListPerson/in/Salutation' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/MobilePhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/WorkAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPerson/in/PersonID' => 'MyTypes::PersonID',
|
||||||
|
'ListPerson/in/HomeAddress/ZIP' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress' => 'MyTypes::Address',
|
||||||
|
'ListPersonResponse/out/NewElement/DateOfBirth' => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
'ListPerson/in/WorkAddress/PhoneNumber' => 'MyTypes::PhoneNumber',
|
||||||
|
'ListPersonResponse/out/NewElement/WorkAddress/Country' => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
'ListPersonResponse/out/NewElement/Contracts/Contract/ContractID' => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
'ListPerson/in/Contracts/Contract/ContractID' => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
'ListPerson/in/WorkAddress' => 'MyTypes::Address'
|
||||||
|
};
|
||||||
|
;
|
||||||
|
|
||||||
|
sub get_class {
|
||||||
|
my $name = join '/', @{ $_[1] };
|
||||||
|
exists $typemap_1->{ $name } or die "Cannot resolve $name via " . __PACKAGE__;
|
||||||
|
return $typemap_1->{ $name };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_typemap {
|
||||||
|
return $typemap_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypemaps::TestService; - typemap for ::TestService;
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package MyTypes::Address;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Street_of :ATTR(:get<Street>);
|
||||||
|
my %ZIP_of :ATTR(:get<ZIP>);
|
||||||
|
my %City_of :ATTR(:get<City>);
|
||||||
|
my %Country_of :ATTR(:get<Country>);
|
||||||
|
my %PhoneNumber_of :ATTR(:get<PhoneNumber>);
|
||||||
|
my %MobilePhoneNumber_of :ATTR(:get<MobilePhoneNumber>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Street
|
||||||
|
ZIP
|
||||||
|
City
|
||||||
|
Country
|
||||||
|
PhoneNumber
|
||||||
|
MobilePhoneNumber
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Street => \%Street_of,
|
||||||
|
ZIP => \%ZIP_of,
|
||||||
|
City => \%City_of,
|
||||||
|
Country => \%Country_of,
|
||||||
|
PhoneNumber => \%PhoneNumber_of,
|
||||||
|
MobilePhoneNumber => \%MobilePhoneNumber_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Street => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
ZIP => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
City => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
Country => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
PhoneNumber => 'MyTypes::PhoneNumber',
|
||||||
|
MobilePhoneNumber => 'MyTypes::PhoneNumber',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Address
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Address from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Street
|
||||||
|
ZIP
|
||||||
|
City
|
||||||
|
Country
|
||||||
|
PhoneNumber
|
||||||
|
MobilePhoneNumber
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
package MyTypes::ArrayOfContract;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %Contract_of :ATTR(:get<Contract>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
Contract
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
Contract => \%Contract_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Contract => 'MyTypes::Contract',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::ArrayOfContract
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
ArrayOfContract from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
Contract
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
package MyTypes::ArrayOfPerson;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %NewElement_of :ATTR(:get<NewElement>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
NewElement
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
NewElement => \%NewElement_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NewElement => 'MyTypes::Person',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::ArrayOfPerson
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
ArrayOfPerson from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
NewElement
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::ArrayOfPerson
|
||||||
|
NewElement => { # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
package MyTypes::Contract;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %ContractID_of :ATTR(:get<ContractID>);
|
||||||
|
my %ContractName_of :ATTR(:get<ContractName>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
ContractID
|
||||||
|
ContractName
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
ContractID => \%ContractID_of,
|
||||||
|
ContractName => \%ContractName_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ContractID => 'SOAP::WSDL::XSD::Typelib::Builtin::long',
|
||||||
|
ContractName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Contract
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Contract from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
ContractID
|
||||||
|
ContractName
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,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
|
||||||
|
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
package MyTypes::Person;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %PersonID_of :ATTR(:get<PersonID>);
|
||||||
|
my %Salutation_of :ATTR(:get<Salutation>);
|
||||||
|
my %Name_of :ATTR(:get<Name>);
|
||||||
|
my %GivenName_of :ATTR(:get<GivenName>);
|
||||||
|
my %DateOfBirth_of :ATTR(:get<DateOfBirth>);
|
||||||
|
my %HomeAddress_of :ATTR(:get<HomeAddress>);
|
||||||
|
my %WorkAddress_of :ATTR(:get<WorkAddress>);
|
||||||
|
my %Contracts_of :ATTR(:get<Contracts>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
PersonID
|
||||||
|
Salutation
|
||||||
|
Name
|
||||||
|
GivenName
|
||||||
|
DateOfBirth
|
||||||
|
HomeAddress
|
||||||
|
WorkAddress
|
||||||
|
Contracts
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
PersonID => \%PersonID_of,
|
||||||
|
Salutation => \%Salutation_of,
|
||||||
|
Name => \%Name_of,
|
||||||
|
GivenName => \%GivenName_of,
|
||||||
|
DateOfBirth => \%DateOfBirth_of,
|
||||||
|
HomeAddress => \%HomeAddress_of,
|
||||||
|
WorkAddress => \%WorkAddress_of,
|
||||||
|
Contracts => \%Contracts_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PersonID => 'MyTypes::PersonID',
|
||||||
|
Salutation => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
Name => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
GivenName => 'SOAP::WSDL::XSD::Typelib::Builtin::string',
|
||||||
|
DateOfBirth => 'SOAP::WSDL::XSD::Typelib::Builtin::date',
|
||||||
|
HomeAddress => 'MyTypes::Address',
|
||||||
|
WorkAddress => 'MyTypes::Address',
|
||||||
|
Contracts => 'MyTypes::ArrayOfContract',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::Person
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
Person from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
PersonID
|
||||||
|
Salutation
|
||||||
|
Name
|
||||||
|
GivenName
|
||||||
|
DateOfBirth
|
||||||
|
HomeAddress
|
||||||
|
WorkAddress
|
||||||
|
Contracts
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::Person
|
||||||
|
PersonID => { # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
Salutation => $some_value, # string
|
||||||
|
Name => $some_value, # string
|
||||||
|
GivenName => $some_value, # string
|
||||||
|
DateOfBirth => $some_value, # date
|
||||||
|
HomeAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
WorkAddress => { # MyTypes::Address
|
||||||
|
Street => $some_value, # string
|
||||||
|
ZIP => $some_value, # string
|
||||||
|
City => $some_value, # string
|
||||||
|
Country => $some_value, # string
|
||||||
|
PhoneNumber => $some_value, # PhoneNumber
|
||||||
|
MobilePhoneNumber => $some_value, # PhoneNumber
|
||||||
|
},
|
||||||
|
Contracts => { # MyTypes::ArrayOfContract
|
||||||
|
Contract => { # MyTypes::Contract
|
||||||
|
ContractID => $some_value, # long
|
||||||
|
ContractName => $some_value, # string
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
package MyTypes::PersonID;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
Class::Std::initialize();
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
|
||||||
|
my %ID_of :ATTR(:get<ID>);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw(
|
||||||
|
ID
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
ID => \%ID_of,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ID => 'SOAP::WSDL::XSD::Typelib::Builtin::int',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
MyTypes::PersonID
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined complextype
|
||||||
|
PersonID from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
=head2 PROPERTIES
|
||||||
|
|
||||||
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
|
methods:
|
||||||
|
|
||||||
|
ID
|
||||||
|
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
|
{ # MyTypes::PersonID
|
||||||
|
ID => $some_value, # int
|
||||||
|
},
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package MyTypes::PhoneNumber;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub get_xmlns { 'http://www.example.org/benchmark/'};
|
||||||
|
|
||||||
|
# derivation by restriction
|
||||||
|
use base qw(
|
||||||
|
SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
1;
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 MyTypes::PhoneNumber
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Perl data type class for the XML Schema defined simpleType
|
||||||
|
PhoneNumber from the namespace http://www.example.org/benchmark/.
|
||||||
|
|
||||||
|
This clase is derived from SOAP::WSDL::XSD::Typelib::Builtin::string
|
||||||
|
. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly
|
||||||
|
like it's base type.
|
||||||
|
|
||||||
|
# Description of restrictions not implemented yet.
|
||||||
|
|
||||||
|
=head1 METHODS
|
||||||
|
|
||||||
|
=head2 new
|
||||||
|
|
||||||
|
Constructor.
|
||||||
|
|
||||||
|
=head2 get_value / set_value
|
||||||
|
|
||||||
|
Getter and setter for the simpleType's value.
|
||||||
|
|
||||||
|
=head1 OVERLOADING
|
||||||
|
|
||||||
|
Depending on the simple type's base type, the following operations are overloaded
|
||||||
|
|
||||||
|
Stringification
|
||||||
|
Numerification
|
||||||
|
Boolification
|
||||||
|
|
||||||
|
Check L<SOAP::WSDL::XSD::Typelib::Builtin> for more information.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
@@ -0,0 +1,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
|
||||||
|
|
||||||
@@ -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";
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use XML::Compile::WSDL11;
|
||||||
|
use XML::Compile::Transport::SOAPHTTP;
|
||||||
|
|
||||||
|
my $wsdl = XML::Compile::WSDL11->new('wsdl/Person.wsdl');
|
||||||
|
|
||||||
|
# I have to lookup the methods from the WSDL
|
||||||
|
my $call = $wsdl->compileClient('ListPerson');
|
||||||
|
|
||||||
|
# I have to lookup the parameters from the WSDL
|
||||||
|
my $result = $call->({ in => undef});
|
||||||
|
|
||||||
|
die "Error calling soap method" if not defined $result;
|
||||||
|
|
||||||
|
# I have to lookup the output parameters from the WSDL - or try Dumper
|
||||||
|
#use Data::Dumper;
|
||||||
|
#print Dumper $result;
|
||||||
|
|
||||||
|
print "Found ", scalar @{ $result->{ parameters }->{ out }->{ seq_NewElement }->[0]->{ NewElement } } , " persons\n";
|
||||||
@@ -0,0 +1,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>
|
||||||
+20
-14
@@ -14,7 +14,7 @@ use Class::Std::Fast;
|
|||||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||||
use LWP::UserAgent;
|
use LWP::UserAgent;
|
||||||
|
|
||||||
our $VERSION= '2.00_25';
|
our $VERSION= '2.00_32';
|
||||||
|
|
||||||
my %no_dispatch_of :ATTR(:name<no_dispatch>);
|
my %no_dispatch_of :ATTR(:name<no_dispatch>);
|
||||||
my %wsdl_of :ATTR(:name<wsdl>);
|
my %wsdl_of :ATTR(:name<wsdl>);
|
||||||
@@ -176,7 +176,7 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
my $ns = $wsdl->get_targetNamespace();
|
my $ns = $wsdl->get_targetNamespace();
|
||||||
|
|
||||||
# get bindings, portType, message, part(s) - use private methods for clear separation...
|
# get bindings, portType, message, part(s) - use private methods for clear separation...
|
||||||
$self->_wsdl_get_service if not ($service_of{ $ident });
|
$self->_wsdl_get_service();
|
||||||
$self->_wsdl_get_portType();
|
$self->_wsdl_get_portType();
|
||||||
|
|
||||||
$method_info_of{ $ident } = {};
|
$method_info_of{ $ident } = {};
|
||||||
@@ -187,9 +187,10 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
|
|
||||||
# get SOAP Action
|
# get SOAP Action
|
||||||
# SOAP-Action is a required HTTP Header, so we need to look it up...
|
# SOAP-Action is a required HTTP Header, so we need to look it up...
|
||||||
|
# There must be a soapAction uri - or the WSDL is invalid (and
|
||||||
|
# it's not us to prove that...)
|
||||||
my $soap_binding_operation = $binding_operation->get_operation()->[0];
|
my $soap_binding_operation = $binding_operation->get_operation()->[0];
|
||||||
$method->{ soap_action } = $soap_binding_operation ?
|
$method->{ soap_action } = $soap_binding_operation->get_soapAction();
|
||||||
$soap_binding_operation->get_soapAction() : $method;
|
|
||||||
|
|
||||||
# get parts
|
# get parts
|
||||||
# 1. get operation from port
|
# 1. get operation from port
|
||||||
@@ -204,7 +205,10 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
my $message = $wsdl->find_message( $ns, $localname )
|
my $message = $wsdl->find_message( $ns, $localname )
|
||||||
or croak "Message {$ns}$localname not found in WSDL definition";
|
or croak "Message {$ns}$localname not found in WSDL definition";
|
||||||
|
|
||||||
if (my $body=$binding_operation->first_input()->first_body()) {
|
# Is body not required? So there must be one? Do we need the "if"?
|
||||||
|
# if (
|
||||||
|
my $body=$binding_operation->first_input()->first_body();
|
||||||
|
# {
|
||||||
if ($body->get_parts()) {
|
if ($body->get_parts()) {
|
||||||
$method->{ parts } = []; # make sure it's empty
|
$method->{ parts } = []; # make sure it's empty
|
||||||
my $message_part_ref = $message->get_part();
|
my $message_part_ref = $message->get_part();
|
||||||
@@ -216,7 +220,9 @@ sub _wsdl_init_methods :PRIVATE {
|
|||||||
grep { $_->get_name() eq $name } @{ $message_part_ref };
|
grep { $_->get_name() eq $name } @{ $message_part_ref };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
# }
|
||||||
|
# A body does not need to specify the parts of a messages.
|
||||||
|
# Use all of the message's parts if it does not.
|
||||||
$method->{ parts } ||= $message->get_part();
|
$method->{ parts } ||= $message->get_part();
|
||||||
|
|
||||||
# rpc / encoded methods may have a namespace specified.
|
# rpc / encoded methods may have a namespace specified.
|
||||||
@@ -669,16 +675,16 @@ The following facets have no influence yet:
|
|||||||
|
|
||||||
=item * L<SOAP::Lite|SOAP::Lite>
|
=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>
|
=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.
|
You might want to give it a try, especially if you need to adhere very
|
||||||
|
closely to the XML Schema / WSDL specs.
|
||||||
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.
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@@ -730,9 +736,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 534 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: WSDL.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: WSDL.pm 534 2008-02-14 17:07:18Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
+18
-11
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
|||||||
use List::Util qw(first);
|
use List::Util qw(first);
|
||||||
use Carp qw(croak carp confess);
|
use Carp qw(croak carp confess);
|
||||||
|
|
||||||
our $VERSION='2.00_25';
|
our $VERSION='2.00_27';
|
||||||
|
|
||||||
my %id_of :ATTR(:name<id> :default<()>);
|
my %id_of :ATTR(:name<id> :default<()>);
|
||||||
my %name_of :ATTR(:name<name> :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 %xmlns_of :ATTR(:name<xmlns> :default<{}>);
|
||||||
my %parent_of :ATTR(:name<parent> :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 {
|
sub DEMOLISH {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
# delete upward references
|
# delete upward references
|
||||||
@@ -82,7 +87,7 @@ sub AUTOMETHOD {
|
|||||||
return $result_ref->[0];
|
return $result_ref->[0];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
confess "$subname not found in class " . (ref $self || $self) ;
|
confess "$subname not found in class " . ref $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub init {
|
sub init {
|
||||||
@@ -95,11 +100,6 @@ sub init {
|
|||||||
$xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value };
|
$xmlns_of{ ident $self }->{ $value->{ LocalName } } = $value->{ Value };
|
||||||
next;
|
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 $name = $value->{ LocalName };
|
||||||
my $method = "set_$name";
|
my $method = "set_$name";
|
||||||
@@ -110,16 +110,23 @@ sub init {
|
|||||||
|
|
||||||
sub expand {
|
sub expand {
|
||||||
my ($self, , $qname) = @_;
|
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 ($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()) {
|
if (my $parent = $self->get_parent()) {
|
||||||
return $parent->expand($qname);
|
return $parent->expand($qname);
|
||||||
}
|
}
|
||||||
confess "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are"
|
confess "unbound prefix $prefix found for $prefix:$localname. Bound prefixes are"
|
||||||
. join(', ', keys %ns_map);
|
. join(', ', keys %{ $ns_of });
|
||||||
}
|
}
|
||||||
sub _expand;
|
sub _expand;
|
||||||
*_expand = \&expand;
|
*_expand = \&expand;
|
||||||
|
|||||||
+3
-14
@@ -11,7 +11,7 @@ use SOAP::WSDL::Factory::Serializer;
|
|||||||
use SOAP::WSDL::Factory::Transport;
|
use SOAP::WSDL::Factory::Transport;
|
||||||
use SOAP::WSDL::Expat::MessageParser;
|
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 %class_resolver_of :ATTR(:name<class_resolver> :default<()>);
|
||||||
my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
|
my %no_dispatch_of :ATTR(:name<no_dispatch> :default<()>);
|
||||||
@@ -268,17 +268,6 @@ Default:
|
|||||||
|
|
||||||
text/xml; charset: utf8
|
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
|
=head2 Features different from SOAP::Lite
|
||||||
|
|
||||||
SOAP::WSDL does not aim to be a complete replacement for SOAP::Lite - the
|
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
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 455 $
|
||||||
$LastChangedBy: kutterma $
|
$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 $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -8,15 +8,32 @@ our $VERSION = '2.00_25';
|
|||||||
|
|
||||||
sub call {
|
sub call {
|
||||||
my ($self, $method, $body, $header) = @_;
|
my ($self, $method, $body, $header) = @_;
|
||||||
|
|
||||||
|
# Treat non-objects special
|
||||||
if (not blessed $body) {
|
if (not blessed $body) {
|
||||||
|
|
||||||
|
# make sure there's something sensible in our body data
|
||||||
$body = {} if not defined $body;
|
$body = {} if not defined $body;
|
||||||
my $class = $method->{ body }->{ parts }->[0];
|
$body = ref $body eq 'ARRAY' ? $body : [ $body ];
|
||||||
eval "require $class" || die $@;
|
|
||||||
$body = $class->new($body);
|
my @body_from = @{ $body }; # make a copy
|
||||||
|
|
||||||
|
# build list of parts as objects initialized with
|
||||||
|
# parameters given
|
||||||
|
my @part_from = ();
|
||||||
|
foreach my $class (@{ $method->{ body }->{ parts } }) {
|
||||||
|
eval "require $class" || die $@;
|
||||||
|
push @part_from, $class->new(shift(@body_from) || {});
|
||||||
|
}
|
||||||
|
|
||||||
|
# it's either the first part or a list ref with all parts...
|
||||||
|
$body = $#part_from ? \@part_from : $part_from[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
# if we have a header
|
# if we have a header
|
||||||
if (%{ $method->{ header } }) {
|
if (%{ $method->{ header } }) {
|
||||||
|
|
||||||
|
# trat non object special - as above, but only for one
|
||||||
if (not blessed $header) {
|
if (not blessed $header) {
|
||||||
my $class = $method->{ header }->{ parts }->[0];
|
my $class = $method->{ header }->{ parts }->[0];
|
||||||
eval "require $class" || die $@;
|
eval "require $class" || die $@;
|
||||||
@@ -26,39 +43,6 @@ sub call {
|
|||||||
return $self->SUPER::call($method, $body, $header);
|
return $self->SUPER::call($method, $body, $header);
|
||||||
}
|
}
|
||||||
|
|
||||||
#sub __create_methods {
|
|
||||||
# my ($package, %info_of) = @_;
|
|
||||||
#
|
|
||||||
# no strict qw(refs);
|
|
||||||
# no warnings qw(redefine);
|
|
||||||
# for my $method (keys %info_of){
|
|
||||||
# my ($soap_action, @parts);
|
|
||||||
#
|
|
||||||
# # up to 2.00_10 we had list refs...
|
|
||||||
# if (ref $info_of{ $method }eq 'HASH') {
|
|
||||||
# @parts = @{ $info_of{ $method }->{ parts } };
|
|
||||||
# $soap_action = $info_of{ $method }->{ soap_action };
|
|
||||||
# }
|
|
||||||
# else {
|
|
||||||
# die "Pre-v2.00_10 Interfaces are no longer supported. Please re-generate your interface.";
|
|
||||||
# }
|
|
||||||
#
|
|
||||||
# *{ "$package\::$method" } = sub {
|
|
||||||
# my $self = shift;
|
|
||||||
# my @param = map {
|
|
||||||
# my $data = shift || {};
|
|
||||||
# eval "require $_";
|
|
||||||
# $_->new( $data );
|
|
||||||
# } @parts;
|
|
||||||
#
|
|
||||||
# return $self->SUPER::call( {
|
|
||||||
# operation => $method,
|
|
||||||
# soap_action => $soap_action,
|
|
||||||
# }, @param );
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
#}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
@@ -94,9 +78,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 501 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Base.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: Base.pm 501 2008-01-26 20:23:32Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use List::Util qw(first);
|
|||||||
use Class::Std::Fast::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
use base qw(SOAP::WSDL::Base);
|
use base qw(SOAP::WSDL::Base);
|
||||||
|
|
||||||
our $VERSION='2.00_25';
|
our $VERSION='2.00_27';
|
||||||
|
|
||||||
my %types_of :ATTR(:name<types> :default<[]>);
|
my %types_of :ATTR(:name<types> :default<[]>);
|
||||||
my %message_of :ATTR(:name<message> :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 %service_of :ATTR(:name<service> :default<()>);
|
||||||
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
my %namespace_of :ATTR(:name<namespace> :default<()>);
|
||||||
|
|
||||||
# must be attr for Class::Std::Storable
|
# must be attr for Class::Std::Fast::Storable
|
||||||
my %attributes_of :ATTR();
|
my %attributes_of :ATTR();
|
||||||
%attributes_of = (
|
%attributes_of = (
|
||||||
binding => \%binding_of,
|
binding => \%binding_of,
|
||||||
@@ -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
|
Accessors/Mutators for accessing / setting the E<gt>typesE<lt> child
|
||||||
element(s).
|
element(s).
|
||||||
|
|
||||||
=head1 LICENSE and COPYRIGHT
|
=head1 LICENSE AND COPYRIGHT
|
||||||
|
|
||||||
Copyright 2004-2007 Martin Kutter.
|
Copyright 2004-2007 Martin Kutter.
|
||||||
|
|
||||||
@@ -118,9 +118,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 477 $
|
||||||
$LastChangedBy: kutterma $
|
$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 $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ sub BUILD {
|
|||||||
sub deserialize {
|
sub deserialize {
|
||||||
my ($self, $content) = @_;
|
my ($self, $content) = @_;
|
||||||
|
|
||||||
$parser_of{ ${ $self } } ||= SOAP::WSDL::Expat::MessageParser->new();
|
$parser_of{ ${ $self } } = SOAP::WSDL::Expat::MessageParser->new()
|
||||||
|
if not $parser_of{ ${ $self } };
|
||||||
$parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ident $self } );
|
$parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ident $self } );
|
||||||
eval { $parser_of{ ${ $self } }->parse_string( $content ) };
|
eval { $parser_of{ ${ $self } }->parse_string( $content ) };
|
||||||
if ($@) {
|
if ($@) {
|
||||||
@@ -98,9 +99,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 501 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: XSD.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: XSD.pm 501 2008-01-26 20:23:32Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -1,17 +1,71 @@
|
|||||||
package SOAP::WSDL::Expat::Base;
|
package SOAP::WSDL::Expat::Base;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use URI;
|
||||||
use XML::Parser::Expat;
|
use XML::Parser::Expat;
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
# TODO: convert to Class::Std::Fast based class - hash based classes suck.
|
||||||
|
|
||||||
|
our $VERSION = '2.00_32';
|
||||||
|
|
||||||
sub new {
|
sub new {
|
||||||
my ($class, $args) = @_;
|
my ($class, $arg_ref) = @_;
|
||||||
my $self = {};
|
my $self = {};
|
||||||
bless $self, $class;
|
bless $self, $class;
|
||||||
|
|
||||||
|
$self->set_user_agent($arg_ref->{ user_agent })
|
||||||
|
if $arg_ref->{ user_agent };
|
||||||
|
$self->{ parsed } = $arg_ref->{ parsed } if $arg_ref->{ parsed };
|
||||||
|
|
||||||
return $self;
|
return $self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub clone {
|
||||||
|
my $self = shift;
|
||||||
|
my $class = ref $self;
|
||||||
|
my $clone = $class->new($self);
|
||||||
|
return $clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set_uri { $_[0]->{ uri } = $_[1]; }
|
||||||
|
sub get_uri { return $_[0]->{ uri }; }
|
||||||
|
|
||||||
|
sub set_user_agent { $_[0]->{ user_agent } = $_[1]; }
|
||||||
|
sub get_user_agent { return $_[0]->{ user_agent }; }
|
||||||
|
|
||||||
|
sub set_parsed {
|
||||||
|
my ($self, $uri) = @_;
|
||||||
|
$self->{ parsed }->{ $uri } = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub is_parsed {
|
||||||
|
my ($self, $uri) = @_;
|
||||||
|
return exists $self->{ parsed }->{ $uri };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub parse_uri {
|
||||||
|
my $self = shift;
|
||||||
|
my $uri = shift;
|
||||||
|
|
||||||
|
if ($self->is_parsed($uri)){
|
||||||
|
warn "$uri already imported. Ignoring it\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$self->set_parsed($uri);
|
||||||
|
|
||||||
|
$self->set_uri( $uri );
|
||||||
|
|
||||||
|
if (not $self->{ user_agent }) {
|
||||||
|
require LWP::UserAgent;
|
||||||
|
$self->{ user_agent } = LWP::UserAgent->new();
|
||||||
|
}
|
||||||
|
|
||||||
|
my $response = $self->{ user_agent }->get($uri);
|
||||||
|
die $response->message() if $response->code() ne '200';
|
||||||
|
return $self->parse( $response->content() );
|
||||||
|
}
|
||||||
|
|
||||||
sub parse {
|
sub parse {
|
||||||
eval {
|
eval {
|
||||||
$_[0]->_initialize( XML::Parser::Expat->new( Namespaces => 1 ) )->parse( $_[1] );
|
$_[0]->_initialize( XML::Parser::Expat->new( Namespaces => 1 ) )->parse( $_[1] );
|
||||||
@@ -42,3 +96,37 @@ sub get_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 warnings;
|
||||||
use base qw(SOAP::WSDL::Expat::Base);
|
use base qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
our $VERSION = '2.00_24';
|
our $VERSION = '2.00_27';
|
||||||
|
|
||||||
sub _initialize {
|
sub _initialize {
|
||||||
my ($self, $parser) = @_;
|
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>
|
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
|
=head1 Repository information
|
||||||
|
|
||||||
$ID: $
|
$Id: $
|
||||||
|
|
||||||
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
$LastChangedDate: 2007-09-10 18:19:23 +0200 (Mo, 10 Sep 2007) $
|
||||||
$LastChangedRevision: 218 $
|
$LastChangedRevision: 218 $
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Carp qw(croak confess);
|
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;
|
||||||
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType;
|
||||||
@@ -48,7 +48,7 @@ sub load_classes {
|
|||||||
|
|
||||||
# a bad test - do you know a better one?
|
# a bad test - do you know a better one?
|
||||||
next if $class eq '__SKIP__';
|
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 =~s{ :: }{/}xmsg;
|
||||||
$class .= '.pm';
|
$class .= '.pm';
|
||||||
@@ -117,7 +117,7 @@ sub _initialize {
|
|||||||
no strict qw(refs);
|
no strict qw(refs);
|
||||||
$parser->setHandlers(
|
$parser->setHandlers(
|
||||||
Start => sub {
|
Start => sub {
|
||||||
# my ($parser, $element, %_attrs) = @_;
|
# my ($parser, $element, %attrs) = @_;
|
||||||
|
|
||||||
$_leaf = 1; # believe we're a leaf node until we see an end
|
$_leaf = 1; # believe we're a leaf node until we see an end
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ sub _initialize {
|
|||||||
return &{$content_check{ $depth }}
|
return &{$content_check{ $depth }}
|
||||||
if exists $content_check{ $depth };
|
if exists $content_check{ $depth };
|
||||||
|
|
||||||
push @{ $path }, $_[1]; # step down in path
|
push @{ $path }, $_[1]; # step down in path
|
||||||
return if $skip; # skip inside __SKIP__
|
return if $skip; # skip inside __SKIP__
|
||||||
|
|
||||||
# resolve class of this element
|
# resolve class of this element
|
||||||
@@ -171,6 +171,9 @@ sub _initialize {
|
|||||||
$current = bless \$o, $_class;
|
$current = bless \$o, $_class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# set attributes if there are any
|
||||||
|
$current->attr({ @_[2..$#_] }) if (@_ > 2);
|
||||||
|
|
||||||
$depth++;
|
$depth++;
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
@@ -281,16 +284,19 @@ Replace the whitespace by @ for E-Mail Address.
|
|||||||
|
|
||||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
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
|
=head1 Repository information
|
||||||
|
|
||||||
$ID: $
|
$Id: $
|
||||||
|
|
||||||
$LastChangedDate: 2007-12-02 23:20:24 +0100 (So, 02 Dez 2007) $
|
$LastChangedDate: 2008-02-02 10:19:45 +0100 (Sa, 02 Feb 2008) $
|
||||||
$LastChangedRevision: 427 $
|
$LastChangedRevision: 516 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $
|
$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
|
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
|
=head1 AUTHOR
|
||||||
|
|
||||||
Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
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
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 477 $
|
||||||
$LastChangedBy: kutterma $
|
$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 $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -5,7 +5,59 @@ use Carp;
|
|||||||
use SOAP::WSDL::TypeLookup;
|
use SOAP::WSDL::TypeLookup;
|
||||||
use base qw(SOAP::WSDL::Expat::Base);
|
use base qw(SOAP::WSDL::Expat::Base);
|
||||||
|
|
||||||
our $VERSION = q{2.00_25};
|
our $VERSION = q{2.00_32};
|
||||||
|
|
||||||
|
sub _import_children {
|
||||||
|
my ($self, $name, $imported, $importer, $import_namespace) = @_;
|
||||||
|
return if not $imported;
|
||||||
|
|
||||||
|
my $targetNamespace = $importer->get_targetNamespace();
|
||||||
|
my $push_method = "push_$name";
|
||||||
|
my $get_method = "get_$name";
|
||||||
|
no strict qw(refs);
|
||||||
|
my $value_ref = $imported->$get_method();
|
||||||
|
if ($value_ref) {
|
||||||
|
$value_ref = [ $value_ref ] if (not ref $value_ref eq 'ARRAY');
|
||||||
|
# set xmlns - can be different from parent
|
||||||
|
for (@{ $value_ref }) {
|
||||||
|
# fixup targetNamespace, but don't override
|
||||||
|
$_->set_targetNamespace( $import_namespace )
|
||||||
|
if ( ($import_namespace ne $targetNamespace) && ! $_->get_targetNamespace);
|
||||||
|
# update parent...
|
||||||
|
$_->set_parent( $importer );
|
||||||
|
}
|
||||||
|
# push elements into importing WSDL
|
||||||
|
$importer->$push_method(@{ $value_ref });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub xml_schema_import {
|
||||||
|
my $self = shift;
|
||||||
|
my $schema = shift;
|
||||||
|
my $parser = $self->clone();
|
||||||
|
my %attr_of = @_;
|
||||||
|
my $import_namespace = $attr_of{ namespace };
|
||||||
|
my $uri = URI->new_abs($attr_of{schemaLocation}, $self->get_uri() );
|
||||||
|
my $import = $parser->parse_uri($uri);
|
||||||
|
|
||||||
|
for my $name ( qw(type element group) ) {
|
||||||
|
$self->_import_children( $name, $import, $schema, $import_namespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub wsdl_import {
|
||||||
|
my $self = shift;
|
||||||
|
my $definitions = shift;
|
||||||
|
my $parser = $self->clone();
|
||||||
|
my %attr_of = @_;
|
||||||
|
my $import_namespace = $attr_of{ namespace };
|
||||||
|
my $uri = URI->new_abs($attr_of{location}, $self->get_uri() );
|
||||||
|
|
||||||
|
my $import = $parser->parse_uri($uri);
|
||||||
|
for my $name ( qw(types message binding portType service) ) {
|
||||||
|
$self->_import_children( $name, $import, $definitions, $import_namespace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sub _initialize {
|
sub _initialize {
|
||||||
my ($self, $parser) = @_;
|
my ($self, $parser) = @_;
|
||||||
@@ -36,7 +88,9 @@ sub _initialize {
|
|||||||
eval "require $action->{ class }";
|
eval "require $action->{ class }";
|
||||||
croak $@ if ($@);
|
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 ) );
|
->init( _fixup_attrs( $parser, %attrs ) );
|
||||||
|
|
||||||
if ($current) {
|
if ($current) {
|
||||||
@@ -63,7 +117,7 @@ sub _initialize {
|
|||||||
$current->init( _fixup_attrs($parser, %attrs) );
|
$current->init( _fixup_attrs($parser, %attrs) );
|
||||||
}
|
}
|
||||||
elsif ($action->{ type } eq 'METHOD') {
|
elsif ($action->{ type } eq 'METHOD') {
|
||||||
my $method = $action->{ method } || $localname;
|
my $method = $action->{ method };
|
||||||
|
|
||||||
no strict qw(refs);
|
no strict qw(refs);
|
||||||
# call method with
|
# call method with
|
||||||
@@ -79,6 +133,20 @@ sub _initialize {
|
|||||||
: _fixup_attrs($parser, %attrs)
|
: _fixup_attrs($parser, %attrs)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
elsif ($action->{type} eq 'HANDLER') {
|
||||||
|
my $method = $self->can($action->{method});
|
||||||
|
$method->($self, $current, %attrs);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# TODO replace by hash lookup of known namespaces.
|
||||||
|
my $namespace = $parser->namespace($localname) || q{};
|
||||||
|
my $part = $namespace eq 'http://schemas.xmlsoap.org/wsdl/'
|
||||||
|
? 'WSDL 1.1'
|
||||||
|
: 'XML Schema';
|
||||||
|
|
||||||
|
warn "$part element <$localname> is not implemented yet"
|
||||||
|
if ($localname !~m{ \A (:? annotation | documentation ) \z }xms );
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
@@ -143,3 +211,43 @@ sub _fixup_attrs {
|
|||||||
|
|
||||||
1;
|
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: 2008-02-14 18:07:18 +0100 (Do, 14 Feb 2008) $
|
||||||
|
$LastChangedRevision: 534 $
|
||||||
|
$LastChangedBy: kutterma $
|
||||||
|
|
||||||
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ sub register {
|
|||||||
|
|
||||||
sub get_deserializer {
|
sub get_deserializer {
|
||||||
my ($self, $args_of_ref) = @_;
|
my ($self, $args_of_ref) = @_;
|
||||||
|
$args_of_ref->{ soap_version } ||= '1.1';
|
||||||
# sanity check
|
# sanity check
|
||||||
die "no deserializer registered for SOAP version $args_of_ref->{ soap_version }"
|
die "no deserializer registered for SOAP version $args_of_ref->{ soap_version }"
|
||||||
if not exists ($DESERIALIZER{ $args_of_ref->{ soap_version } });
|
if not exists ($DESERIALIZER{ $args_of_ref->{ soap_version } });
|
||||||
@@ -137,7 +137,7 @@ passed as a single hash ref:
|
|||||||
|
|
||||||
Copyright 2007 Martin Kutter. All rights reserved.
|
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
|
the same terms as perl itself
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ Set user-defined typemap snippet
|
|||||||
|
|
||||||
Copyright 2007 Martin Kutter. All rights reserved.
|
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
|
the same terms as perl itself
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ sub register {
|
|||||||
|
|
||||||
sub get_serializer {
|
sub get_serializer {
|
||||||
my ($self, $args_of_ref) = @_;
|
my ($self, $args_of_ref) = @_;
|
||||||
|
$args_of_ref->{ soap_version } ||= '1.1';
|
||||||
# sanity check
|
# sanity check
|
||||||
die "no serializer registered for SOAP version $args_of_ref->{ soap_version }"
|
die "no serializer registered for SOAP version $args_of_ref->{ soap_version }"
|
||||||
if not exists ($SERIALIZER{ $args_of_ref->{ soap_version } });
|
if not exists ($SERIALIZER{ $args_of_ref->{ soap_version } });
|
||||||
@@ -138,9 +138,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 391 $
|
$Rev: 510 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Serializer.pm 391 2007-11-17 21:56:13Z kutterma $
|
$Id: Serializer.pm 510 2008-01-29 08:03:46Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Transport;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
our $VERSION='2.00_25';
|
our $VERSION='2.00_31';
|
||||||
|
|
||||||
# class data
|
# class data
|
||||||
my %registered_transport_of = ();
|
my %registered_transport_of = ();
|
||||||
@@ -34,11 +34,13 @@ sub register {
|
|||||||
sub get_transport {
|
sub get_transport {
|
||||||
my ($class, $scheme, %attrs) = @_;
|
my ($class, $scheme, %attrs) = @_;
|
||||||
|
|
||||||
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}smx;
|
$scheme =~s{ \A ([^\:]+) \: .+ }{$1}x;
|
||||||
|
|
||||||
if ($registered_transport_of{ $scheme }) {
|
if ($registered_transport_of{ $scheme }) {
|
||||||
eval "require $registered_transport_of{ $scheme }"
|
no strict qw(refs);
|
||||||
or die "Cannot load transport class $registered_transport_of{ $scheme } : $@";
|
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
|
# try "foo::Client" class first - SOAP::Tranport always requires
|
||||||
# a package withoug the ::Client appended, and then
|
# a package withoug the ::Client appended, and then
|
||||||
@@ -68,8 +70,10 @@ sub get_transport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
if (exists $SOAP_WSDL_TRANSPORT_OF{ $scheme }) {
|
||||||
eval "require $SOAP_WSDL_TRANSPORT_OF{ $scheme }"
|
no strict qw(refs);
|
||||||
or die "Cannot load transport class $SOAP_WSDL_TRANSPORT_OF{ $scheme } : $@";
|
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 );
|
return $SOAP_WSDL_TRANSPORT_OF{ $scheme }->new( %attrs );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,9 +240,9 @@ Martin Kutter E<lt>martin.kutter fen-net.deE<gt>
|
|||||||
|
|
||||||
=head1 REPOSITORY INFORMATION
|
=head1 REPOSITORY INFORMATION
|
||||||
|
|
||||||
$Rev: 427 $
|
$Rev: 524 $
|
||||||
$LastChangedBy: kutterma $
|
$LastChangedBy: kutterma $
|
||||||
$Id: Transport.pm 427 2007-12-02 22:20:24Z kutterma $
|
$Id: Transport.pm 524 2008-02-10 23:24:43Z kutterma $
|
||||||
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
$HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|||||||
@@ -25,17 +25,33 @@ sub _process :PROTECTED {
|
|||||||
my ($self, $template, $arg_ref, $output) = @_;
|
my ($self, $template, $arg_ref, $output) = @_;
|
||||||
my $ident = ident $self;
|
my $ident = ident $self;
|
||||||
|
|
||||||
$tt_of{$ident} = Template->new(
|
# always create a new Template object to
|
||||||
|
# force re-loading of plugins.
|
||||||
|
my $tt = Template->new(
|
||||||
DEBUG => 1,
|
DEBUG => 1,
|
||||||
EVAL_PERL => $EVAL_PERL_of{ $ident },
|
EVAL_PERL => $EVAL_PERL_of{ $ident },
|
||||||
RECURSION => $RECURSION_of{ $ident },
|
RECURSION => $RECURSION_of{ $ident },
|
||||||
INCLUDE_PATH => $INCLUDE_PATH_of{ $ident },
|
INCLUDE_PATH => $INCLUDE_PATH_of{ $ident },
|
||||||
OUTPUT_PATH => $OUTPUT_PATH_of{ $ident },
|
OUTPUT_PATH => $OUTPUT_PATH_of{ $ident },
|
||||||
)
|
PLUGIN_BASE => 'SOAP::WSDL::Generator::Template::Plugin',
|
||||||
if (not $tt_of{ $ident });
|
);
|
||||||
|
|
||||||
$tt_of{ $ident }->process( $template,
|
$tt->process( $template,
|
||||||
{
|
{
|
||||||
|
context => {
|
||||||
|
namespace_prefix_map => {
|
||||||
|
'http://www.w3.org/2001/XMLSchema' => 'SOAP::WSDL::XSD::Typelib::Builtin',
|
||||||
|
},
|
||||||
|
namespace_map => {
|
||||||
|
},
|
||||||
|
prefix => {
|
||||||
|
interface => $self->get_interface_prefix,
|
||||||
|
element => $self->get_element_prefix,
|
||||||
|
server => $self->get_server_prefix,
|
||||||
|
type => $self->get_type_prefix,
|
||||||
|
typemap => $self->get_typemap_prefix,
|
||||||
|
}
|
||||||
|
},
|
||||||
definitions => $self->get_definitions,
|
definitions => $self->get_definitions,
|
||||||
interface_prefix => $self->get_interface_prefix,
|
interface_prefix => $self->get_interface_prefix,
|
||||||
server_prefix => $self->get_server_prefix,
|
server_prefix => $self->get_server_prefix,
|
||||||
@@ -47,7 +63,7 @@ sub _process :PROTECTED {
|
|||||||
%{ $arg_ref }
|
%{ $arg_ref }
|
||||||
},
|
},
|
||||||
$output)
|
$output)
|
||||||
or die $INCLUDE_PATH_of{ $ident }, '\\', $template, ' ', $tt_of{ $ident }->error();
|
or die $INCLUDE_PATH_of{ $ident }, '\\', $template, ' ', $tt->error();
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package SOAP::WSDL::Generator::Template::Plugin::XSD;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
|
||||||
|
my %namespace_prefix_map_of :ATTR(:name<namespace_prefix_map> :default<{}>);
|
||||||
|
my %namespace_map_of :ATTR(:name<namespace_map> :default<{}>);
|
||||||
|
my %prefix_of :ATTR(:name<prefix> :default<()>);
|
||||||
|
|
||||||
|
# create a singleton
|
||||||
|
sub load { # called as MyPlugin->load($context)
|
||||||
|
my ($class, $context, @arg_from) = @_;
|
||||||
|
my $stash = $context->stash();
|
||||||
|
my $self = bless \do { my $o = Class::Std::Fast::ID() }, $class;
|
||||||
|
use Data::Dumper;
|
||||||
|
# die Data::Dumper::Dumper $stash->{ context };
|
||||||
|
$self->set_namespace_map( $stash->{ context }->{ namespace_map });
|
||||||
|
$self->set_namespace_prefix_map( $stash->{ context }->{ namespace_prefix_map });
|
||||||
|
$self->set_prefix( $stash->{ context }->{ prefix });
|
||||||
|
return $self; # returns 'MyPlugin'
|
||||||
|
}
|
||||||
|
|
||||||
|
sub new {
|
||||||
|
return shift;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _get_prefix {
|
||||||
|
my ($self, $type, $namespace) = @_;
|
||||||
|
return $namespace_prefix_map_of{ $$self }->{ $namespace }
|
||||||
|
|| ( ($namespace_map_of{ $$self }->{ $namespace })
|
||||||
|
? join ('::', $prefix_of{ $$self }->{ $type }, $namespace_map_of{ $$self }->{ $namespace })
|
||||||
|
: $prefix_of{ $$self }->{ $type }
|
||||||
|
)
|
||||||
|
|| $prefix_of{ $$self }->{ $type };
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_element_prefix {
|
||||||
|
shift->_get_prefix( 'element', shift );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_interface_prefix {
|
||||||
|
shift->_get_prefix( 'interface', shift );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_server_prefix {
|
||||||
|
shift->_get_prefix( 'server', shift );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_type_prefix {
|
||||||
|
# die "WIX";
|
||||||
|
shift->_get_prefix( 'type', shift );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_typemap_prefix {
|
||||||
|
shift->_get_prefix( 'typemap', shift );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub error {}
|
||||||
|
1;
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ use Class::Std::Fast::Storable;
|
|||||||
use File::Basename;
|
use File::Basename;
|
||||||
use File::Spec;
|
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::Typemap;
|
||||||
use SOAP::WSDL::Generator::Visitor::Typelib;
|
use SOAP::WSDL::Generator::Visitor::Typelib;
|
||||||
@@ -55,9 +55,11 @@ sub generate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub generate_typelib {
|
sub generate_typelib {
|
||||||
my ($self) = @_;
|
my ($self, $arg_ref) = @_;
|
||||||
# $output_of{ ident $self } = "";
|
# $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] ) {
|
for my $type (map { @{ $_->get_type() } , @{ $_->get_element() } } @schema[1..$#schema] ) {
|
||||||
$type->_accept( $self );
|
$type->_accept( $self );
|
||||||
}
|
}
|
||||||
@@ -164,6 +166,7 @@ sub _generate_filename :PRIVATE {
|
|||||||
my ($self, @parts) = @_;
|
my ($self, @parts) = @_;
|
||||||
my $name = join '::', @parts;
|
my $name = join '::', @parts;
|
||||||
$name =~s{ \. }{::}xmsg;
|
$name =~s{ \. }{::}xmsg;
|
||||||
|
$name =~s{ \- }{_}xmsg;
|
||||||
$name =~s{ :: }{/}xmsg;
|
$name =~s{ :: }{/}xmsg;
|
||||||
return "$name.pm";
|
return "$name.pm";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
package [% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('^.+\.','') %];
|
[% USE XSD -%]
|
||||||
|
[% interface_name = interface_prefix _ '::'
|
||||||
|
_ service.get_name.replace('\.', '::') _ '::'
|
||||||
|
_ port.get_name.replace('^.+\.','');
|
||||||
|
interface_name = interface_name.replace('-','_'); -%]
|
||||||
|
package [% interface_name %];
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Fast::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
@@ -6,12 +11,12 @@ use Scalar::Util qw(blessed);
|
|||||||
use base qw(SOAP::WSDL::Client::Base);
|
use base qw(SOAP::WSDL::Client::Base);
|
||||||
|
|
||||||
# only load if it hasn't been loaded before
|
# only load if it hasn't been loaded before
|
||||||
require [% typemap_prefix %]::[% service.get_name.replace('\.', '::') %]
|
require [% typemap_prefix %]::[% service.get_name.replace('\.', '::').replace('-', '_') %]
|
||||||
if not [% typemap_prefix %]::[% service.get_name.replace('\.', '::') %]->can('get_class');
|
if not [% typemap_prefix %]::[% service.get_name.replace('\.', '::').replace('-', '_') %]->can('get_class');
|
||||||
|
|
||||||
sub START {
|
sub START {
|
||||||
$_[0]->set_proxy('[% port.first_address.get_location %]') if not $_[2]->{proxy};
|
$_[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};
|
if not $_[2]->{class_resolver};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,18 +33,22 @@ sub START {
|
|||||||
[% IF NO_POD; STOP; END %]
|
[% IF NO_POD; STOP; END %]
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% pod = BLOCK %]=pod[% END -%]
|
||||||
|
[% head1 = BLOCK %]=head1[% END -%]
|
||||||
|
[% head2 = BLOCK %]=head2[% END -%]
|
||||||
|
[% head3 = BLOCK %]=head3[% END -%]
|
||||||
|
|
||||||
=pod
|
[% pod %]
|
||||||
|
|
||||||
=head1 NAME
|
[% head1 %] NAME
|
||||||
|
|
||||||
|
[% interface_name %] - SOAP Interface for the [% service.get_name %] Web Service
|
||||||
|
|
||||||
[% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %] - SOAP Interface for the [% service.get_name %] Web Service
|
[% head1 %] SYNOPSIS
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
use [% interface_name %];
|
||||||
|
my $interface = [% interface_name %]->new();
|
||||||
use [% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %];
|
|
||||||
my $interface = [% interface_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %]->new();
|
|
||||||
|
|
||||||
my $response;
|
my $response;
|
||||||
[% FOREACH operation = binding.get_operation;
|
[% FOREACH operation = binding.get_operation;
|
||||||
@@ -47,30 +56,30 @@ __END__
|
|||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
[% head1 %] DESCRIPTION
|
||||||
|
|
||||||
SOAP Interface for the [% service.get_name %] web service
|
SOAP Interface for the [% service.get_name %] web service
|
||||||
located at [% port.first_address.get_location %].
|
located at [% port.first_address.get_location %].
|
||||||
|
|
||||||
=head1 SERVICE [% service.get_name %]
|
[% head1 %] SERVICE [% service.get_name %]
|
||||||
|
|
||||||
[% service.get_documentation %]
|
[% service.get_documentation %]
|
||||||
|
|
||||||
=head2 Port [% port.get_name %]
|
[% head2 %] Port [% port.get_name %]
|
||||||
|
|
||||||
[% port.get_documentation %]
|
[% port.get_documentation %]
|
||||||
|
|
||||||
=head1 METHODS
|
[% head1 %] METHODS
|
||||||
|
|
||||||
=head2 General methods
|
[% head2 %] General methods
|
||||||
|
|
||||||
=head3 new
|
[% head3 %] new
|
||||||
|
|
||||||
Constructor.
|
Constructor.
|
||||||
|
|
||||||
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
||||||
|
|
||||||
=head2 SOAP Service methods
|
[% head2 %] SOAP Service methods
|
||||||
|
|
||||||
[% INCLUDE Interface/POD/method_info.tt %]
|
[% INCLUDE Interface/POD/method_info.tt %]
|
||||||
|
|
||||||
@@ -79,8 +88,8 @@ All arguments are forwarded to L<SOAP::WSDL::Client|SOAP::WSDL::Client>.
|
|||||||
%][% INCLUDE Interface/POD/Operation.tt %]
|
%][% INCLUDE Interface/POD/Operation.tt %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
=head1 AUTHOR
|
[% head1 %] AUTHOR
|
||||||
|
|
||||||
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
||||||
|
|
||||||
=pod
|
=cut
|
||||||
@@ -55,6 +55,11 @@
|
|||||||
: die "input must have either type or element";
|
: die "input must have either type or element";
|
||||||
} @{ $part_from };
|
} @{ $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;
|
$stash->{ parts } = \@parts;
|
||||||
|
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
=head3 [% operation.get_name %]
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% head3 = BLOCK %]=head3[% END -%]
|
||||||
|
[% head3 %] [% operation.get_name %]
|
||||||
|
|
||||||
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
||||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||||
|
|||||||
@@ -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 strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Class::Std::Fast::Storable;
|
use Class::Std::Fast::Storable;
|
||||||
@@ -41,48 +45,53 @@ sub handle {
|
|||||||
[% IF NO_POD; STOP; END %]
|
[% IF NO_POD; STOP; END %]
|
||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% pod = BLOCK %]=pod[% END -%]
|
||||||
|
[% head1 = BLOCK %]=head1[% END -%]
|
||||||
|
[% head2 = BLOCK %]=head2[% END -%]
|
||||||
|
[% head3 = BLOCK %]=head3[% END -%]
|
||||||
|
|
||||||
=pod
|
[% pod %]
|
||||||
|
|
||||||
=head1 NAME
|
[% head1 %] NAME
|
||||||
|
|
||||||
[% interface_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
|
[% head1 %] SYNOPSIS
|
||||||
|
|
||||||
use [% server_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %];
|
use [% server_name %];
|
||||||
my $server = [% server_prefix %]::[% service.get_name.replace('\.', '::') %]::[% port.get_name.replace('\.', '::') %]->new({
|
my $server = [% server_name %]->new({
|
||||||
dispatch_to => 'My::Handler::Class',
|
dispatch_to => 'My::Handler::Class',
|
||||||
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
transport_class => 'SOAP::WSDL::Server::CGI', # optional, default
|
||||||
});
|
});
|
||||||
$server->handle();
|
$server->handle();
|
||||||
|
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
[% head1 %] DESCRIPTION
|
||||||
|
|
||||||
SOAP Server handler for the [% service.get_name %] web service
|
SOAP Server handler for the [% service.get_name %] web service
|
||||||
located at [% port.first_address.get_location %].
|
located at [% port.first_address.get_location %].
|
||||||
|
|
||||||
=head1 SERVICE [% service.get_name %]
|
[% head1 %] SERVICE [% service.get_name %]
|
||||||
|
|
||||||
[% service.get_documentation %]
|
[% service.get_documentation %]
|
||||||
|
|
||||||
=head2 Port [% port.get_name %]
|
[% head2 %] Port [% port.get_name %]
|
||||||
|
|
||||||
[% port.get_documentation %]
|
[% port.get_documentation %]
|
||||||
|
|
||||||
=head1 METHODS
|
[% head1 %] METHODS
|
||||||
|
|
||||||
=head2 General methods
|
[% head2 %] General methods
|
||||||
|
|
||||||
=head3 new
|
[% head3 %] new
|
||||||
|
|
||||||
Constructor.
|
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.
|
implementing the SOAP Service methods listed below.
|
||||||
|
|
||||||
=head2 SOAP Service methods
|
[% head2 %] SOAP Service methods
|
||||||
|
|
||||||
[% INCLUDE Server/POD/method_info.tt %]
|
[% INCLUDE Server/POD/method_info.tt %]
|
||||||
|
|
||||||
@@ -90,7 +99,7 @@ implementing the SOAP Service methods listed below.
|
|||||||
%][% INCLUDE Server/POD/Operation.tt %]
|
%][% INCLUDE Server/POD/Operation.tt %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
=head1 AUTHOR
|
[% head1 %] AUTHOR
|
||||||
|
|
||||||
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
Generated by SOAP::WSDL on [% PERL %]print scalar localtime() [% END %]
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
=head3 [% operation.get_name %]
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% head3 = BLOCK %]=head3[% END -%]
|
||||||
|
|
||||||
|
[% head3 %] [% operation.get_name %]
|
||||||
|
|
||||||
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
[% type = definitions.find_portType( binding.expand( binding.get_type ) );
|
||||||
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
port_op = type.find_operation( definitions.get_targetNamespace, operation.get_name );
|
||||||
port_op.get_documentation %]
|
port_op.get_documentation %]
|
||||||
|
|
||||||
sub [% operation.get_name %](
|
sub [% operation.get_name %] {
|
||||||
my ($self, $body, $header) = @_;
|
my ($self, $body, $header) = @_;
|
||||||
# body is a ??? object - sorry, POD not implemented yet
|
# body is a ??? object - sorry, POD not implemented yet
|
||||||
# header is a ??? object - sorry, POD not implemented yet
|
# header is a ??? object - sorry, POD not implemented yet
|
||||||
|
|||||||
@@ -18,13 +18,18 @@ sub get_typemap {
|
|||||||
|
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
=pod
|
__END__
|
||||||
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% pod = BLOCK %]=pod[% END -%]
|
||||||
|
[% head1 = BLOCK %]=head1[% END -%]
|
||||||
|
|
||||||
=head1 NAME
|
[% pod %]
|
||||||
|
|
||||||
[% typemap_prefix %]::[% service.get_name.replace('\.','::') %]; - typemap for ::[% service.get_name %];
|
[% head1 %] NAME
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
[% typemap_prefix %]::[% service.get_name.replace('\.','::').replace('-', '_') %]; - typemap for ::[% service.get_name %];
|
||||||
|
|
||||||
|
[% head1 %] DESCRIPTION
|
||||||
|
|
||||||
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
Typemap created by SOAP::WSDL for map-based SOAP message parsers.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
package [% type_prefix %]::[% complexType.get_name %];
|
[% USE XSD(context) -%]
|
||||||
|
package [% type_prefix %]::[% complexType.get_name.replace('\.','::').replace('-','_') %];
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
[% INCLUDE complexType/contentModel.tt %]
|
[% INCLUDE complexType/contentModel.tt %]
|
||||||
@@ -6,20 +7,27 @@ use warnings;
|
|||||||
# Don't include any perl source here - there may be sub-packages...
|
# Don't include any perl source here - there may be sub-packages...
|
||||||
#-%]
|
#-%]
|
||||||
|
|
||||||
|
[% INCLUDE complexType/attributeSet.tt %]
|
||||||
1;
|
1;
|
||||||
|
|
||||||
=pod
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% pod = BLOCK %]=pod[% END -%]
|
||||||
|
[% head1 = BLOCK %]=head1[% END -%]
|
||||||
|
[% head2 = BLOCK %]=head2[% END -%]
|
||||||
|
[% head3 = BLOCK %]=head3[% END -%]
|
||||||
|
|
||||||
=head1 NAME
|
[% pod %]
|
||||||
|
|
||||||
[% type_prefix %]::[% complexType.get_name %]
|
[% head1 %] NAME
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
[% type_prefix %]::[% complexType.get_name.replace('\.','::').replace('-','_') %]
|
||||||
|
|
||||||
|
[% head1 %] DESCRIPTION
|
||||||
|
|
||||||
Perl data type class for the XML Schema defined complextype
|
Perl data type class for the XML Schema defined complextype
|
||||||
[% complexType.get_name %] from the namespace [% complexType.get_targetNamespace %].
|
[% complexType.get_name %] from the namespace [% complexType.get_targetNamespace %].
|
||||||
|
|
||||||
=head2 PROPERTIES
|
[% head2 %] PROPERTIES
|
||||||
|
|
||||||
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
The following properties may be accessed using get_PROPERTY / set_PROPERTY
|
||||||
methods:
|
methods:
|
||||||
@@ -28,15 +36,15 @@ methods:
|
|||||||
[% element.get_name %]
|
[% element.get_name %]
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
=head1 METHODS
|
[% head1 %] METHODS
|
||||||
|
|
||||||
=head2 new
|
[% head2 %] new
|
||||||
|
|
||||||
Constructor. The following data structure may be passed to new():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
[% indent = ' '; INCLUDE complexType/POD/structure.tt %]
|
[% indent = ' '; INCLUDE complexType/POD/structure.tt %]
|
||||||
|
|
||||||
=head1 AUTHOR
|
[% head1 %] AUTHOR
|
||||||
|
|
||||||
Generated by SOAP::WSDL
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[% indent %]{
|
[% indent %]{
|
||||||
[%- IF complexType.get_name %] # [% type_prefix %]::[% complexType.get_name %][% END %]
|
[%- IF complexType.get_name %] # [% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name %][% END %]
|
||||||
[%- indent = indent _ ' ';
|
[%- indent = indent _ ' ';
|
||||||
FOREACH element = complexType.get_element %]
|
FOREACH element = complexType.get_element %]
|
||||||
[% indent %][% element.get_name %] => [% INCLUDE element/POD/structure.tt -%]
|
[% indent %][% element.get_name %] => [% INCLUDE element/POD/structure.tt -%]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[% indent %]{
|
[% indent %]{
|
||||||
[%- IF complexType.get_name %] # [% type_prefix %]::[% complexType.get_name %][% END %]
|
[%- IF complexType.get_name %] # [% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name %][% END %]
|
||||||
[%- indent = indent _ ' ' %]
|
[%- indent = indent _ ' ' %]
|
||||||
[% indent %]# One of the following elements.
|
[% indent %]# One of the following elements.
|
||||||
[% indent %]# No occurance checks yet, so be sure to pass just one...
|
[% indent %]# No occurance checks yet, so be sure to pass just one...
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
[% IF (complexType.get_variety == 'restriction');
|
[% IF (complexType.get_variety == 'restriction');
|
||||||
INCLUDE complexType/POD/restriction.tt(complexType = complexType);
|
INCLUDE complexType/POD/restriction.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_variety == 'sequence');
|
ELSIF (complexType.get_variety == 'extension');
|
||||||
THROW NOT_IMPLEMENTED, "${ complexType.get_name } - complexType complexContent extension not implemented yet";
|
#THROW NOT_IMPLEMENTED, "${ complexType.get_name } - complexType complexContent extension not implemented yet";
|
||||||
|
%]
|
||||||
|
# No documentation generated for complexContent / extension yet
|
||||||
|
[%
|
||||||
ELSE;
|
ELSE;
|
||||||
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
|
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
|
||||||
END;
|
END;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[% indent %]{
|
[% indent %]{
|
||||||
[%- IF complexType.get_name %] # [% type_prefix %]::[% complexType.get_name %][% END %]
|
[%- IF complexType.get_name %] # [% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name %][% END %]
|
||||||
[%- indent = indent _ ' ';
|
[%- indent = indent _ ' ';
|
||||||
FOREACH element = complexType.get_element %]
|
FOREACH element = complexType.get_element %]
|
||||||
[% indent %][% element.get_name %] => [% INCLUDE element/POD/structure.tt -%]
|
[% indent %][% element.get_name %] => [% INCLUDE element/POD/structure.tt -%]
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
[% IF (complexType.get_variety == 'restriction');
|
||||||
|
INCLUDE complexType/POD/restriction.tt(complexType = complexType);
|
||||||
|
ELSIF (complexType.get_variety == 'extension');
|
||||||
|
#THROW NOT_IMPLEMENTED, "${ complexType.get_name } - complexType complexContent extension not implemented yet";
|
||||||
|
%]
|
||||||
|
# No documentation generated for complexContent / extension yet
|
||||||
|
[%
|
||||||
|
ELSE;
|
||||||
|
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
|
||||||
|
END;
|
||||||
|
|
||||||
|
%]
|
||||||
@@ -7,7 +7,7 @@ ELSIF (complexType.get_variety == 'group');
|
|||||||
ELSIF (complexType.get_variety == 'choice');
|
ELSIF (complexType.get_variety == 'choice');
|
||||||
INCLUDE complexType/POD/choice.tt(complexType = complexType);
|
INCLUDE complexType/POD/choice.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_contentModel == 'simpleContent');
|
ELSIF (complexType.get_contentModel == 'simpleContent');
|
||||||
THROW NOT_IMPLEMENTED, "${ element.get_name } - complexType simpleContent not implemented yet";
|
INCLUDE complexType/POD/simpleContent.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_contentModel == 'complexContent');
|
ELSIF (complexType.get_contentModel == 'complexContent');
|
||||||
INCLUDE complexType/POD/complexContent.tt(complexType = complexType);
|
INCLUDE complexType/POD/complexContent.tt(complexType = complexType);
|
||||||
END %],
|
END %],
|
||||||
@@ -24,13 +24,9 @@ __PACKAGE__->_factory(
|
|||||||
{
|
{
|
||||||
[% FOREACH element = complexType.get_element;
|
[% FOREACH element = complexType.get_element;
|
||||||
IF (type = element.get_type);
|
IF (type = element.get_type);
|
||||||
element_type = complexType.expand( type );
|
element_type = complexType.expand( type ); -%]
|
||||||
IF (element_type.0 == 'http://www.w3.org/2001/XMLSchema'); -%]
|
[% element.get_name %] => '[% XSD.get_type_prefix(element_type.0) %]::[% element_type.1 %]',
|
||||||
[% element.get_name %] => 'SOAP::WSDL::XSD::Typelib::Builtin::[% element_type.1 %]',
|
[% ELSE;
|
||||||
[% ELSE -%]
|
|
||||||
[% element.get_name %] => '[% type_prefix %]::[% element_type.1 %]',
|
|
||||||
[% END;
|
|
||||||
ELSE;
|
|
||||||
IF (element.first_simpleType);
|
IF (element.first_simpleType);
|
||||||
atomic_types.${ element.get_name } = element.first_simpleType;
|
atomic_types.${ element.get_name } = element.first_simpleType;
|
||||||
ELSIF (element.first_complexType);
|
ELSIF (element.first_complexType);
|
||||||
@@ -38,7 +34,7 @@ __PACKAGE__->_factory(
|
|||||||
ELSE;
|
ELSE;
|
||||||
THROW NOT_IMPLEMENTED , "Neither simple nor complex atomic type - don't know what to do with it";
|
THROW NOT_IMPLEMENTED , "Neither simple nor complex atomic type - don't know what to do with it";
|
||||||
END; %]
|
END; %]
|
||||||
[% element.get_name %] => '[% type_prefix %]::[% complexType.get_name %]::_[% element.get_name %]',
|
[% element.get_name %] => '[% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name %]::_[% element.get_name %]',
|
||||||
[% END;
|
[% END;
|
||||||
END -%]
|
END -%]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
[% FOREACH type IN atomic_types; %]
|
[% FOREACH type IN atomic_types; %]
|
||||||
|
|
||||||
package [% type_prefix %]::[% complexType.get_name %]::_[% type.key %];
|
package [% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name %]::_[% type.key %];
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
[% IF (complexType.get_attribute.size) %]
|
||||||
|
package [% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name.replace('\.','::').replace('-','_') %]::_ATTR;
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
||||||
|
|
||||||
|
{ # BLOCK to scope variables
|
||||||
|
[%
|
||||||
|
|
||||||
|
FOREACH element = complexType.get_attribute %]
|
||||||
|
my %[% element.get_name %]_of :ATTR(:get<[% element.get_name %]>);
|
||||||
|
[%- END %]
|
||||||
|
|
||||||
|
__PACKAGE__->_factory(
|
||||||
|
[ qw([% FOREACH element = complexType.get_attribute %]
|
||||||
|
[% element.get_name -%]
|
||||||
|
[% END %]
|
||||||
|
) ],
|
||||||
|
{
|
||||||
|
[% FOREACH element = complexType.get_attribute -%]
|
||||||
|
[% element.get_name %] => \%[% element.get_name %]_of,
|
||||||
|
[% END -%]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
[% FOREACH element = complexType.get_attribute;
|
||||||
|
IF (type = element.get_type);
|
||||||
|
element_type = complexType.expand( type );
|
||||||
|
-%]
|
||||||
|
[% element.get_name %] => '[% XSD.get_type_prefix(element_type.0) %]::[% element_type.1 %]',
|
||||||
|
[%
|
||||||
|
ELSE;
|
||||||
|
IF (element.first_simpleType);
|
||||||
|
THROW NOT_IMPLEMENTED , "Attributes with atomic simpleType definition are not implemented yet";
|
||||||
|
atomic_types.${ element.get_name } = element.first_simpleType;
|
||||||
|
ELSE;
|
||||||
|
THROW NOT_IMPLEMENTED , "Neither simple nor complex atomic type - don't know what to do with it";
|
||||||
|
END; %]
|
||||||
|
[% element.get_name %] => '[% XSD.get_type_prefix(complexType.get_targetNamespace) %]::[% complexType.get_name %]::_[% element.get_name %]',
|
||||||
|
[% END;
|
||||||
|
END -%]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
} # end BLOCK
|
||||||
|
|
||||||
|
[% END %]
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
INCLUDE complexType/restriction.tt(complexType = complexType);
|
INCLUDE complexType/restriction.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_variety == 'sequence');
|
ELSIF (complexType.get_variety == 'sequence');
|
||||||
INCLUDE complexType/extension.tt(complexType = complexType);
|
INCLUDE complexType/extension.tt(complexType = complexType);
|
||||||
|
ELSIF (complexType.get_variety == 'all');
|
||||||
|
INCLUDE complexType/extension.tt(complexType = complexType);
|
||||||
ELSE;
|
ELSE;
|
||||||
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
|
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
|
||||||
END;
|
END;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[% IF (complexType.get_contentModel == 'simpleContent');
|
[% IF (complexType.get_contentModel == 'simpleContent');
|
||||||
THROW NOT_IMPLEMENTED, "${ element.get_name } - complexType simpleContent not implemented yet";
|
INCLUDE complexType/simpleContent.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_contentModel == 'complexContent');
|
ELSIF (complexType.get_contentModel == 'complexContent');
|
||||||
INCLUDE complexType/complexContent.tt(complexType = complexType);
|
INCLUDE complexType/complexContent.tt(complexType = complexType);
|
||||||
ELSE;
|
ELSE;
|
||||||
|
|||||||
@@ -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 );
|
base_type = definitions.first_types.find_type( base_name );
|
||||||
|
|
||||||
element_from = complexType.get_element;
|
element_from = complexType.get_element;
|
||||||
@@ -8,15 +8,19 @@ element_from = complexType.get_element;
|
|||||||
#
|
#
|
||||||
# Sanity check: All original elements must be noted first
|
# Sanity check: All original elements must be noted first
|
||||||
#
|
#
|
||||||
FOREACH element = base_type.get_element;
|
element_list = 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 }";
|
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;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
complexType.set_element( element_list );
|
||||||
|
|
||||||
-%]
|
-%]
|
||||||
use base qw([% type_prefix %]::[% base_name.1.replace('\.', '::') %]);
|
use base qw([% XSD.get_type_prefix(base_name.0) %]::[% base_name.1.replace('\.', '::') %]);
|
||||||
[%
|
[%
|
||||||
|
|
||||||
INCLUDE complexType/variety.tt(complexType = complexType);
|
INCLUDE complexType/variety.tt(complexType = complexType);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[% IF (base=complexType.get_base);
|
[% IF (base=complexType.get_base);
|
||||||
base_name=complexType.expand(base);
|
base_name=complexType.expand(base);
|
||||||
-%]
|
-%]
|
||||||
use base qw([% type_prefix %]::[% base_name.1.replace('\.', '::') %]);
|
use base qw([% XSD.get_type_prefix(base_name.0) %]::[% base_name.1.replace('\.', '::') %]);
|
||||||
[%
|
[%
|
||||||
ELSE;
|
ELSE;
|
||||||
THROW NOT_IMPLEMENTED, "restriction without base not supported";
|
THROW NOT_IMPLEMENTED, "restriction without base not supported";
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[% IF (complexType.get_variety == 'restriction');
|
||||||
|
INCLUDE complexType/restriction.tt(complexType = complexType);
|
||||||
|
ELSIF (complexType.get_variety == 'extension');
|
||||||
|
THROW NOT_IMPLEMENTED, "${ complexType.get_name } - complexType simpleContent extension not implemented yet";
|
||||||
|
ELSE;
|
||||||
|
THROW UNKNOWN, "unknown variety ${ complexType.get_variety }";
|
||||||
|
END;
|
||||||
|
%]
|
||||||
@@ -9,7 +9,12 @@ ELSIF (complexType.get_variety == 'choice');
|
|||||||
INCLUDE complexType/all.tt(complexType = complexType);
|
INCLUDE complexType/all.tt(complexType = complexType);
|
||||||
ELSIF (complexType.get_variety);
|
ELSIF (complexType.get_variety);
|
||||||
THROW NOT_IMPLEMENTED, "Unknown variety ${ complexType.get_variety } in ${ complexType.get_name } (${ element.get_name })";
|
THROW NOT_IMPLEMENTED, "Unknown variety ${ complexType.get_variety } in ${ complexType.get_name } (${ element.get_name })";
|
||||||
ELSE;
|
ELSE %]
|
||||||
# There's no variety - might be empty complexType
|
|
||||||
END;
|
# There's no variety - empty complexType
|
||||||
%]
|
use Class::Std::Fast::Storable constructor => 'none';
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::ComplexType);
|
||||||
|
|
||||||
|
__PACKAGE__->_factory();
|
||||||
|
|
||||||
|
[% END %]
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
package [% element_prefix %]::[% element.get_name %];
|
[% USE XSD(context) %]
|
||||||
|
package [% XSD.get_element_prefix(element.get_targetNamespace) %]::[% element.get_name.replace('\.','::') %];
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
@@ -17,53 +18,73 @@ use base qw(
|
|||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
[% INCLUDE _type_class.tt( type = type, node = element ) %]
|
[% INCLUDE _type_class.tt( type = type, node = element ) %]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
}
|
||||||
[%- ELSIF (ref = element.get_ref); -%]
|
[%- ELSIF (ref = element.get_ref); -%]
|
||||||
# element ref="[% ref %]"
|
# element ref="[% ref %]"
|
||||||
use base qw(
|
use base qw(
|
||||||
[% element_prefix %]::[% ref.split(':').1 %]
|
[% element_prefix %]::[% ref.split(':').1 %]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
}
|
||||||
[%- ELSIF (simpleType = element.first_simpleType) %]
|
[%- ELSIF (simpleType = element.first_simpleType) %]
|
||||||
# atomic simpleType: <element><simpleType
|
# atomic simpleType: <element><simpleType
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
);
|
);
|
||||||
[% INCLUDE simpleType/contentModel.tt %]
|
[% INCLUDE simpleType/contentModel.tt -%]
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
[% ELSIF (complexType = element.first_complexType) %]
|
[% ELSIF (complexType = element.first_complexType) %]
|
||||||
use base qw(
|
use base qw(
|
||||||
SOAP::WSDL::XSD::Typelib::Element
|
SOAP::WSDL::XSD::Typelib::Element
|
||||||
SOAP::WSDL::XSD::Typelib::ComplexType
|
SOAP::WSDL::XSD::Typelib::ComplexType
|
||||||
);
|
);
|
||||||
[% INCLUDE complexType/contentModel.tt;
|
[% INCLUDE complexType/contentModel.tt -%]
|
||||||
END %]
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
package [% XSD.get_element_prefix(element.get_targetNamespace) %]::[% element.get_name.replace('\.','::').replace('-','_') %]::_ATTR;
|
||||||
|
use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet);
|
||||||
|
[% INCLUDE complexType/attributeSet.tt %]
|
||||||
|
|
||||||
|
[% ELSE %]
|
||||||
|
|
||||||
} # end of BLOCK
|
} # end of BLOCK
|
||||||
|
|
||||||
|
[% END %]
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
# __END__
|
[%# work around for CPAN's indexer, which gets disturbed by pod in templates -%]
|
||||||
|
[% pod = BLOCK %]=pod[% END -%]
|
||||||
|
[% head1 = BLOCK %]=head1[% END -%]
|
||||||
|
[% head2 = BLOCK %]=head2[% END -%]
|
||||||
|
[% head3 = BLOCK %]=head3[% END -%]
|
||||||
|
|
||||||
=pod
|
[% pod %]
|
||||||
|
|
||||||
=head1 NAME
|
[% head1 %] NAME
|
||||||
|
|
||||||
[% element_prefix %]::[% element.get_name %]
|
[% XSD.get_element_prefix(element.get_targetNamespace) %]::[% element.get_name %]
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
[% head1 %] DESCRIPTION
|
||||||
|
|
||||||
Perl data type class for the XML Schema defined element
|
Perl data type class for the XML Schema defined element
|
||||||
[% element.get_name %] from the namespace [% element.get_targetNamespace %].
|
[% element.get_name %] from the namespace [% element.get_targetNamespace %].
|
||||||
|
|
||||||
=head1 METHODS
|
[% head1 %] METHODS
|
||||||
|
|
||||||
=head2 new
|
[% head2 %] new
|
||||||
|
|
||||||
my $element = [% element_prefix %]::[% element.get_name %]->new($data);
|
my $element = [% XSD.get_element_prefix(element.get_targetNamespace) %]::[% element.get_name %]->new($data);
|
||||||
|
|
||||||
Constructor. The following data structure may be passed to new():
|
Constructor. The following data structure may be passed to new():
|
||||||
|
|
||||||
[% indent = ' '; INCLUDE element/POD/structure.tt; %]
|
[% indent = ' '; INCLUDE element/POD/structure.tt; %]
|
||||||
|
|
||||||
=head1 AUTHOR
|
[% head1 %] AUTHOR
|
||||||
|
|
||||||
Generated by SOAP::WSDL
|
Generated by SOAP::WSDL
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user