From bfc3247583b8598c3a168fa7aa35ec3de19640ca Mon Sep 17 00:00:00 2001 From: Martin Kutter Date: Sat, 21 Feb 2009 08:10:58 -0800 Subject: [PATCH] import SOAP-WSDL 2.00.07 from CPAN git-cpan-module: SOAP-WSDL git-cpan-version: 2.00.07 git-cpan-authorid: MKUTTER git-cpan-file: authors/id/M/MK/MKUTTER/SOAP-WSDL-2.00.07.tar.gz --- Build.PL | 2 +- Changes | 70 +- MANIFEST | 94 +- META.yml | 168 +- Makefile.PL | 2 +- TEST_COVERAGE | 12 +- benchmark/XSD/strftime.pl | 13 +- benchmark/hello.pl | 13 +- benchmark/person.pl | 23 +- bin/wsdl2perl.pl | 3 +- example/hello.pl | 4 +- example/hello_compile.pl | 6 +- example/hello_lite.pl | 2 +- example/java/cxf/.classpath | 10 + .../cxf/.settings/org.eclipse.jdt.core.prefs | 5 + .../cxf/.settings/org.maven.ide.eclipse.prefs | 8 + example/java/cxf/11_helloworld.wsdl | 95 + example/java/cxf/README | 22 + example/java/cxf/jax-binding.xml | 15 + example/java/cxf/pom.xml | 181 ++ example/java/cxf/src/main/resources/cxf.xml | 21 + .../test/java/helloworld/HelloWorldTest.java | 23 + .../cxf/src/test/resources/test-context.xml | 16 + example/lib/MyElements/GenerateBarCode.pm | 6 - example/person_compile.pl | 1 + example/server/hello_simple.pl | 29 + example/wsdl/Person.wsdl | 3 +- example/wsdl/person.xml | 440 ++++ lib/SOAP/WSDL.pm | 7 +- lib/SOAP/WSDL/Base.pm | 11 +- lib/SOAP/WSDL/Binding.pm | 2 +- lib/SOAP/WSDL/Client.pm | 11 +- lib/SOAP/WSDL/Client/Base.pm | 6 +- lib/SOAP/WSDL/Definitions.pm | 6 +- lib/SOAP/WSDL/Deserializer/Hash.pm | 6 +- lib/SOAP/WSDL/Deserializer/SOM.pm | 6 +- lib/SOAP/WSDL/Deserializer/XSD.pm | 41 +- lib/SOAP/WSDL/Expat/Base.pm | 2 +- lib/SOAP/WSDL/Expat/Message2Hash.pm | 2 +- lib/SOAP/WSDL/Expat/MessageParser.pm | 29 +- lib/SOAP/WSDL/Expat/MessageStreamParser.pm | 6 +- lib/SOAP/WSDL/Expat/WSDLParser.pm | 283 +-- lib/SOAP/WSDL/Factory/Deserializer.pm | 2 +- lib/SOAP/WSDL/Factory/Generator.pm | 2 +- lib/SOAP/WSDL/Factory/Serializer.pm | 6 +- lib/SOAP/WSDL/Factory/Transport.pm | 6 +- lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm | 5 +- lib/SOAP/WSDL/Generator/PrefixResolver.pm | 2 +- lib/SOAP/WSDL/Generator/Template.pm | 38 +- .../WSDL/Generator/Template/Plugin/XSD.pm | 2 +- lib/SOAP/WSDL/Generator/Template/XSD.pm | 121 +- .../WSDL/Generator/Template/XSD/Typemap.tt | 1 - .../Generator/Template/XSD/complexType.tt | 4 + .../WSDL/Generator/Template/XSD/element.tt | 4 +- lib/SOAP/WSDL/Generator/Visitor.pm | 2 +- lib/SOAP/WSDL/Generator/Visitor/Typelib.pm | 11 - lib/SOAP/WSDL/Generator/Visitor/Typemap.pm | 38 +- lib/SOAP/WSDL/Manual/CodeFirst.pod | 91 + lib/SOAP/WSDL/Manual/Cookbook.pod | 78 +- lib/SOAP/WSDL/Message.pm | 2 +- lib/SOAP/WSDL/OpMessage.pm | 2 +- lib/SOAP/WSDL/Operation.pm | 2 +- lib/SOAP/WSDL/Part.pm | 2 +- lib/SOAP/WSDL/Port.pm | 2 +- lib/SOAP/WSDL/PortType.pm | 2 +- lib/SOAP/WSDL/SOAP/Address.pm | 2 +- lib/SOAP/WSDL/SOAP/Body.pm | 2 +- lib/SOAP/WSDL/SOAP/Header.pm | 2 +- lib/SOAP/WSDL/SOAP/HeaderFault.pm | 2 +- lib/SOAP/WSDL/SOAP/Operation.pm | 2 +- lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm | 6 +- lib/SOAP/WSDL/Serializer/XSD.pm | 6 +- lib/SOAP/WSDL/Server.pm | 14 +- lib/SOAP/WSDL/Server/CGI.pm | 2 +- lib/SOAP/WSDL/Server/Mod_Perl2.pm | 2 +- lib/SOAP/WSDL/Server/Simple.pm | 161 ++ lib/SOAP/WSDL/Service.pm | 2 +- lib/SOAP/WSDL/Transport/HTTP.pm | 10 +- lib/SOAP/WSDL/Transport/Loopback.pm | 2 +- lib/SOAP/WSDL/Transport/Test.pm | 2 +- lib/SOAP/WSDL/TypeLookup.pm | 2 +- lib/SOAP/WSDL/Types.pm | 2 +- lib/SOAP/WSDL/XSD/Annotation.pm | 2 +- lib/SOAP/WSDL/XSD/Attribute.pm | 2 +- lib/SOAP/WSDL/XSD/AttributeGroup.pm | 2 +- lib/SOAP/WSDL/XSD/Builtin.pm | 2 +- lib/SOAP/WSDL/XSD/ComplexType.pm | 11 +- lib/SOAP/WSDL/XSD/Element.pm | 2 +- lib/SOAP/WSDL/XSD/Enumeration.pm | 2 +- lib/SOAP/WSDL/XSD/FractionDigits.pm | 2 +- lib/SOAP/WSDL/XSD/Group.pm | 2 +- lib/SOAP/WSDL/XSD/Length.pm | 2 +- lib/SOAP/WSDL/XSD/MaxExclusive.pm | 2 +- lib/SOAP/WSDL/XSD/MaxInclusive.pm | 2 +- lib/SOAP/WSDL/XSD/MaxLength.pm | 2 +- lib/SOAP/WSDL/XSD/MinExclusive.pm | 2 +- lib/SOAP/WSDL/XSD/MinInclusive.pm | 2 +- lib/SOAP/WSDL/XSD/MinLength.pm | 2 +- lib/SOAP/WSDL/XSD/Pattern.pm | 2 +- lib/SOAP/WSDL/XSD/Schema.pm | 9 +- lib/SOAP/WSDL/XSD/Schema/Builtin.pm | 9 +- lib/SOAP/WSDL/XSD/SimpleType.pm | 2 +- lib/SOAP/WSDL/XSD/TotalDigits.pm | 4 +- lib/SOAP/WSDL/XSD/Typelib/Attribute.pm | 2 +- lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm | 2 +- lib/SOAP/WSDL/XSD/Typelib/Builtin.pm | 2 +- lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm | 27 +- lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm | 2 +- lib/SOAP/WSDL/XSD/Typelib/Builtin/date.pm | 22 +- lib/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.pm | 39 +- lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm | 2 +- lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm | 202 +- lib/SOAP/WSDL/XSD/Typelib/Element.pm | 6 +- lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm | 8 +- lib/SOAP/WSDL/XSD/WhiteSpace.pm | 2 +- t/002_parse_wsdl.t | 6 +- t/006_client.t | 2 +- t/099_pod_coverage.t | 2 +- t/CodeFirst/ComplexType.pm | 77 + t/CodeFirst/element.pm | 43 + t/CodeFirst/sequence.pm | 28 + t/CodeFirst/test.pl | 30 + t/SOAP/WSDL/03_complexType-element-ref.t | 21 +- t/SOAP/WSDL/Base.t | 8 +- t/SOAP/WSDL/Client.t | 31 +- t/SOAP/WSDL/Deserializer/XSD.t | 15 +- t/SOAP/WSDL/Expat/MessageParser.t | 16 +- t/SOAP/WSDL/Expat/WSDLParser.t | 8 +- t/SOAP/WSDL/Generator/Template/XSD/Import.t | 10 +- .../WSDL/Generator/Template/XSD/Unqualified.t | 56 + t/SOAP/WSDL/Generator/XSD.t | 1 + t/SOAP/WSDL/Generator/XSD_custom_resolver.t | 1 + t/SOAP/WSDL/Generator/XSD_dot_names.t | 1 + .../WSDL/Generator/XSD_nested_complextype.t | 1 + t/SOAP/WSDL/Generator/XSD_unsupported.t | 1 + t/SOAP/WSDL/Serializer/XSD.t | 16 +- t/SOAP/WSDL/Server/Simple.t | 127 ++ t/SOAP/WSDL/Transport/HTTP.t | 6 +- t/SOAP/WSDL/XSD/Attribute.t | 3 +- t/SOAP/WSDL/XSD/Element.t | 3 +- t/SOAP/WSDL/XSD/Enumeration.t | 3 +- t/SOAP/WSDL/XSD/Schema.t | 4 +- t/SOAP/WSDL/XSD/SimpleType.t | 6 +- t/SOAP/WSDL/XSD/Typelib/Builtin/date.t | 18 +- t/SOAP/WSDL/XSD/Typelib/Builtin/dateTime.t | 15 +- t/SOAP/WSDL/XSD/Typelib/ComplexType.t | 44 +- t/SOAP/WSDL/XSD/Typelib/Element.t | 18 +- t/acceptance/wsdl/006_sax_client.wsdl | 628 +++--- .../wsdl/03_complexType-element-ref.wsdl | 2 +- t/acceptance/wsdl/WSDLParser-imported.wsdl | 1 + t/acceptance/wsdl/generator_test.wsdl | 1147 +++++----- .../wsdl/generator_test_dot_names.wsdl | 608 +++--- .../wsdl/generator_unsupported_test.wsdl | 99 +- t/acceptance/wsdl/import.xsd | 3 +- t/acceptance/wsdl/nested_complextype.wsdl | 264 +-- .../private/PartnerManagement_header_def.wsdl | 106 + .../private/PartnerManagement_lenght_.wsdl | 183 ++ t/acceptance/wsdl/private/RunningService.WSDL | 1899 +++++++++++++++++ t/acceptance/wsdl/private/RunningService.wsdl | 798 +++++++ .../private/lib/MyElements/AddAttachment.pm | 164 ++ .../lib/MyElements/AddAttachmentResponse.pm | 119 ++ .../lib/MyElements/AddCalendarEntry.pm | 157 ++ .../MyElements/AddCalendarEntryResponse.pm | 126 ++ .../wsdl/private/lib/MyElements/AddTask.pm | 160 ++ .../private/lib/MyElements/AddTaskResponse.pm | 126 ++ .../private/lib/MyElements/AddUsersToGroup.pm | 136 ++ .../lib/MyElements/AddUsersToGroupResponse.pm | 163 ++ .../wsdl/private/lib/MyElements/ClearGroup.pm | 119 ++ .../lib/MyElements/ClearGroupResponse.pm | 163 ++ .../wsdl/private/lib/MyElements/CountItems.pm | 181 ++ .../lib/MyElements/CountItemsResponse.pm | 119 ++ .../private/lib/MyElements/CreateGroup.pm | 134 ++ .../lib/MyElements/CreateGroupResponse.pm | 163 ++ .../private/lib/MyElements/DeleteGroup.pm | 119 ++ .../lib/MyElements/DeleteGroupResponse.pm | 87 + .../wsdl/private/lib/MyElements/DeleteItem.pm | 134 ++ .../lib/MyElements/DeleteItemResponse.pm | 87 + .../private/lib/MyElements/GetAttachment.pm | 149 ++ .../lib/MyElements/GetAttachmentResponse.pm | 137 ++ .../private/lib/MyElements/GetItemVersions.pm | 134 ++ .../lib/MyElements/GetItemVersionsResponse.pm | 130 ++ .../wsdl/private/lib/MyElements/GetItems.pm | 228 ++ .../lib/MyElements/GetItemsResponse.pm | 130 ++ .../lib/MyElements/ModifyCalendarEntry.pm | 171 ++ .../MyElements/ModifyCalendarEntryResponse.pm | 126 ++ .../wsdl/private/lib/MyElements/ModifyTask.pm | 169 ++ .../lib/MyElements/ModifyTaskResponse.pm | 126 ++ .../lib/MyElements/RemoveUsersFromGroup.pm | 136 ++ .../RemoveUsersFromGroupResponse.pm | 163 ++ .../RunningServiceClassSoap.pm | 719 +++++++ .../lib/MyTypemaps/RunningServiceClass.pm | 287 +++ .../private/lib/MyTypes/ADDITIONAL_ROLES.pm | 65 + .../lib/MyTypes/AddressesSalutations.pm | 111 + .../private/lib/MyTypes/ArrayOfAttachment.pm | 101 + .../wsdl/private/lib/MyTypes/ArrayOfField.pm | 98 + .../wsdl/private/lib/MyTypes/ArrayOfNUser.pm | 98 + .../private/lib/MyTypes/ArrayOfPermission.pm | 101 + .../lib/MyTypes/ArrayOfSerializedItem.pm | 105 + .../wsdl/private/lib/MyTypes/ArrayOfString.pm | 98 + .../private/lib/MyTypes/ArrayOfString1.pm | 98 + .../private/lib/MyTypes/ArrayOfString2.pm | 98 + .../wsdl/private/lib/MyTypes/Attachment.pm | 152 ++ .../private/lib/MyTypes/AttachmentItemData.pm | 146 ++ .../lib/MyTypes/AttachmentOperation.pm | 65 + .../private/lib/MyTypes/CalendarCreateData.pm | 107 + .../private/lib/MyTypes/CalendarModifyData.pm | 191 ++ .../private/lib/MyTypes/CommonItemData.pm | 164 ++ .../lib/MyTypes/CountListOfSerializedItem.pm | 152 ++ .../wsdl/private/lib/MyTypes/Field.pm | 128 ++ .../wsdl/private/lib/MyTypes/Folders.pm | 98 + .../private/lib/MyTypes/GetFileResponse.pm | 130 ++ ...pOfStringNiceListOfAddressesSalutations.pm | 107 + .../MyTypes/HstringAddressesSalutations.pm | 97 + .../private/lib/MyTypes/ItemCreateData.pm | 121 ++ .../wsdl/private/lib/MyTypes/ItemData.pm | 72 + .../private/lib/MyTypes/ItemUpdateData.pm | 77 + .../KVstringNiceListOfAddressesSalutations.pm | 150 ++ .../wsdl/private/lib/MyTypes/NUser.pm | 113 + .../wsdl/private/lib/MyTypes/Permission.pm | 107 + .../private/lib/MyTypes/PermissionItemData.pm | 106 + .../wsdl/private/lib/MyTypes/Principal.pm | 113 + .../wsdl/private/lib/MyTypes/PrincipalType.pm | 65 + .../wsdl/private/lib/MyTypes/Recipients.pm | 116 + .../private/lib/MyTypes/SerializedItem.pm | 156 ++ .../private/lib/MyTypes/TaskModifyData.pm | 168 ++ .../wsdl/private/lib/MyTypes/UserType.pm | 65 + t/lib/CodeFirst.pm | 63 + t/lib/MySimpleElement.pm | 11 + t/test.wsdl | 381 ++-- 229 files changed, 16685 insertions(+), 2064 deletions(-) create mode 100644 example/java/cxf/.classpath create mode 100644 example/java/cxf/.settings/org.eclipse.jdt.core.prefs create mode 100644 example/java/cxf/.settings/org.maven.ide.eclipse.prefs create mode 100644 example/java/cxf/11_helloworld.wsdl create mode 100644 example/java/cxf/README create mode 100644 example/java/cxf/jax-binding.xml create mode 100644 example/java/cxf/pom.xml create mode 100644 example/java/cxf/src/main/resources/cxf.xml create mode 100644 example/java/cxf/src/test/java/helloworld/HelloWorldTest.java create mode 100644 example/java/cxf/src/test/resources/test-context.xml create mode 100644 example/server/hello_simple.pl create mode 100644 example/wsdl/person.xml delete mode 100644 lib/SOAP/WSDL/Generator/Visitor/Typelib.pm create mode 100644 lib/SOAP/WSDL/Manual/CodeFirst.pod create mode 100644 lib/SOAP/WSDL/Server/Simple.pm create mode 100644 t/CodeFirst/ComplexType.pm create mode 100644 t/CodeFirst/element.pm create mode 100644 t/CodeFirst/sequence.pm create mode 100644 t/CodeFirst/test.pl create mode 100644 t/SOAP/WSDL/Generator/Template/XSD/Unqualified.t create mode 100644 t/SOAP/WSDL/Server/Simple.t create mode 100644 t/acceptance/wsdl/private/PartnerManagement_header_def.wsdl create mode 100644 t/acceptance/wsdl/private/PartnerManagement_lenght_.wsdl create mode 100644 t/acceptance/wsdl/private/RunningService.WSDL create mode 100644 t/acceptance/wsdl/private/RunningService.wsdl create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddAttachment.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddAttachmentResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddCalendarEntry.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddCalendarEntryResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddTask.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddTaskResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddUsersToGroup.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/AddUsersToGroupResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/ClearGroup.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/ClearGroupResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/CountItems.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/CountItemsResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/CreateGroup.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/CreateGroupResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/DeleteGroup.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/DeleteGroupResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/DeleteItem.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/DeleteItemResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/GetAttachment.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/GetAttachmentResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/GetItemVersions.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/GetItemVersionsResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/GetItems.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/GetItemsResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/ModifyCalendarEntry.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/ModifyCalendarEntryResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/ModifyTask.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/ModifyTaskResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/RemoveUsersFromGroup.pm create mode 100644 t/acceptance/wsdl/private/lib/MyElements/RemoveUsersFromGroupResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyInterfaces/RunningServiceClass/RunningServiceClassSoap.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypemaps/RunningServiceClass.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ADDITIONAL_ROLES.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/AddressesSalutations.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfAttachment.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfField.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfNUser.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfPermission.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfSerializedItem.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfString.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfString1.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ArrayOfString2.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/Attachment.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/AttachmentItemData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/AttachmentOperation.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/CalendarCreateData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/CalendarModifyData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/CommonItemData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/CountListOfSerializedItem.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/Field.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/Folders.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/GetFileResponse.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/HashMapOfStringNiceListOfAddressesSalutations.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/HstringAddressesSalutations.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ItemCreateData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ItemData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/ItemUpdateData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/KVstringNiceListOfAddressesSalutations.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/NUser.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/Permission.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/PermissionItemData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/Principal.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/PrincipalType.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/Recipients.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/SerializedItem.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/TaskModifyData.pm create mode 100644 t/acceptance/wsdl/private/lib/MyTypes/UserType.pm create mode 100644 t/lib/CodeFirst.pm create mode 100644 t/lib/MySimpleElement.pm diff --git a/Build.PL b/Build.PL index 236d22f..cc9a324 100644 --- a/Build.PL +++ b/Build.PL @@ -5,7 +5,7 @@ $build = Module::Build->new( create_makefile_pl => 'small', dist_abstract => 'SOAP with WSDL support', dist_name => 'SOAP-WSDL', - dist_version => '2.00.06', + dist_version => '2.00.07', module_name => 'SOAP::WSDL', license => 'artistic', requires => { diff --git a/Changes b/Changes index 6d80db4..5326b39 100644 --- a/Changes +++ b/Changes @@ -1,4 +1,4 @@ -Release notes for SOAP::WSDL 2.00.06 +Release notes for SOAP::WSDL 2.00.07 ------- I'm proud to present a new release of SOAP::WSDL. @@ -20,6 +20,7 @@ Features: * Efficient documentation o SOAP::WSDL::Manual guides you at getting your work done, not at the module's internals + * Examples in Perl and Java * Thorough test suite o SOAP::WSDL is heavily regression tested, with a test coverage of over 95% (excluding documentation - you wouldn't want to read @@ -36,6 +37,73 @@ Features: The following changes have been made: +2.00.07 - Feb 21 2009 + +The following features were added (the numbers in square brackets are the +tracker IDs from https://sourceforge.net/tracker/?group_id=111978&atid=660924): + + * [ 2621474 ] Add Non-Perl examples / test client / Servers + The distribution now includes a Java / Apache CXF example. + + * [ 2585274 ] Create a HTTP::Server::Simple based SOAP Server + SOAP::WSDL now ships with a server class to use with HTTP::Server::Simple + for testing purposes. See SOAP::WSDL::Server::Simple for details. + + * [ 1911232 ] Allow skipping unknown XML elements + See SOAP::WSDL::Manual::Cookbook on how to use this feature + + * [ 2505421 ] include XML attributes in as_hash_ref + ComplexTypes now include XML attributes in as_hash_ref's result under the + special key "xmlattr". + As a side effect, as_hash ref now works for ComplexType objects with a + simpleContent content model, too (though the results may be misleading: + Their value is included under the hash key "value", the only other + possible hash key is "xmlattr"). + + * [ 1960062 ] Use POSIX::strftime for date conversion + Not really a feature, but a little speedup. The Feature request is + obsoleted by resorting to good old sprintf for date formatting. + Speeds up set_value in date and dateTime Objects by around 30% for non- + XML-formatted strings. + As a side effect, dateTime now does not allow setting 0 as date. + +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/). + + * [ 2621471 ] SOAP::WSDL::Server sends fault with invalid namespace prefix + Faults now use the correct prefix. + + * [ 2560208 ] elementFormDefault always "qualified" + SOAP::WSDL now respects the elementFormDefault attribute in embedded + XML Schemas. + + * #42049: [PATCH] SOAP::WSDL uses default User-Agent + SOAP::WSDL now announces itself as "SOAP::WSDL $VERSION" instead of + "libwww/perl $VERSION" in HTTP requests. Note however, that this only + applies for wsdl2perl, SOAP::WSDL and SOAP::WSDL::Transport::HTTP. + SOAP::Transport HTTP (from the SOAP-Lite distribution) is not affected. + + * [ 2533903 ] Imported schema overwrites existing XML namespace/prefix map + Importing a schema which defined the same XML namespace prefix as the + importing schema, but with a different URI resulted in having the URI + of the associated with the prefix from the imported schema set in the + importing schema. + + * #42388 [PATCH] Disabling 'die' in Typemaps + Duplicate of [1911232] Allow skipping unknown XML elements - see added + features. + + * #42179 Problem deserializing SOAP messages that contain only a simpleType + Now the top-level element may consist of a simpleType only, too. + +The following uncategorized improvements have been made: + + * Fixed a =back error in element POD generation + * Improved test suite + * Improved documentation + * Improved TEST_COVERAGE to report coverage correctly + 2.00.06 - Dec 03 2008 The following bugs have been fixed (the numbers in square brackets are the diff --git a/MANIFEST b/MANIFEST index caa1822..0dc396c 100644 --- a/MANIFEST +++ b/MANIFEST @@ -20,6 +20,16 @@ example/genericbarcode.pl example/hello.pl example/hello_compile.pl example/hello_lite.pl +example/java/cxf/.classpath +example/java/cxf/.settings/org.eclipse.jdt.core.prefs +example/java/cxf/.settings/org.maven.ide.eclipse.prefs +example/java/cxf/11_helloworld.wsdl +example/java/cxf/jax-binding.xml +example/java/cxf/pom.xml +example/java/cxf/README +example/java/cxf/src/main/resources/cxf.xml +example/java/cxf/src/test/java/helloworld/HelloWorldTest.java +example/java/cxf/src/test/resources/test-context.xml example/lib/MyElements/CountCookies.pm example/lib/MyElements/CountCookiesResponse.pm example/lib/MyElements/GenerateBarCode.pm @@ -69,6 +79,7 @@ example/lib/MyTypes/test2.pm example/lib/MyTypes/testExtended.pm example/person.pl example/person_compile.pl +example/server/hello_simple.pl example/visitor/visitor.pl example/weather.pl example/weather_wsdl.pl @@ -77,6 +88,7 @@ example/wsdl/FortuneCookie.xml example/wsdl/genericbarcode.xml example/wsdl/globalweather.xml example/wsdl/Person.wsdl +example/wsdl/person.xml HACKING lib/SOAP/WSDL.pm lib/SOAP/WSDL/Base.pm @@ -157,9 +169,9 @@ lib/SOAP/WSDL/Generator/Template/XSD/simpleType/restriction.tt lib/SOAP/WSDL/Generator/Template/XSD/simpleType/union.tt lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt lib/SOAP/WSDL/Generator/Visitor.pm -lib/SOAP/WSDL/Generator/Visitor/Typelib.pm lib/SOAP/WSDL/Generator/Visitor/Typemap.pm lib/SOAP/WSDL/Manual.pod +lib/SOAP/WSDL/Manual/CodeFirst.pod lib/SOAP/WSDL/Manual/Cookbook.pod lib/SOAP/WSDL/Manual/Deserializer.pod lib/SOAP/WSDL/Manual/FAQ.pod @@ -178,6 +190,7 @@ lib/SOAP/WSDL/Serializer/XSD.pm lib/SOAP/WSDL/Server.pm lib/SOAP/WSDL/Server/CGI.pm lib/SOAP/WSDL/Server/Mod_Perl2.pm +lib/SOAP/WSDL/Server/Simple.pm lib/SOAP/WSDL/Service.pm lib/SOAP/WSDL/SOAP/Address.pm lib/SOAP/WSDL/SOAP/Body.pm @@ -321,6 +334,77 @@ t/acceptance/wsdl/import.xsd t/acceptance/wsdl/import_loop.xsd t/acceptance/wsdl/message_gateway.wsdl t/acceptance/wsdl/nested_complextype.wsdl +t/acceptance/wsdl/private/lib/MyElements/AddAttachment.pm +t/acceptance/wsdl/private/lib/MyElements/AddAttachmentResponse.pm +t/acceptance/wsdl/private/lib/MyElements/AddCalendarEntry.pm +t/acceptance/wsdl/private/lib/MyElements/AddCalendarEntryResponse.pm +t/acceptance/wsdl/private/lib/MyElements/AddTask.pm +t/acceptance/wsdl/private/lib/MyElements/AddTaskResponse.pm +t/acceptance/wsdl/private/lib/MyElements/AddUsersToGroup.pm +t/acceptance/wsdl/private/lib/MyElements/AddUsersToGroupResponse.pm +t/acceptance/wsdl/private/lib/MyElements/ClearGroup.pm +t/acceptance/wsdl/private/lib/MyElements/ClearGroupResponse.pm +t/acceptance/wsdl/private/lib/MyElements/CountItems.pm +t/acceptance/wsdl/private/lib/MyElements/CountItemsResponse.pm +t/acceptance/wsdl/private/lib/MyElements/CreateGroup.pm +t/acceptance/wsdl/private/lib/MyElements/CreateGroupResponse.pm +t/acceptance/wsdl/private/lib/MyElements/DeleteGroup.pm +t/acceptance/wsdl/private/lib/MyElements/DeleteGroupResponse.pm +t/acceptance/wsdl/private/lib/MyElements/DeleteItem.pm +t/acceptance/wsdl/private/lib/MyElements/DeleteItemResponse.pm +t/acceptance/wsdl/private/lib/MyElements/GetAttachment.pm +t/acceptance/wsdl/private/lib/MyElements/GetAttachmentResponse.pm +t/acceptance/wsdl/private/lib/MyElements/GetItems.pm +t/acceptance/wsdl/private/lib/MyElements/GetItemsResponse.pm +t/acceptance/wsdl/private/lib/MyElements/GetItemVersions.pm +t/acceptance/wsdl/private/lib/MyElements/GetItemVersionsResponse.pm +t/acceptance/wsdl/private/lib/MyElements/ModifyCalendarEntry.pm +t/acceptance/wsdl/private/lib/MyElements/ModifyCalendarEntryResponse.pm +t/acceptance/wsdl/private/lib/MyElements/ModifyTask.pm +t/acceptance/wsdl/private/lib/MyElements/ModifyTaskResponse.pm +t/acceptance/wsdl/private/lib/MyElements/RemoveUsersFromGroup.pm +t/acceptance/wsdl/private/lib/MyElements/RemoveUsersFromGroupResponse.pm +t/acceptance/wsdl/private/lib/MyInterfaces/RunningServiceClass/RunningServiceClassSoap.pm +t/acceptance/wsdl/private/lib/MyTypemaps/RunningServiceClass.pm +t/acceptance/wsdl/private/lib/MyTypes/ADDITIONAL_ROLES.pm +t/acceptance/wsdl/private/lib/MyTypes/AddressesSalutations.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfAttachment.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfField.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfNUser.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfPermission.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfSerializedItem.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfString.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfString1.pm +t/acceptance/wsdl/private/lib/MyTypes/ArrayOfString2.pm +t/acceptance/wsdl/private/lib/MyTypes/Attachment.pm +t/acceptance/wsdl/private/lib/MyTypes/AttachmentItemData.pm +t/acceptance/wsdl/private/lib/MyTypes/AttachmentOperation.pm +t/acceptance/wsdl/private/lib/MyTypes/CalendarCreateData.pm +t/acceptance/wsdl/private/lib/MyTypes/CalendarModifyData.pm +t/acceptance/wsdl/private/lib/MyTypes/CommonItemData.pm +t/acceptance/wsdl/private/lib/MyTypes/CountListOfSerializedItem.pm +t/acceptance/wsdl/private/lib/MyTypes/Field.pm +t/acceptance/wsdl/private/lib/MyTypes/Folders.pm +t/acceptance/wsdl/private/lib/MyTypes/GetFileResponse.pm +t/acceptance/wsdl/private/lib/MyTypes/HashMapOfStringNiceListOfAddressesSalutations.pm +t/acceptance/wsdl/private/lib/MyTypes/HstringAddressesSalutations.pm +t/acceptance/wsdl/private/lib/MyTypes/ItemCreateData.pm +t/acceptance/wsdl/private/lib/MyTypes/ItemData.pm +t/acceptance/wsdl/private/lib/MyTypes/ItemUpdateData.pm +t/acceptance/wsdl/private/lib/MyTypes/KVstringNiceListOfAddressesSalutations.pm +t/acceptance/wsdl/private/lib/MyTypes/NUser.pm +t/acceptance/wsdl/private/lib/MyTypes/Permission.pm +t/acceptance/wsdl/private/lib/MyTypes/PermissionItemData.pm +t/acceptance/wsdl/private/lib/MyTypes/Principal.pm +t/acceptance/wsdl/private/lib/MyTypes/PrincipalType.pm +t/acceptance/wsdl/private/lib/MyTypes/Recipients.pm +t/acceptance/wsdl/private/lib/MyTypes/SerializedItem.pm +t/acceptance/wsdl/private/lib/MyTypes/TaskModifyData.pm +t/acceptance/wsdl/private/lib/MyTypes/UserType.pm +t/acceptance/wsdl/private/PartnerManagement_header_def.wsdl +t/acceptance/wsdl/private/PartnerManagement_lenght_.wsdl +t/acceptance/wsdl/private/RunningService.wsdl +t/acceptance/wsdl/private/RunningService.WSDL t/acceptance/wsdl/WSDLParser-import.wsdl t/acceptance/wsdl/WSDLParser-imported.wsdl t/acceptance/wsdl/WSDLParser.wsdl @@ -330,10 +414,16 @@ t/acceptance/wsdl/WSDLParser/import_xsd_cascade.wsdl t/acceptance/wsdl/WSDLParser/imported.xsd t/acceptance/wsdl/WSDLParser/xsd_import_no_location.wsdl t/acceptance/wsdl/WSDLParser_import_loop.wsdl +t/CodeFirst/ComplexType.pm +t/CodeFirst/element.pm +t/CodeFirst/sequence.pm +t/CodeFirst/test.pl t/contributed.wsdl +t/lib/CodeFirst.pm t/lib/Mod_Perl2Test.pm t/lib/MyComplexType.pm t/lib/MyElement.pm +t/lib/MySimpleElement.pm t/lib/MySimpleType.pm t/lib/Test/SOAP/WSDL/Expat/WSDLParser.pm t/lib/Test/SOAP/WSDL/Generator/Iterator/WSDL11.pm @@ -375,6 +465,7 @@ t/SOAP/WSDL/Factory/Serializer.t t/SOAP/WSDL/Factory/Transport.t t/SOAP/WSDL/Generator/Template.t t/SOAP/WSDL/Generator/Template/XSD/Import.t +t/SOAP/WSDL/Generator/Template/XSD/Unqualified.t t/SOAP/WSDL/Generator/Visitor.t t/SOAP/WSDL/Generator/Visitor/Typemap.t t/SOAP/WSDL/Generator/XSD.t @@ -388,6 +479,7 @@ t/SOAP/WSDL/Serializer/XSD.t t/SOAP/WSDL/Server.t t/SOAP/WSDL/Server/CGI.t t/SOAP/WSDL/Server/Mod_Perl2.t +t/SOAP/WSDL/Server/Simple.t t/SOAP/WSDL/Transport/01_Test.t t/SOAP/WSDL/Transport/acceptance/test2.xml t/SOAP/WSDL/Transport/acceptance/test3.xml diff --git a/META.yml b/META.yml index f0f4889..b0dfb12 100644 --- a/META.yml +++ b/META.yml @@ -1,6 +1,6 @@ --- name: SOAP-WSDL -version: 2.00.06 +version: 2.00.07 author: - 'Martin Kutter ' abstract: SOAP with WSDL support @@ -41,220 +41,220 @@ build_requires: provides: SOAP::WSDL: file: lib/SOAP/WSDL.pm - version: 2.00.06 + version: 2.00.07 SOAP::WSDL::Base: file: lib/SOAP/WSDL/Base.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Binding: file: lib/SOAP/WSDL/Binding.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Client: file: lib/SOAP/WSDL/Client.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Client::Base: file: lib/SOAP/WSDL/Client/Base.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Definitions: file: lib/SOAP/WSDL/Definitions.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Deserializer::Hash: file: lib/SOAP/WSDL/Deserializer/Hash.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Deserializer::SOM: file: lib/SOAP/WSDL/Deserializer/SOM.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Deserializer::XSD: file: lib/SOAP/WSDL/Deserializer/XSD.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Expat::Base: file: lib/SOAP/WSDL/Expat/Base.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Expat::Message2Hash: file: lib/SOAP/WSDL/Expat/Message2Hash.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Expat::MessageParser: file: lib/SOAP/WSDL/Expat/MessageParser.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Expat::MessageStreamParser: file: lib/SOAP/WSDL/Expat/MessageStreamParser.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Expat::WSDLParser: file: lib/SOAP/WSDL/Expat/WSDLParser.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Factory::Deserializer: file: lib/SOAP/WSDL/Factory/Deserializer.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Factory::Generator: file: lib/SOAP/WSDL/Factory/Generator.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Factory::Serializer: file: lib/SOAP/WSDL/Factory/Serializer.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Factory::Transport: file: lib/SOAP/WSDL/Factory/Transport.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::Iterator::WSDL11: file: lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::PrefixResolver: file: lib/SOAP/WSDL/Generator/PrefixResolver.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::Template: file: lib/SOAP/WSDL/Generator/Template.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::Template::Plugin::XSD: file: lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::Template::XSD: file: lib/SOAP/WSDL/Generator/Template/XSD.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::Visitor: file: lib/SOAP/WSDL/Generator/Visitor.pm - version: 2.00.05 - SOAP::WSDL::Generator::Visitor::Typelib: - file: lib/SOAP/WSDL/Generator/Visitor/Typelib.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Generator::Visitor::Typemap: file: lib/SOAP/WSDL/Generator/Visitor/Typemap.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Message: file: lib/SOAP/WSDL/Message.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::OpMessage: file: lib/SOAP/WSDL/OpMessage.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Operation: file: lib/SOAP/WSDL/Operation.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Part: file: lib/SOAP/WSDL/Part.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Port: file: lib/SOAP/WSDL/Port.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::PortType: file: lib/SOAP/WSDL/PortType.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::SOAP::Address: file: lib/SOAP/WSDL/SOAP/Address.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::SOAP::Body: file: lib/SOAP/WSDL/SOAP/Body.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::SOAP::Header: file: lib/SOAP/WSDL/SOAP/Header.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::SOAP::HeaderFault: file: lib/SOAP/WSDL/SOAP/HeaderFault.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::SOAP::Operation: file: lib/SOAP/WSDL/SOAP/Operation.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::SOAP::Typelib::Fault11: file: lib/SOAP/WSDL/SOAP/Typelib/Fault11.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Serializer::XSD: file: lib/SOAP/WSDL/Serializer/XSD.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Server: file: lib/SOAP/WSDL/Server.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Server::CGI: file: lib/SOAP/WSDL/Server/CGI.pm - version: 2.00.06 + version: 2.00.07 SOAP::WSDL::Server::Mod_Perl2: file: lib/SOAP/WSDL/Server/Mod_Perl2.pm - version: 2.00.05 + version: 2.00.07 + SOAP::WSDL::Server::Simple: + file: lib/SOAP/WSDL/Server/Simple.pm + version: 2.00.07 SOAP::WSDL::Service: file: lib/SOAP/WSDL/Service.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Transport::HTTP: file: lib/SOAP/WSDL/Transport/HTTP.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Transport::Loopback: file: lib/SOAP/WSDL/Transport/Loopback.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Transport::Test: file: lib/SOAP/WSDL/Transport/Test.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::TypeLookup: file: lib/SOAP/WSDL/TypeLookup.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::Types: file: lib/SOAP/WSDL/Types.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Annotation: file: lib/SOAP/WSDL/XSD/Annotation.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Attribute: file: lib/SOAP/WSDL/XSD/Attribute.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::AttributeGroup: file: lib/SOAP/WSDL/XSD/AttributeGroup.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Builtin: file: lib/SOAP/WSDL/XSD/Builtin.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::ComplexType: file: lib/SOAP/WSDL/XSD/ComplexType.pm - version: 2.00.06 + version: 2.00.07 SOAP::WSDL::XSD::Element: file: lib/SOAP/WSDL/XSD/Element.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Enumeration: file: lib/SOAP/WSDL/XSD/Enumeration.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::FractionDigits: file: lib/SOAP/WSDL/XSD/FractionDigits.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Group: file: lib/SOAP/WSDL/XSD/Group.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Length: file: lib/SOAP/WSDL/XSD/Length.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::MaxExclusive: file: lib/SOAP/WSDL/XSD/MaxExclusive.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::MaxInclusive: file: lib/SOAP/WSDL/XSD/MaxInclusive.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::MaxLength: file: lib/SOAP/WSDL/XSD/MaxLength.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::MinExclusive: file: lib/SOAP/WSDL/XSD/MinExclusive.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::MinInclusive: file: lib/SOAP/WSDL/XSD/MinInclusive.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::MinLength: file: lib/SOAP/WSDL/XSD/MinLength.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Pattern: file: lib/SOAP/WSDL/XSD/Pattern.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Schema: file: lib/SOAP/WSDL/XSD/Schema.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Schema::Builtin: file: lib/SOAP/WSDL/XSD/Schema/Builtin.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::SimpleType: file: lib/SOAP/WSDL/XSD/SimpleType.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::TotalDigits: file: lib/SOAP/WSDL/XSD/TotalDigits.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Attribute: file: lib/SOAP/WSDL/XSD/Typelib/Attribute.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::AttributeSet: file: lib/SOAP/WSDL/XSD/Typelib/AttributeSet.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Builtin: file: lib/SOAP/WSDL/XSD/Typelib/Builtin.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Builtin::ENTITY: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/ENTITY.pm SOAP::WSDL::XSD::Typelib::Builtin::ID: @@ -279,14 +279,14 @@ provides: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anySimpleType.pm SOAP::WSDL::XSD::Typelib::Builtin::anyType: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyType.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Builtin::anyURI: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/anyURI.pm SOAP::WSDL::XSD::Typelib::Builtin::base64Binary: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/base64Binary.pm SOAP::WSDL::XSD::Typelib::Builtin::boolean: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/boolean.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Builtin::byte: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/byte.pm SOAP::WSDL::XSD::Typelib::Builtin::date: @@ -339,7 +339,7 @@ provides: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/string.pm SOAP::WSDL::XSD::Typelib::Builtin::time: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/time.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Builtin::token: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/token.pm SOAP::WSDL::XSD::Typelib::Builtin::unsignedByte: @@ -352,20 +352,20 @@ provides: file: lib/SOAP/WSDL/XSD/Typelib/Builtin/unsignedShort.pm SOAP::WSDL::XSD::Typelib::ComplexType: file: lib/SOAP/WSDL/XSD/Typelib/ComplexType.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::Element: file: lib/SOAP/WSDL/XSD/Typelib/Element.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::SimpleType: file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::Typelib::SimpleType::restriction: file: lib/SOAP/WSDL/XSD/Typelib/SimpleType.pm - version: 2.00.05 + version: 2.00.07 SOAP::WSDL::XSD::WhiteSpace: file: lib/SOAP/WSDL/XSD/WhiteSpace.pm - version: 2.00.05 -generated_by: Module::Build version 0.3 + version: 2.00.07 +generated_by: Module::Build version 0.280801 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.2.html version: 1.2 diff --git a/Makefile.PL b/Makefile.PL index 74907f3..5db0001 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,4 +1,4 @@ -# Note: this file was auto-generated by Module::Build::Compat version 0.30 +# Note: this file was auto-generated by Module::Build::Compat version 0.2808_01 require 5.8.0; use Module::Build::Compat 0.02; diff --git a/TEST_COVERAGE b/TEST_COVERAGE index 5c7f6c0..800dc5e 100644 --- a/TEST_COVERAGE +++ b/TEST_COVERAGE @@ -6,18 +6,20 @@ # Note that this shell script requires Devel::CoverX::Covered - if you # don't have it, comment out the line noted below # - -perl -Ilib -It/lib -MTAP::Harness -MFile::Find::Rule -e ' +perl Build.PL && perl Build && \ +perl -MTAP::Harness -MFile::Find::Rule -e ' local $ENV{TEST_VERBOSE} = 1; TAP::Harness->new({ merge => 1, - lib => [ q{t/lib}, q{lib} ], - switches => [ q{-MDevel::Cover=-ignore,.,-select,^lib/.+,-coverage,statement,-coverage,subroutine,-coverage,condition,-coverage,branch} ], + lib => [ q{t/lib}, q{blib/lib} ], + switches => [ q{-MDevel::Cover=-ignore,.,-select,^blib/lib/.+,-coverage,statement,-coverage,subroutine,-coverage,condition,-coverage,branch} ], })->runtests( sort { $a cmp $b } File::Find::Rule->file()->name( q{*.t} )->in( q{t/} ) ); ' # Devel::CoverX::Covered # covered runs -cover -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch" +cover + +# cover -coverage="statement" -coverage=condition -coverage=subroutine -coverage="branch" diff --git a/benchmark/XSD/strftime.pl b/benchmark/XSD/strftime.pl index ab9b621..28e3c90 100644 --- a/benchmark/XSD/strftime.pl +++ b/benchmark/XSD/strftime.pl @@ -1,9 +1,20 @@ -use Benchmark qw(cmpthese); +use Benchmark qw(cmpthese timethis timethese); use POSIX (); use Date::Format (); my @time_from = localtime; +#use lib '../../lib'; + +use SOAP::WSDL::XSD::Typelib::Builtin::dateTime; + +my $date = SOAP::WSDL::XSD::Typelib::Builtin::dateTime->new(); +timethese 10000, { + 'sprintf' => sub { $date->set_value('Dec 24 2004 CET'); } +}; + +__END__ + print "Comparing POSIX::strftime and Date::Format::strftime '%Y-%m-%dT%H:%M:%S%z'\n\n"; print 'POSIX: ', POSIX::strftime('%Y-%m-%dT%H:%M:%S%z', @time_from), "\n"; print 'Date::Format: ', Date::Format::strftime('%Y-%m-%dT%H:%M:%S%z', @time_from), "\n"; diff --git a/benchmark/hello.pl b/benchmark/hello.pl index 8117be6..1636bb6 100644 --- a/benchmark/hello.pl +++ b/benchmark/hello.pl @@ -8,18 +8,19 @@ use lib '/home/martin/workspace/SOAP-WSDL_XS/blib/lib'; use lib '/home/martin/workspace/SOAP-WSDL_XS/blib/arch'; use Data::Dumper; use SOAP::Lite; +use XML::Compile::SOAP11; use XML::Compile::WSDL11; use XML::Compile::Transport::SOAPHTTP; use MyInterfaces::HelloWorld::HelloWorldSoap; -use SOAP::WSDL::Deserializer::XSD_XS; +#use SOAP::WSDL::Deserializer::XSD_XS; use Benchmark qw(cmpthese timethese); use SOAP::WSDL::Transport::HTTP; use SOAP::WSDL::Factory::Transport; SOAP::WSDL::Factory::Transport->register('http', 'SOAP::WSDL::Transport::HTTP'); -#my $proxy = 'http://localhost:81/soap-wsdl-test/helloworld.pl'; -my $proxy = 'http://localhost:81/soap-wsdl-test/helloworld'; +my $proxy = 'http://localhost:81/soap-wsdl-test/helloworld.pl'; +#my $proxy = 'http://localhost:81/soap-wsdl-test/helloworld'; my $lite = SOAP::Lite->new( proxy => $proxy @@ -35,7 +36,7 @@ my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new({ my $soap_xs = MyInterfaces::HelloWorld::HelloWorldSoap->new({ proxy => $proxy, }); -$soap_xs->set_deserializer( SOAP::WSDL::Deserializer::XSD_XS->new() ); +#$soap_xs->set_deserializer( SOAP::WSDL::Deserializer::XSD_XS->new() ); my @result = ();; @@ -81,11 +82,11 @@ sub lite_bench { compile_bench(); lite_bench(); wsdl_bench(); -wsdl_xs_bench(); +#wsdl_xs_bench(); timethese 150, { 'SOAP::WSDL' => \&wsdl_bench, - 'SOAP::WSDL_XS' => \&wsdl_xs_bench, +# 'SOAP::WSDL_XS' => \&wsdl_xs_bench, 'XML::Compile' => \&compile_bench, 'SOAP::Lite' => \&lite_bench, }; diff --git a/benchmark/person.pl b/benchmark/person.pl index 38d87d8..9a3e684 100644 --- a/benchmark/person.pl +++ b/benchmark/person.pl @@ -8,6 +8,7 @@ use strict; use Benchmark qw(cmpthese); +use XML::Compile::SOAP11; use XML::Compile::Transport::SOAPHTTP(); use XML::Compile::Util; use XML::Compile::WSDL11; @@ -16,7 +17,7 @@ use XML::Simple; use SOAP::Lite; use MyInterfaces::TestService::TestPort; -use SOAP::WSDL::Deserializer::XSD_XS; +#use SOAP::WSDL::Deserializer::XSD_XS; use SOAP::WSDL::Factory::Deserializer; # @@ -112,8 +113,8 @@ $lite_xml->outputxml(1); $lite_xml->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(); +#SOAP::WSDL::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' ); +#my $wsdl_xs = MyInterfaces::TestService::TestPort->new(); my $count = 70; my @data = (); @@ -138,7 +139,7 @@ $n++; cmpthese $count, { 'SOAP::Lite' => sub { my $som = $lite->call('ListPerson') }, 'SOAP::WSDL' => sub { my $result = $soap->ListPerson({}) }, - 'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) }, +# 'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({}) }, 'XML::Compile' => sub { my $result = $call->() }, 'XML::Simple' => sub { my $result = XMLin( $lite_xml->call('ListPerson')) }, }; @@ -148,27 +149,27 @@ $n++; cmpthese $count, { 'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') }, 'SOAP::WSDL' => sub { push @data, $soap->ListPerson({}) }, - 'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) }, +# 'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) }, 'XML::Compile' => sub { push @data, $call->() }, 'XML::Simple' => sub { push @data, XMLin( $lite_xml->call('ListPerson')) }, }; @data = (); -print "\nBenchmark $n: Play it again, Sam\n"; +print "\nBenchmark $n: Play it, please play it again, Sam\n"; $n++; cmpthese $count, { '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, $lite->call('ListPerson') }, +# 'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({}) }, +# 'XML::Compile' => sub { push @data, $call->() }, +# 'SOAP::Lite' => sub { push @data, $lite->call('ListPerson') }, }; print "\nBenchmark $n: ca. 1kB request - result destroyed immediately\n"; $n++; cmpthese $count, { 'SOAP::WSDL' => sub { my $result = $soap->ListPerson({ in => $person }) }, - 'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({ in => $person }) }, +# 'SOAP::WSDL_XS' => sub { my $result = $wsdl_xs->ListPerson({ in => $person }) }, 'XML::Compile' => sub { my $result = $call->({ in => $person }) }, }; @@ -176,7 +177,7 @@ print "\nBenchmark $n: ca. 1kB request - push result on list\n"; $n++; cmpthese $count, { 'SOAP::WSDL' => sub { push @data, $soap->ListPerson({ in => $person }) }, - 'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({ in => $person }) }, +# 'SOAP::WSDL_XS' => sub { push @data, $wsdl_xs->ListPerson({ in => $person }) }, 'XML::Compile' => sub { push @data, $call->({ in => $person }) }, }; diff --git a/bin/wsdl2perl.pl b/bin/wsdl2perl.pl index f6db18f..b2e1de1 100644 --- a/bin/wsdl2perl.pl +++ b/bin/wsdl2perl.pl @@ -86,6 +86,7 @@ my $lwp = LWP::UserAgent->new( : () ); $lwp->env_proxy(); # get proxy from environment. Works for both http & https. +$lwp->agent(qq[SOAP::WSDL $SOAP::WSDL::Expat::WSDLParser::VERSION]); my $parser = SOAP::WSDL::Expat::WSDLParser->new({ user_agent => $lwp, @@ -165,7 +166,7 @@ wsdl2perl.pl - create perl bindings for SOAP webservices. NAME SHORT DESCRITPION ---------------------------------------------------------------------------- prefix p Prefix for all generated classes. If you set "-p=Foo", - you will get "FooAttributes", "FooTypes", + you will get "FooAttributes", "FooTypes", "FooElements" and so on. attribute_prefix a Prefix for XML attribute classes. Default: MyAttributes diff --git a/example/hello.pl b/example/hello.pl index 1fbdf07..847d019 100644 --- a/example/hello.pl +++ b/example/hello.pl @@ -7,7 +7,9 @@ use lib 'lib'; # just needed because interface lies here use MyInterfaces::HelloWorld::HelloWorldSoap; # I instantiate a interface class. -my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new(); +my $soap = MyInterfaces::HelloWorld::HelloWorldSoap->new({ +# proxy => 'http://localhost:8080/JLearn/WS/sayHello' +}); # I have to lookup the method and synopsis from the interface's pod my $result = $soap->sayHello({ diff --git a/example/hello_compile.pl b/example/hello_compile.pl index 349a4d3..e34eb90 100644 --- a/example/hello_compile.pl +++ b/example/hello_compile.pl @@ -1,18 +1,21 @@ #!/usr/bin/perl -w use strict; use warnings; +use XML::Compile::SOAP11; use XML::Compile::WSDL11; use XML::Compile::Transport::SOAPHTTP; -# I need access to the WSDL around - or use Data::Dumper::Streamer +# I need access to the WSDL around - or use Data::Dumper::Streamer # for serializing the generated closures into (big) perl files my $wsdl = XML::Compile::WSDL11->new('wsdl/11_helloworld.wsdl'); # I compile a interface method for a single SOAP method from the WSDL # I have to lookup the method names from the WSDL +# or use the provided script examining the WSDL my $call = $wsdl->compileClient('sayHello'); # I have to lookup the parameters from the WSDL - can be quite tricky +# XML::Compile provides a script creating examples, so I can use that, too. my $result = $call->( name => $ARGV[1] || '"Your name"', givenName => $ARGV[0] || '"Your given name"', @@ -22,4 +25,5 @@ my $result = $call->( die "Error calling soap method" if not defined $result; # I have to lookup the output parameters from the WSDL - or try Data::Dumper +# XML::Compile provides a script creating examples, so I can use that, too. print $result->{ parameters }->{ sayHelloResult }, "\n"; diff --git a/example/hello_lite.pl b/example/hello_lite.pl index cb1d992..d184888 100644 --- a/example/hello_lite.pl +++ b/example/hello_lite.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w #use strict; use warnings; -use SOAP::Lite +trace; +use SOAP::Lite; # +trace; # I have to lookup the URL from the WSDL my $soap = SOAP::Lite->new( diff --git a/example/java/cxf/.classpath b/example/java/cxf/.classpath new file mode 100644 index 0000000..a0f638d --- /dev/null +++ b/example/java/cxf/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/example/java/cxf/.settings/org.eclipse.jdt.core.prefs b/example/java/cxf/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..501392d --- /dev/null +++ b/example/java/cxf/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Fri Feb 20 19:27:55 CET 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/example/java/cxf/.settings/org.maven.ide.eclipse.prefs b/example/java/cxf/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 0000000..a6cbeab --- /dev/null +++ b/example/java/cxf/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,8 @@ +#Fri Feb 20 19:27:52 CET 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +version=1 diff --git a/example/java/cxf/11_helloworld.wsdl b/example/java/cxf/11_helloworld.wsdl new file mode 100644 index 0000000..6a170e9 --- /dev/null +++ b/example/java/cxf/11_helloworld.wsdl @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/java/cxf/README b/example/java/cxf/README new file mode 100644 index 0000000..cc0521d --- /dev/null +++ b/example/java/cxf/README @@ -0,0 +1,22 @@ +README +------ + +This is an example for creating a Apache CXF based client for a SOAP::WSDL +based SOAP server. + +The example contains a pom.xml for building CXF based SOAP Clients from +a WSDL, a test Spring context configuration, and a JUnit4 test class for +testing the generated client. + +It is intended to run against the HTTP::Server::Simple based SOAP server +in example/server/hello_simple.pl + +To run the example, fire up the test server by calling + + perl example/server/hello_simple.pl + +Then open a second terminal and run + + mvn test + +The included JUnit test should pass. \ No newline at end of file diff --git a/example/java/cxf/jax-binding.xml b/example/java/cxf/jax-binding.xml new file mode 100644 index 0000000..7fd9747 --- /dev/null +++ b/example/java/cxf/jax-binding.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/example/java/cxf/pom.xml b/example/java/cxf/pom.xml new file mode 100644 index 0000000..18eadb4 --- /dev/null +++ b/example/java/cxf/pom.xml @@ -0,0 +1,181 @@ + + + 4.0.0 + perl.soap.wsdl + cxf-test + 1.0.0 + + 2.1.4 + + + + + org.apache.cxf + cxf-rt-frontend-jaxws + ${cxf.version} + + + spring-core + org.springframework + + + spring-beans + org.springframework + + + spring-context + org.springframework + + + + + org.apache.cxf + cxf-rt-transports-http + ${cxf.version} + + + spring-core + org.springframework + + + spring-beans + org.springframework + + + spring-context + org.springframework + + + spring-web + org.springframework + + + + + junit + junit + 4.4 + test + + + org.springframework + org.springframework.core + 2.5.6.A + + + org.springframework + org.springframework.beans + 2.5.6.A + + + org.springframework + org.springframework.test + 2.5.6.A + test + + + org.springframework + org.springframework.context + 2.5.6.A + + + org.springframework + org.springframework.web + 2.5.6.A + + + org.apache.cxf + cxf-rt-transports-http-jetty + ${cxf.version} + + + + + + maven-compiler-plugin + + 1.5 + 1.5 + + + + maven-compiler-plugin + + 1.5 + 1.5 + + + + org.apache.cxf + cxf-codegen-plugin + 2.0.9 + + + generate-sources + generate-sources + + ${basedir}/src/main/java + + + ${basedir}/11_helloworld.wsdl + + -b + ${basedir}/jax-binding.xml + + + + + + wsdl2java + + + + + + + + \ No newline at end of file diff --git a/example/java/cxf/src/main/resources/cxf.xml b/example/java/cxf/src/main/resources/cxf.xml new file mode 100644 index 0000000..816c2db --- /dev/null +++ b/example/java/cxf/src/main/resources/cxf.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/example/java/cxf/src/test/java/helloworld/HelloWorldTest.java b/example/java/cxf/src/test/java/helloworld/HelloWorldTest.java new file mode 100644 index 0000000..a604281 --- /dev/null +++ b/example/java/cxf/src/test/java/helloworld/HelloWorldTest.java @@ -0,0 +1,23 @@ +package helloworld; +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "classpath:test-context.xml"}) + +public class HelloWorldTest { + @Autowired + private Service1Soap soapClient; + + @Test + public void testClient() { + assertNotNull(soapClient); + String result = soapClient.sayHello("Kutter", "Martin"); + assertEquals("Hello Martin Kutter", result); + } +} diff --git a/example/java/cxf/src/test/resources/test-context.xml b/example/java/cxf/src/test/resources/test-context.xml new file mode 100644 index 0000000..007c6de --- /dev/null +++ b/example/java/cxf/src/test/resources/test-context.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/example/lib/MyElements/GenerateBarCode.pm b/example/lib/MyElements/GenerateBarCode.pm index fe94f95..e02364e 100644 --- a/example/lib/MyElements/GenerateBarCode.pm +++ b/example/lib/MyElements/GenerateBarCode.pm @@ -43,12 +43,6 @@ __PACKAGE__->_factory( } # end BLOCK - - - - - - } # end of BLOCK 1; diff --git a/example/person_compile.pl b/example/person_compile.pl index df9f63b..00e26e3 100644 --- a/example/person_compile.pl +++ b/example/person_compile.pl @@ -1,6 +1,7 @@ #!/usr/bin/perl -w use strict; use warnings; +use XML::Compile::SOAP11; use XML::Compile::WSDL11; use XML::Compile::Transport::SOAPHTTP; diff --git a/example/server/hello_simple.pl b/example/server/hello_simple.pl new file mode 100644 index 0000000..4a94337 --- /dev/null +++ b/example/server/hello_simple.pl @@ -0,0 +1,29 @@ +use lib '../../lib'; +use lib '../lib'; +use SOAP::WSDL::Server::Simple; + +use base qw(HTTP::Server::Simple::CGI); + +use MyServer::HelloWorld::HelloWorldSoap; + +sub handle_request { + my ($self, $cgi) = @_; + my $server = MyServer::HelloWorld::HelloWorldSoap->new({ + dispatch_to => 'main', + transport_class => 'SOAP::WSDL::Server::Simple', + }); + $server->handle($cgi); + } + + my $httpd = __PACKAGE__->new(8081); + $httpd->run(); + +sub sayHello { + my ($self, $body, $header) = @_; + my $name = $body->get_name(); + my $givenName = $body->get_givenName(); + + return MyElements::sayHelloResponse->new({ + sayHelloResult => "Hello $givenName $name" + }) +} \ No newline at end of file diff --git a/example/wsdl/Person.wsdl b/example/wsdl/Person.wsdl index 26770b5..0713e34 100644 --- a/example/wsdl/Person.wsdl +++ b/example/wsdl/Person.wsdl @@ -7,7 +7,8 @@ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> + targetNamespace="http://www.example.org/benchmark/" + elementFormDefault="qualified"> diff --git a/example/wsdl/person.xml b/example/wsdl/person.xml new file mode 100644 index 0000000..c7ab124 --- /dev/null +++ b/example/wsdl/person.xml @@ -0,0 +1,440 @@ + + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + 1 + + Salutation0 + Name0 + Martin + 1970-01-01 + + Street 0 + 00000 + City0 + Country0 + ++499131123456 + ++49150123456 + + + Somestreet 23 + 12345 + SomeCity + Germany + ++499131123456 + ++49150123456 + + + + 100000 + SomeContract0 + + + 100001 + SomeContract1 + + + 100002 + SomeContract2 + + + 100003 + SomeContract3 + + + + + + + + diff --git a/lib/SOAP/WSDL.pm b/lib/SOAP/WSDL.pm index f94f88e..5332ade 100644 --- a/lib/SOAP/WSDL.pm +++ b/lib/SOAP/WSDL.pm @@ -14,7 +14,7 @@ use Class::Std::Fast constructor => 'none'; use SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType; use LWP::UserAgent; -use version; our $VERSION = qv('2.00.06'); +use version; our $VERSION = qv('2.00.07'); my %no_dispatch_of :ATTR(:name); my %wsdl_of :ATTR(:name); @@ -125,6 +125,7 @@ sub wsdlinit { ? (keep_alive => 1) : () ); + $lwp->agent(qq[SOAP::WSDL $VERSION]); my $response = $lwp->get( $wsdl_of{ $ident } ); croak $response->message() if ($response->code != 200); @@ -830,9 +831,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 755 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: WSDL.pm 755 2008-12-03 21:36:54Z kutterma $ + $Id: WSDL.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL.pm $ =cut diff --git a/lib/SOAP/WSDL/Base.pm b/lib/SOAP/WSDL/Base.pm index 0da82eb..b92a9c0 100644 --- a/lib/SOAP/WSDL/Base.pm +++ b/lib/SOAP/WSDL/Base.pm @@ -5,7 +5,7 @@ use List::Util; use Scalar::Util; use Carp qw(croak carp confess); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %id_of :ATTR(:name :default<()>); my %lang_of :ATTR(:name :default<()>); @@ -13,7 +13,7 @@ my %name_of :ATTR(:name :default<()>); my %namespace_of :ATTR(:name :default<()>); my %documentation_of :ATTR(:name :default<()>); my %annotation_of :ATTR(:name :default<()>); -my %targetNamespace_of :ATTR(:name :default<()>); +my %targetNamespace_of :ATTR(:name :default<"">); my %xmlns_of :ATTR(:name :default<{}>); my %parent_of :ATTR(:get :default<()>); @@ -167,6 +167,13 @@ sub expand { sub _expand; *_expand = \&expand; +sub schema { + my $parent = $_[0]->get_parent(); + return if ! defined $parent; + return $parent if $parent->isa('SOAP::WSDL::XSD::Schema'); + return $parent->schema(); +} + 1; __END__ diff --git a/lib/SOAP/WSDL/Binding.pm b/lib/SOAP/WSDL/Binding.pm index 71f7cfe..072d78f 100644 --- a/lib/SOAP/WSDL/Binding.pm +++ b/lib/SOAP/WSDL/Binding.pm @@ -5,7 +5,7 @@ use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %operation_of :ATTR(:name :default<()>); my %type_of :ATTR(:name :default<()>); diff --git a/lib/SOAP/WSDL/Client.pm b/lib/SOAP/WSDL/Client.pm index 967bc16..a48ce30 100644 --- a/lib/SOAP/WSDL/Client.pm +++ b/lib/SOAP/WSDL/Client.pm @@ -11,7 +11,7 @@ use SOAP::WSDL::Factory::Serializer; use SOAP::WSDL::Factory::Transport; use SOAP::WSDL::Expat::MessageParser; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %class_resolver_of :ATTR(:name :default<()>); my %no_dispatch_of :ATTR(:name :default<()>); @@ -24,8 +24,10 @@ my %soap_version_of :ATTR(:get :init_attr :de my %on_action_of :ATTR(:name :default<()>); my %content_type_of :ATTR(:name :default); #/#trick editors +my %encoding_of :ATTR(:name :default); my %serializer_of :ATTR(:name :default<()>); my %deserializer_of :ATTR(:name :default<()>); +my %deserializer_args_of :ATTR(:name :default<{}>); sub BUILD { my ($self, $ident, $attrs_of_ref) = @_; @@ -147,6 +149,7 @@ sub call { my $response = $transport->send_receive( endpoint => $self->get_endpoint(), content_type => $content_type_of{ $ident }, + encoding => $encoding_of{ $ident }, envelope => $envelope, action => $soap_action, # on_receive_chunk => sub {} # optional, may be used for parsing large responses as they arrive. @@ -155,8 +158,10 @@ sub call { return $response if ($outputxml_of{ $ident } ); # get deserializer + use Data::Dumper; $deserializer_of{ $ident } ||= SOAP::WSDL::Factory::Deserializer->get_deserializer({ soap_version => $soap_version_of{ $ident }, + %{ $deserializer_args_of{ $ident } }, }); # set class resolver if serializer supports it @@ -395,9 +400,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 744 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: Client.pm 744 2008-10-15 16:58:45Z kutterma $ + $Id: Client.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client.pm $ =cut diff --git a/lib/SOAP/WSDL/Client/Base.pm b/lib/SOAP/WSDL/Client/Base.pm index bcab2d0..499e4e0 100644 --- a/lib/SOAP/WSDL/Client/Base.pm +++ b/lib/SOAP/WSDL/Client/Base.pm @@ -4,7 +4,7 @@ use warnings; use base 'SOAP::WSDL::Client'; use Scalar::Util qw(blessed); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); sub call { my ($self, $method, $body, $header) = @_; @@ -85,9 +85,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: Base.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: Base.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Client/Base.pm $ =cut diff --git a/lib/SOAP/WSDL/Definitions.pm b/lib/SOAP/WSDL/Definitions.pm index 21d86d2..9492c11 100644 --- a/lib/SOAP/WSDL/Definitions.pm +++ b/lib/SOAP/WSDL/Definitions.pm @@ -5,7 +5,7 @@ use List::Util qw(first); use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %types_of :ATTR(:name :default<[]>); my %message_of :ATTR(:name :default<[]>); @@ -115,9 +115,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: Definitions.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: Definitions.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Definitions.pm $ =cut diff --git a/lib/SOAP/WSDL/Deserializer/Hash.pm b/lib/SOAP/WSDL/Deserializer/Hash.pm index ad71749..541e7b7 100644 --- a/lib/SOAP/WSDL/Deserializer/Hash.pm +++ b/lib/SOAP/WSDL/Deserializer/Hash.pm @@ -8,7 +8,7 @@ use SOAP::WSDL::Expat::Message2Hash; use SOAP::WSDL::Factory::Deserializer; SOAP::WSDL::Factory::Deserializer->register( '1.1', __PACKAGE__ ); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); sub BUILD { my ($self, $ident, $args_of_ref) = @_; @@ -163,9 +163,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: Hash.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: Hash.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/Hash.pm $ =cut diff --git a/lib/SOAP/WSDL/Deserializer/SOM.pm b/lib/SOAP/WSDL/Deserializer/SOM.pm index eb02fa4..0528891 100644 --- a/lib/SOAP/WSDL/Deserializer/SOM.pm +++ b/lib/SOAP/WSDL/Deserializer/SOM.pm @@ -2,7 +2,7 @@ package SOAP::WSDL::Deserializer::SOM; use strict; use warnings; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); our @ISA; eval { @@ -140,9 +140,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: SOM.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: SOM.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/SOM.pm $ =cut diff --git a/lib/SOAP/WSDL/Deserializer/XSD.pm b/lib/SOAP/WSDL/Deserializer/XSD.pm index 447992d..740081c 100644 --- a/lib/SOAP/WSDL/Deserializer/XSD.pm +++ b/lib/SOAP/WSDL/Deserializer/XSD.pm @@ -5,25 +5,34 @@ use Class::Std::Fast::Storable; use SOAP::WSDL::SOAP::Typelib::Fault11; use SOAP::WSDL::Expat::MessageParser; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); -my %class_resolver_of :ATTR(:name :default<()>); +my %class_resolver_of :ATTR(:name :default<()>); +my %strict_of :ATTR(:get :init_arg :default<1>); +my %parser_of :ATTR(); -my %parser_of :ATTR(); +sub set_strict { + undef $parser_of{${$_[0]}}; + $strict_of{${$_[0]}} = $_[1]; +} sub BUILD { my ($self, $ident, $args_of_ref) = @_; # ignore all options except 'class_resolver' for (keys %{ $args_of_ref }) { - delete $args_of_ref->{ $_ } if $_ ne 'class_resolver'; + next if $_ eq 'strict'; + next if $_ eq 'class_resolver'; + delete $args_of_ref->{ $_ }; } } sub deserialize { my ($self, $content) = @_; - $parser_of{ ${ $self } } = SOAP::WSDL::Expat::MessageParser->new() + $parser_of{ ${ $self } } = SOAP::WSDL::Expat::MessageParser->new({ + strict => $strict_of{ ${ $self } } + }) if not $parser_of{ ${ $self } }; $parser_of{ ${ $self } }->class_resolver( $class_resolver_of{ ${ $self } } ); eval { $parser_of{ ${ $self } }->parse_string( $content ) }; @@ -75,6 +84,20 @@ SOAP::WSDL. If you want to use the XSD serializer from SOAP::WSDL, set the outputtree() property and provide a class_resolver. +=head1 OPTIONS + +=over + +=item * strict + +Enables/disables strict XML processing. Strict processing is enabled by +default. To disable strict XML processing pass the following to the +constructor or use the C method: + + strict => 0 + +=back + =head1 METHODS =head2 deserialize @@ -86,6 +109,10 @@ Deserializes the message. Generates a L object and returns it. +=head2 set_strict + +Enable/disable strict XML parsing. Default is enabled. + =head1 LICENSE AND COPYRIGHT Copyright 2004-2007 Martin Kutter. @@ -99,9 +126,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: XSD.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: XSD.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $ =cut diff --git a/lib/SOAP/WSDL/Expat/Base.pm b/lib/SOAP/WSDL/Expat/Base.pm index 703364e..5bd43c6 100644 --- a/lib/SOAP/WSDL/Expat/Base.pm +++ b/lib/SOAP/WSDL/Expat/Base.pm @@ -6,7 +6,7 @@ use XML::Parser::Expat; # TODO: convert to Class::Std::Fast based class - hash based classes suck. -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); sub new { my ($class, $arg_ref) = @_; diff --git a/lib/SOAP/WSDL/Expat/Message2Hash.pm b/lib/SOAP/WSDL/Expat/Message2Hash.pm index e8ef7dd..21a6b81 100644 --- a/lib/SOAP/WSDL/Expat/Message2Hash.pm +++ b/lib/SOAP/WSDL/Expat/Message2Hash.pm @@ -4,7 +4,7 @@ use strict; use warnings; use base qw(SOAP::WSDL::Expat::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); sub _initialize { my ($self, $parser) = @_; diff --git a/lib/SOAP/WSDL/Expat/MessageParser.pm b/lib/SOAP/WSDL/Expat/MessageParser.pm index 1928a5e..dcee486 100644 --- a/lib/SOAP/WSDL/Expat/MessageParser.pm +++ b/lib/SOAP/WSDL/Expat/MessageParser.pm @@ -9,7 +9,7 @@ use base qw(SOAP::WSDL::Expat::Base); BEGIN { require Class::Std::Fast }; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); # GLOBALS my $OBJECT_CACHE_REF = Class::Std::Fast::OBJECT_CACHE_REF(); @@ -108,7 +108,10 @@ sub _initialize { return; } ) - : (); + : ( + 0 => sub { $depth++ }, + 1 => sub { $depth++ }, + ); # use "globals" for speed my ($_prefix, $_method, $_class, $_leaf) = (); @@ -137,11 +140,14 @@ sub _initialize { return if $skip; # skip inside __SKIP__ # resolve class of this element - $_class = $self->{ class_resolver }->get_class( $path ) - or die "Cannot resolve class for " - . join('/', @{ $path }) . " via " . $self->{ class_resolver }; + $_class = $self->{ class_resolver }->get_class( $path ); - if ($_class eq '__SKIP__') { + if (! defined($_class) and $self->{ strict }) { + die "Cannot resolve class for " + . join('/', @{ $path }) . " via " . $self->{ class_resolver }; + } + + if (! defined($_class) or ($_class eq '__SKIP__') ) { $skip = join('/', @{ $path }); $_[0]->setHandlers( Char => undef ); return; @@ -233,6 +239,9 @@ sub _initialize { # empty characters $characters = q{}; + # stop believing we're a leaf node + $_leaf = 0; + # return if there's only one elment - can't set it in parent ;-) # but set as root element if we don't have one already. if (not defined $list->[-1]) { @@ -254,8 +263,6 @@ sub _initialize { $current = pop @$list; # step up in object hierarchy - $_leaf = 0; # stop believing we're a leaf node - return; } ); @@ -323,10 +330,10 @@ the same terms as perl itself =head1 Repository information - $Id: MessageParser.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: MessageParser.pm 795 2009-02-21 00:04:29Z kutterma $ - $LastChangedDate: 2008-07-13 21:28:50 +0200 (So, 13 Jul 2008) $ - $LastChangedRevision: 728 $ + $LastChangedDate: 2009-02-21 01:04:29 +0100 (Sa, 21 Feb 2009) $ + $LastChangedRevision: 795 $ $LastChangedBy: kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageParser.pm $ diff --git a/lib/SOAP/WSDL/Expat/MessageStreamParser.pm b/lib/SOAP/WSDL/Expat/MessageStreamParser.pm index cf41ca3..10c0c72 100644 --- a/lib/SOAP/WSDL/Expat/MessageStreamParser.pm +++ b/lib/SOAP/WSDL/Expat/MessageStreamParser.pm @@ -6,7 +6,7 @@ use XML::Parser::Expat; use SOAP::WSDL::Expat::MessageParser; use base qw(SOAP::WSDL::Expat::MessageParser); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); sub parse_start { my $self = shift; @@ -69,9 +69,9 @@ the same terms as perl itself =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: MessageStreamParser.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: MessageStreamParser.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/MessageStreamParser.pm $ =cut diff --git a/lib/SOAP/WSDL/Expat/WSDLParser.pm b/lib/SOAP/WSDL/Expat/WSDLParser.pm index edc1d69..98d9014 100644 --- a/lib/SOAP/WSDL/Expat/WSDLParser.pm +++ b/lib/SOAP/WSDL/Expat/WSDLParser.pm @@ -5,7 +5,7 @@ use Carp; use SOAP::WSDL::TypeLookup; use base qw(SOAP::WSDL::Expat::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); # # Import child elements of a WSDL / XML Schema tree into the current tree @@ -18,33 +18,38 @@ use version; our $VERSION = qv('2.00.05'); # sub _import_children { - my ($self, $name, $imported, $importer, $import_namespace) = @_; + my ( $self, $name, $imported, $importer, $import_namespace ) = @_; - my $targetNamespace = $importer->get_targetNamespace(); - my $push_method = "push_$name"; - my $get_method = "get_$name"; - my $default_namespace = $imported->get_xmlns()->{ '#default' }; + my $targetNamespace = $importer->get_targetNamespace(); + my $push_method = "push_$name"; + my $get_method = "get_$name"; + my $default_namespace = $imported->get_xmlns()->{'#default'}; no strict qw(refs); my $value_ref = $imported->$get_method(); if ($value_ref) { - $value_ref = [ $value_ref ] if (not ref $value_ref eq 'ARRAY'); + $value_ref = [$value_ref] if ( not ref $value_ref eq 'ARRAY' ); + + for ( @{$value_ref} ) { - for (@{ $value_ref }) { # fixup namespace - new parent may be from different namespace - if (defined ($default_namespace)) { + if ( defined($default_namespace) ) { my $xmlns = $_->get_xmlns(); + # it's a hash ref, so we can just update values - if (! defined $xmlns->{ '#default'}) { - $xmlns->{ '#default' } = $default_namespace; + if ( !defined $xmlns->{'#default'} ) { + $xmlns->{'#default'} = $default_namespace; } } + # fixup targetNamespace, but don't override - $_->set_targetNamespace( $import_namespace ) - if ( ($import_namespace ne $targetNamespace) && ! $_->get_targetNamespace); + $_->set_targetNamespace($import_namespace) + if ( ( $import_namespace ne $targetNamespace ) + && !$_->get_targetNamespace ); + # update parent... - $_->set_parent( $importer ); + $_->set_parent($importer); # push elements into importing WSDL $importer->$push_method($_); @@ -53,225 +58,254 @@ sub _import_children { } sub _import_namespace_definitions { - my $self = shift; - my $arg_ref = shift; - my $importer = $arg_ref->{ importer }; - my $imported = $arg_ref->{ imported }; + my $self = shift; + my $arg_ref = shift; + my $importer = $arg_ref->{importer}; + my $imported = $arg_ref->{imported}; # import namespace definitions, too my $importer_ns_of = $importer->get_xmlns(); - my %xmlns_of = %{ $imported->get_xmlns() }; + my %xmlns_of = %{$imported->get_xmlns()}; # it's a hash ref, we can just add to. - # TODO: check whether prefix is already taken. - # TODO: check wheter URI is the better key. - while (my ($prefix, $url) = each %xmlns_of) { - $importer_ns_of->{ $prefix } = $url; + # TODO: check whether URI is the better key. + while ( my ( $prefix, $url ) = each %xmlns_of ) { + if ( exists( $importer_ns_of->{$prefix} ) ) { + + # warn "$prefix already exists"; + next; + } + $importer_ns_of->{$prefix} = $url; } } sub xml_schema_import { - my $self = shift; - my $schema = shift; - my $parser = $self->clone(); - my %attr_of = @_; - my $import_namespace = $attr_of{ namespace }; + my $self = shift; + my $schema = shift; + my $parser = $self->clone(); + my %attr_of = @_; + my $import_namespace = $attr_of{namespace}; - if (not $attr_of{schemaLocation}) { - warn "cannot import document for namespace >$import_namespace< without location"; + if ( not $attr_of{schemaLocation} ) { + warn +"cannot import document for namespace >$import_namespace< without location"; return; } - if (not $self->get_uri) { - die "cannot import document from namespace >$import_namespace< without base uri. Use >parse_uri< or >set_uri< to set one." + if ( not $self->get_uri ) { + die +"cannot import document from namespace >$import_namespace< without base uri. Use >parse_uri< or >set_uri< to set one."; } - my $uri = URI->new_abs($attr_of{schemaLocation}, $self->get_uri() ); + my $uri = URI->new_abs( $attr_of{schemaLocation}, $self->get_uri() ); my $imported = $parser->parse_uri($uri); # might already be imported - parse_uri just returns in this case return if not defined $imported; - $self->_import_namespace_definitions({ - importer => $schema, - imported => $imported, - }); + $self->_import_namespace_definitions( { + importer => $schema, + imported => $imported, + } ); - for my $name ( qw(type element group attribute attributeGroup) ) { - $self->_import_children( $name, $imported, $schema, $import_namespace); + for my $name (qw(type element group attribute attributeGroup)) { + $self->_import_children( $name, $imported, $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 $self = shift; + my $definitions = shift; + my $parser = $self->clone(); + my %attr_of = @_; + my $import_namespace = $attr_of{namespace}; - if (not $attr_of{location}) { - warn "cannot import document for namespace >$import_namespace< without location"; + if ( not $attr_of{location} ) { + warn +"cannot import document for namespace >$import_namespace< without location"; return; } - if (not $self->get_uri) { - die "cannot import document from namespace >$import_namespace< without base uri. Use >parse_uri< or >set_uri< to set one." + if ( not $self->get_uri ) { + die +"cannot import document from namespace >$import_namespace< without base uri. Use >parse_uri< or >set_uri< to set one."; } - my $uri = URI->new_abs($attr_of{location}, $self->get_uri() ); + my $uri = URI->new_abs( $attr_of{location}, $self->get_uri() ); my $imported = $parser->parse_uri($uri); # might already be imported - parse_uri just returns in this case return if not defined $imported; - $self->_import_namespace_definitions({ - importer => $definitions, - imported => $imported, - }); + $self->_import_namespace_definitions( { + importer => $definitions, + imported => $imported, + } ); - for my $name ( qw(types message binding portType service) ) { - $self->_import_children( $name, $imported, $definitions, $import_namespace); + for my $name (qw(types message binding portType service)) { + $self->_import_children( $name, $imported, $definitions, + $import_namespace ); } } sub _initialize { - my ($self, $parser) = @_; + my ( $self, $parser ) = @_; # init object data - $self->{ parser } = $parser; - delete $self->{ data }; + $self->{parser} = $parser; + delete $self->{data}; # setup local variables for keeping temp data - my $characters = undef; - my $current = undef; - my $list = []; # node list + my $characters = undef; + my $current = undef; + my $list = []; # node list + my $elementFormQualified = 1; # default for WSDLs, schema may override # TODO skip non-XML Schema namespace tags $parser->setHandlers( Start => sub { + # handle attrs as list - expat uses dual-vars for looking # up namespace information, and hash keys don't allow dual vars... - my ($parser, $localname, @attrs) = @_; + my ( $parser, $localname, @attrs ) = @_; $characters = q{}; - my $action = SOAP::WSDL::TypeLookup->lookup( - $parser->namespace($localname), - $localname - ); + my $action = + SOAP::WSDL::TypeLookup->lookup( $parser->namespace($localname), + $localname ); return if not $action; - if ($action->{ type } eq 'CLASS') { + if ( $action->{type} eq 'CLASS' ) { eval "require $action->{ class }"; croak $@ if ($@); - my $obj = $action->{ class }->new({ - parent => $current, + my $obj = $action->{class}->new( { + parent => $current, namespace => $parser->namespace($localname), - }) - ->init( _fixup_attrs( $parser, @attrs ) ); + defined($current) + ? ( xmlns => $current->get_xmlns() ) + : ()} )->init( _fixup_attrs( $parser, @attrs ) ); if ($current) { + if ( defined $list->[-1] + && $list->[-1]->isa('SOAP::WSDL::XSD::Schema') ) { + $elementFormQualified = + $list->[-1]->get_elementFormDefault() eq + 'qualified'; + } + # inherit namespace, but don't override - $obj->set_targetNamespace( $current->get_targetNamespace() ) - if not $obj->get_targetNamespace(); + if ($elementFormQualified) { + $obj->set_targetNamespace( + $current->get_targetNamespace() ) + if not $obj->get_targetNamespace(); + } # push on parent's element/type list my $method = "push_$localname"; no strict qw(refs); - $current->$method( $obj ); + $current->$method($obj); # remember element for stepping back - push @{ $list }, $current; + push @{$list}, $current; } # set new element (step down) $current = $obj; } - elsif ($action->{ type } eq 'PARENT') { - $current->init( _fixup_attrs($parser, @attrs) ); + elsif ( $action->{type} eq 'PARENT' ) { + $current->init( _fixup_attrs( $parser, @attrs ) ); } - elsif ($action->{ type } eq 'METHOD') { - my $method = $action->{ method }; + elsif ( $action->{type} eq 'METHOD' ) { + my $method = $action->{method}; no strict qw(refs); + # call method with # - default value ($action->{ value } if defined, # dereferencing lists # - the values of the elements Attributes hash # TODO: add namespaces declared to attributes. # Expat consumes them, so we have to re-add them here. - $current->$method( defined $action->{ value } - ? ref $action->{ value } - ? @{ $action->{ value } } - : ($action->{ value }) - : _fixup_attrs($parser, @attrs) - ); + $current->$method( + defined $action->{value} + ? ref $action->{value} + ? @{$action->{value}} + : ( $action->{value} ) + : _fixup_attrs( $parser, @attrs ) ); } - elsif ($action->{type} eq 'HANDLER') { - my $method = $self->can($action->{method}); - $method->($self, $current, @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'; + 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 ); + if ( $localname !~ + m{ \A (:? annotation | documentation ) \z }xms ); } return; }, - Char => sub { $characters .= $_[1]; return; }, + Char => sub { $characters .= $_[1]; return; }, End => sub { - my ($parser, $localname) = @_; + my ( $parser, $localname ) = @_; - my $action = SOAP::WSDL::TypeLookup->lookup( - $parser->namespace( $localname ), - $localname - ) || {}; + my $action = + SOAP::WSDL::TypeLookup->lookup( $parser->namespace($localname), + $localname ) + || {}; - if (! defined $list->[-1]) { - $self->{ data } = $current; + if ( !defined $list->[-1] ) { + $self->{data} = $current; return; } - return if not ($action->{ type }); - if ( $action->{ type } eq 'CLASS' ) { - $current = pop @{ $list }; + + return if not( $action->{type} ); + if ( $action->{type} eq 'CLASS' ) { + $current = pop @{$list}; + if ( defined $list->[-1] && $list->[-1]->isa('SOAP::WSDL::XSD::Schema') ) { + $elementFormQualified = 1; + } } - elsif ($action->{ type } eq 'CONTENT' ) { - my $method = $action->{ method }; + elsif ( $action->{type} eq 'CONTENT' ) { + my $method = $action->{method}; # normalize whitespace - $characters =~s{ ^ \s+ (.+) \s+ $ }{$1}xms; - $characters =~s{ \s+ }{ }xmsg; + $characters =~ s{ ^ \s+ (.+) \s+ $ }{$1}xms; + $characters =~ s{ \s+ }{ }xmsg; no strict qw(refs); - $current->$method( $characters ); + $current->$method($characters); } return; - } - ); + } ); return $parser; } # make attrs SAX style sub _fixup_attrs { - my ($parser, @attrs) = @_; + my ( $parser, @attrs ) = @_; - my @attr_key_from = (); + my @attr_key_from = (); my @attr_value_from = (); while (@attrs) { - push @attr_key_from, shift @attrs; + push @attr_key_from, shift @attrs; push @attr_value_from, shift @attrs; } @@ -281,20 +315,18 @@ sub _fixup_attrs { # # add namespaces before attributes: Attributes may be namespace-qualified # - push @attrs_from, map { - { - Name => "xmlns:$_", - Value => $parser->expand_ns_prefix( $_ ), + push @attrs_from, map { { + Name => "xmlns:$_", + Value => $parser->expand_ns_prefix($_), LocalName => $_ } } $parser->new_ns_prefixes(); - push @attrs_from, map { - { + push @attrs_from, map { { Name => defined $parser->namespace($_) - ? $parser->namespace($_) . '|' . $_ - : '|' . $_, - Value => shift @attr_value_from, # $attrs_of{ $_ }, + ? $parser->namespace($_) . '|' . $_ + : '|' . $_, + Value => shift @attr_value_from, # $attrs_of{ $_ }, LocalName => $_ } } @attr_key_from; @@ -304,7 +336,6 @@ sub _fixup_attrs { 1; - =pod =head1 NAME @@ -336,10 +367,10 @@ the same terms as perl itself =head1 Repository information - $Id: WSDLParser.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: WSDLParser.pm 795 2009-02-21 00:04:29Z kutterma $ - $LastChangedDate: 2008-07-13 21:28:50 +0200 (So, 13 Jul 2008) $ - $LastChangedRevision: 728 $ + $LastChangedDate: 2009-02-21 01:04:29 +0100 (Sa, 21 Feb 2009) $ + $LastChangedRevision: 795 $ $LastChangedBy: kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $ diff --git a/lib/SOAP/WSDL/Factory/Deserializer.pm b/lib/SOAP/WSDL/Factory/Deserializer.pm index e49a324..11a6398 100644 --- a/lib/SOAP/WSDL/Factory/Deserializer.pm +++ b/lib/SOAP/WSDL/Factory/Deserializer.pm @@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Deserializer; use strict; use warnings; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %DESERIALIZER = ( '1.1' => 'SOAP::WSDL::Deserializer::XSD', diff --git a/lib/SOAP/WSDL/Factory/Generator.pm b/lib/SOAP/WSDL/Factory/Generator.pm index e82df35..439d1fa 100644 --- a/lib/SOAP/WSDL/Factory/Generator.pm +++ b/lib/SOAP/WSDL/Factory/Generator.pm @@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Generator; use strict; use warnings; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %GENERATOR = ( 'XSD' => 'SOAP::WSDL::Generator::Template::XSD', diff --git a/lib/SOAP/WSDL/Factory/Serializer.pm b/lib/SOAP/WSDL/Factory/Serializer.pm index 078e65d..e84b56f 100644 --- a/lib/SOAP/WSDL/Factory/Serializer.pm +++ b/lib/SOAP/WSDL/Factory/Serializer.pm @@ -2,7 +2,7 @@ package SOAP::WSDL::Factory::Serializer; use strict; use warnings; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %SERIALIZER = ( '1.1' => 'SOAP::WSDL::Serializer::XSD', @@ -138,9 +138,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: Serializer.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: Serializer.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Serializer.pm $ =cut diff --git a/lib/SOAP/WSDL/Factory/Transport.pm b/lib/SOAP/WSDL/Factory/Transport.pm index 256d166..e1c1b8e 100644 --- a/lib/SOAP/WSDL/Factory/Transport.pm +++ b/lib/SOAP/WSDL/Factory/Transport.pm @@ -1,7 +1,7 @@ package SOAP::WSDL::Factory::Transport; use strict; use warnings; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %registered_transport_of = (); @@ -243,9 +243,9 @@ Martin Kutter Emartin.kutter fen-net.deE =head1 REPOSITORY INFORMATION - $Rev: 728 $ + $Rev: 795 $ $LastChangedBy: kutterma $ - $Id: Transport.pm 728 2008-07-13 19:28:50Z kutterma $ + $Id: Transport.pm 795 2009-02-21 00:04:29Z kutterma $ $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Factory/Transport.pm $ =cut diff --git a/lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm b/lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm index c0ea2d6..728b6e6 100644 --- a/lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm +++ b/lib/SOAP/WSDL/Generator/Iterator/WSDL11.pm @@ -2,7 +2,7 @@ package SOAP::WSDL::Generator::Iterator::WSDL11; use strict; use warnings; use Class::Std::Fast; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %definitions_of :ATTR(:name :default<[]>); my %nodes_of :ATTR(:name :default<[]>); @@ -73,7 +73,8 @@ my %METHOD_OF = ( $node->get_type() ? do { die "unsupported global type <" - . $node->get_type . "> found in part ". $node->get_name(); + . $node->get_type . "> found in part <". $node->get_name() . ">\n" + . "Looks like a rpc/literal WSDL, which is not supported by SOAP::WSDL\n"; ## use this once we can auto-generate an element for RPC bindings # $types->find_type( $node->expand($node->get_type) ) } diff --git a/lib/SOAP/WSDL/Generator/PrefixResolver.pm b/lib/SOAP/WSDL/Generator/PrefixResolver.pm index 9a8f89f..1454b39 100644 --- a/lib/SOAP/WSDL/Generator/PrefixResolver.pm +++ b/lib/SOAP/WSDL/Generator/PrefixResolver.pm @@ -3,7 +3,7 @@ use strict; use warnings; use Class::Std::Fast::Storable; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %namespace_prefix_map_of :ATTR(:name :default<{}>); my %namespace_map_of :ATTR(:name :default<{}>); diff --git a/lib/SOAP/WSDL/Generator/Template.pm b/lib/SOAP/WSDL/Generator/Template.pm index bacbf04..6fea56d 100644 --- a/lib/SOAP/WSDL/Generator/Template.pm +++ b/lib/SOAP/WSDL/Generator/Template.pm @@ -5,7 +5,7 @@ use Class::Std::Fast::Storable; use Carp; use SOAP::WSDL::Generator::PrefixResolver; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %tt_of :ATTR(:get); my %definitions_of :ATTR(:name :default<()>); @@ -70,3 +70,39 @@ sub _process :PROTECTED { } 1; + +=pod + +=head1 NAME + +SOAP::WSDL::Generator::Template - Template-based code generator + +=head1 DESCRIPTION + +SOAP::WSDL's template based code generator + +Base class for writing template based generators + +=head1 AUTHOR + +Replace the whitespace by @ for E-Mail Address. + + Martin Kutter Emartin.kutter fen-net.deE + +=head1 LICENSE AND COPYRIGHT + +Copyright 2008, 2009 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: WSDLParser.pm 770 2009-01-24 22:55:54Z kutterma $ + + $LastChangedDate: 2009-01-24 23:55:54 +0100 (Sa, 24 Jan 2009) $ + $LastChangedRevision: 770 $ + $LastChangedBy: kutterma $ + + $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $ + diff --git a/lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm b/lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm index 38e2501..a53ee0d 100644 --- a/lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm +++ b/lib/SOAP/WSDL/Generator/Template/Plugin/XSD.pm @@ -4,7 +4,7 @@ use warnings; use Carp qw(confess); use Class::Std::Fast::Storable constructor => 'none'; use Scalar::Util qw(blessed); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %namespace_prefix_map_of :ATTR(:name :default<{}>); my %namespace_map_of :ATTR(:name :default<{}>); diff --git a/lib/SOAP/WSDL/Generator/Template/XSD.pm b/lib/SOAP/WSDL/Generator/Template/XSD.pm index 79eb16b..5cab1d2 100644 --- a/lib/SOAP/WSDL/Generator/Template/XSD.pm +++ b/lib/SOAP/WSDL/Generator/Template/XSD.pm @@ -5,15 +5,15 @@ use Class::Std::Fast::Storable; use File::Basename; use File::Spec; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); use SOAP::WSDL::Generator::Visitor::Typemap; -use SOAP::WSDL::Generator::Visitor::Typelib; use SOAP::WSDL::Generator::Template::Plugin::XSD; use base qw(SOAP::WSDL::Generator::Template); my %output_of :ATTR(:name :default<()>); my %typemap_of :ATTR(:name :default<({})>); +my %silent_of :ATTR(:name :default<0>); sub BUILD { my ($self, $ident, $arg_ref) = @_; @@ -113,7 +113,8 @@ sub _generate_interface { $service, $port, )); - print "Creating interface class $output\n"; + print "Creating interface class $output\n" + if not $silent_of{ident $self}; $self->_process($template_name, { @@ -173,7 +174,8 @@ sub generate_typemap { my $output = $arg_ref->{ output } ? $arg_ref->{ output } : $self->_generate_filename( $self->get_name_resolver()->create_typemap_name($service) ); - print "Creating typemap class $output\n"; + print "Creating typemap class $output\n" + if not $silent_of{ident $self}; $self->_process('Typemap.tt', { service => $service, @@ -205,7 +207,8 @@ sub visit_XSD_Element { my $output = defined $output_of{ ident $self } ? $output_of{ ident $self } : $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($element) ); - warn "Creating element class $output \n"; + warn "Creating element class $output \n" + if not $silent_of{ ident $self}; $self->_process('element.tt', { element => $element } , $output); } @@ -214,7 +217,8 @@ sub visit_XSD_SimpleType { my $output = defined $output_of{ ident $self } ? $output_of{ ident $self } : $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) ); - warn "Creating simpleType class $output \n"; + warn "Creating simpleType class $output \n" + if not $silent_of{ ident $self}; $self->_process('simpleType.tt', { simpleType => $type } , $output); } @@ -223,8 +227,111 @@ sub visit_XSD_ComplexType { my $output = defined $output_of{ ident $self } ? $output_of{ ident $self } : $self->_generate_filename( $self->get_name_resolver()->create_xsd_name($type) ); - warn "Creating complexType class $output \n"; + warn "Creating complexType class $output \n" + if not $silent_of{ ident $self}; $self->_process('complexType.tt', { complexType => $type } , $output); } 1; + +=pod + +=head1 NAME + +SOAP::WSDL::Generator::Template::XSD - XSD code generator + +=head1 DESCRIPTION + +SOAP::WSDL's XSD code generator + +=head1 SYNOPSIS + +See L for an example on how to use this class. + +=head1 METHODS + +=head2 new + +Constructor. + +Options (Options can also be set via set_OPTION methods): + +=over + +=item * silent + +Suppress warnings about what's being generated + +=back + +=head2 generate + +Shortcut for calling L and L + +=head2 generate_client + +Generates a client interface + +=head2 generate_server + +Generates a server class + +=head2 generate_typelib + +Generates type and element classes + +=head2 generate_typemap + +Generate a typemap class required by SOAP::WSDL's MessageParser + +=head2 generate_interface + +(Deprecated) alias for generate_client + +=head2 get_name_resolver + +Returns a name resolver template plugin + +=head2 visit_XSD_Attribute + +Visitor method for SOAP::WSDL::XSD::Attribute. Should be factored out into +visitor class. + +=head2 visit_XSD_ComplexType + +Visitor method for SOAP::WSDL::XSD::ComplexType. Should be factored out into +visitor class. + +=head2 visit_XSD_Element + +Visitor method for SOAP::WSDL::XSD::Element. Should be factored out into +visitor class. + +=head2 visit_XSD_SimpleType + +Visitor method for SOAP::WSDL::XSD::SimpleType. Should be factored out into +visitor class. + +=head1 AUTHOR + +Replace the whitespace by @ for E-Mail Address. + + Martin Kutter Emartin.kutter fen-net.deE + +=head1 LICENSE AND COPYRIGHT + +Copyright 2008, 2009 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: WSDLParser.pm 770 2009-01-24 22:55:54Z kutterma $ + + $LastChangedDate: 2009-01-24 23:55:54 +0100 (Sa, 24 Jan 2009) $ + $LastChangedRevision: 770 $ + $LastChangedBy: kutterma $ + + $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $ + diff --git a/lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt b/lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt index 14f3332..532c4a6 100644 --- a/lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt +++ b/lib/SOAP/WSDL/Generator/Template/XSD/Typemap.tt @@ -7,7 +7,6 @@ our [% USE Dumper(varname = 'typemap_'); Dumper.dump( typemap ) %]; sub get_class { my $name = join '/', @{ $_[1] }; - exists $typemap_1->{ $name } or die "Cannot resolve $name via " . __PACKAGE__; return $typemap_1->{ $name }; } diff --git a/lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt b/lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt index 0b61dea..d2cabe1 100644 --- a/lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt +++ b/lib/SOAP/WSDL/Generator/Template/XSD/complexType.tt @@ -8,6 +8,10 @@ use warnings; # may be sub-packages... #-%] +__PACKAGE__->_set_element_form_qualified([%- + IF complexType.schema.get_elementFormDefault == 'qualified' + -%]1[% ELSE %]0[% END %]); + [% INCLUDE complexType/contentModel.tt %] 1; diff --git a/lib/SOAP/WSDL/Generator/Template/XSD/element.tt b/lib/SOAP/WSDL/Generator/Template/XSD/element.tt index 981a6ac..df7be32 100644 --- a/lib/SOAP/WSDL/Generator/Template/XSD/element.tt +++ b/lib/SOAP/WSDL/Generator/Template/XSD/element.tt @@ -102,9 +102,9 @@ perl code only, XML output uses the original name: [% END %] +[% END; %] =back -[% END; - END; +[% END; END; -%] diff --git a/lib/SOAP/WSDL/Generator/Visitor.pm b/lib/SOAP/WSDL/Generator/Visitor.pm index 8914bd6..9502778 100644 --- a/lib/SOAP/WSDL/Generator/Visitor.pm +++ b/lib/SOAP/WSDL/Generator/Visitor.pm @@ -3,7 +3,7 @@ use strict; use warnings; use Class::Std::Fast::Storable; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %definitions_of :ATTR(:name :default<()>); my %type_prefix_of :ATTR(:name :default<()>); diff --git a/lib/SOAP/WSDL/Generator/Visitor/Typelib.pm b/lib/SOAP/WSDL/Generator/Visitor/Typelib.pm deleted file mode 100644 index 3ecdd41..0000000 --- a/lib/SOAP/WSDL/Generator/Visitor/Typelib.pm +++ /dev/null @@ -1,11 +0,0 @@ -package SOAP::WSDL::Generator::Visitor::Typelib; -use strict; -use warnings; -use base qw(SOAP::WSDL::Generator::Visitor - SOAP::WSDL::Generator::Template -); - -use version; our $VERSION = qv('2.00.05'); - -1; - diff --git a/lib/SOAP/WSDL/Generator/Visitor/Typemap.pm b/lib/SOAP/WSDL/Generator/Visitor/Typemap.pm index ad87e52..5382165 100644 --- a/lib/SOAP/WSDL/Generator/Visitor/Typemap.pm +++ b/lib/SOAP/WSDL/Generator/Visitor/Typemap.pm @@ -5,7 +5,7 @@ use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Generator::Visitor); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %path_of :ATTR(:name :default<[]>); my %typemap_of :ATTR(:name :default<()>); @@ -182,3 +182,39 @@ sub visit_XSD_ComplexType { } 1; + +__END__ + +=pod + +=head1 NAME + +SOAP::WSDL::Generator::Visitor::Typemap - Visitor class for generating typemaps + +=head1 DESCRIPTION + +Visitor used by SOAP::WSDL's XSD generator for creating typemaps + +=head1 AUTHOR + +Replace the whitespace by @ for E-Mail Address. + + Martin Kutter Emartin.kutter fen-net.deE + +=head1 LICENSE AND COPYRIGHT + +Copyright 2008, 2009 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: WSDLParser.pm 770 2009-01-24 22:55:54Z kutterma $ + + $LastChangedDate: 2009-01-24 23:55:54 +0100 (Sa, 24 Jan 2009) $ + $LastChangedRevision: 770 $ + $LastChangedBy: kutterma $ + + $HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Expat/WSDLParser.pm $ + diff --git a/lib/SOAP/WSDL/Manual/CodeFirst.pod b/lib/SOAP/WSDL/Manual/CodeFirst.pod new file mode 100644 index 0000000..7e01012 --- /dev/null +++ b/lib/SOAP/WSDL/Manual/CodeFirst.pod @@ -0,0 +1,91 @@ +=pod + +=head1 Writing Code-First Web Services with SOAP::WSDL + +B. + +=head2 How Data Class definitions could look like + +=head3 Moose + +Of course SOAP::WSDL could (and probably should) just use Moose - it provides the full +Metaclass Framework needed for generating Schemas from class definitions. + +However, Moose is way too powerful for building (just) simple Data Transfer Objects which +can be expressed in XML. + +With Moose, a class could look like this: + + package MyElements::GenerateBarCode; + use Moose; + + has 'xmlns' => + is => 'ro', + default => 'http://webservicex.net'; + + has 'xmlname' => + is => 'ro', + default => 'GenerateBarCode'; + + has 'BarCodeParam' => + is => 'rw', + type => 'MyTypes::BarCodeData'; + + has 'BarCodeText' => + is => 'rw', + type => 'String'; + 1; + +This is - despite the condensed syntax - a lot of line noise. + +=head3 Native SOAP::WSDL + +SOAP::WSDL::XSD::Typelib::ComplexType (should) provide a simple setup method allowing a even shorter +description (and offering the additional performance boost SOAP::WSDL has over Moose): + + package MyElements::GenerateBarCode; + use strice; use warnings; + use SOAP::WSDL::XSD::Typelib::Element; + use SOAP::WSDL::XSD::Typelib::ComplexType; + + _namespace 'http://webservicex.net'; # might be better in the SOAP server interface + _name 'GenerateBarCode'; + _elements + BarCodeParam => 'MyTypes::BarCodeData', + BarCodeText => 'string'; + +This would result in the following XML Schema (inside a schema with the namespace +"http://webservicex.net" - the namespaces could even be declared outside the DTO classes. + + + + + + + + +=head2 Interface definitions + +Perl does not have the concept of interfaces. However, Moose provides Roles, which can be used for defining +interfaces. + +However, it's not really necessary to define a interface Interface (in the sense of a Jave interface) - +a interface class is sufficient. + +Subroutine attributes could be used for providing additional information - attributes in perl are much like +annotations in Java + +A interface could look like this: + + package MyServer::BarCode; + use strict; use warnings; + use SOAP::WSDL::Server::CodeFirst; + + sub generateBarCode :WebMethod(name= + return= + body=) { + my ($self, $body, $header) = @_; + my $result = MyElements::GenerateBarcodeResponse->new(); + return $result; + }; + 1; diff --git a/lib/SOAP/WSDL/Manual/Cookbook.pod b/lib/SOAP/WSDL/Manual/Cookbook.pod index b76eaf9..86fbdb9 100644 --- a/lib/SOAP/WSDL/Manual/Cookbook.pod +++ b/lib/SOAP/WSDL/Manual/Cookbook.pod @@ -12,7 +12,7 @@ You need Crypt::SSLeay installed to access HTTPS webservices. Passing a username and password, or a client certificate and key, to the transport layer is highly dependent on the transport backend. The descriptions -below are for HTTP(S) transport usingLWP::UserAgent +below are for HTTP(S) transport using LWP::UserAgent =head3 Accessing HTTP(S) webservices with basic/digest authentication @@ -121,12 +121,82 @@ or nil elements): return "<$prefix:$name>"; } +=head1 Skipping unknown XML elements - "lax" XML processing + +SOAP::WSDL's default serializer +L is a "strict" +XML processor in the sense that it throws an exception on encountering unknown +XML elements. + +L allows +switching off the stric XML processing by passing the C 0> +option. + +=head2 Disabling strict XML processing in a Client + +Pass the following as C: + + { strict => 0 } + +Example: The generated SOAP client is assumed to be "MyInterface::Test". + + use MyInterface::Test; + + my $soap = MyInterface::Test->new({ + deserializer_args => { strict => 0 } + }); + + my $result = $soap->SomeMethod(); + +=head2 Disabling strict XML processing in a CGI based server + +You have to set the deserializer in the transport class explicitely to +a L object with the +C option set to 0. + +Example: The generated SOAP server is assumed to be "MyServer::Test". + + use strict; + use MyServer::Test; + use SOAP::WSDL::Deserializer::XSD; + + my $soap = MyServer::Test->new({ + transport_class => 'SOAP::WSDL::Server::CGI', + dispatch_to => 'main', + }); + $soap->get_transport()->set_deserializer( + SOAP::WSDL::Deserializer::XSD->new({ strict => 0 }) + ); + + $soap->handle(); + +=head2 Disabling strict XML processing in a mod_perl based server + +Sorry, this is not implemented yet - you'll have to write your own handler +class based on L. + +=head1 Changing the encoding of a SOAP request + +SOAP::WSDL uses utf-8 per default: utf-8 +is the de-facto standard for webservice ommunication. + +However, you can change the encoding the transport layer announces by calling +C on a client object. + +You probably have to write your own serializer class too, because the default +serializer has the utf-8 encoding hardcoded in the envelope. + +Just look into SOAP::WSDL::Serializer on how to do that. + +Don't forget to register your serializer at the serializer factory +SOAP::WSDL::Factory::Serializer. + =head1 LICENSE AND COPYRIGHT -Copyright 2008 Martin Kutter. +Copyright 2008, 2009 Martin Kutter. -This library is free software. You may distribute/modify it under -the same terms as perl itself +This file is part of SOAP-WSDL. You may distribute/modify it under +the same terms as perl itself. =head1 AUTHOR diff --git a/lib/SOAP/WSDL/Message.pm b/lib/SOAP/WSDL/Message.pm index 1124a38..38dd5cc 100644 --- a/lib/SOAP/WSDL/Message.pm +++ b/lib/SOAP/WSDL/Message.pm @@ -4,7 +4,7 @@ use warnings; use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %part_of :ATTR(:name :default<[]>); diff --git a/lib/SOAP/WSDL/OpMessage.pm b/lib/SOAP/WSDL/OpMessage.pm index 1a098d1..12a49b2 100644 --- a/lib/SOAP/WSDL/OpMessage.pm +++ b/lib/SOAP/WSDL/OpMessage.pm @@ -4,7 +4,7 @@ use warnings; use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %body_of :ATTR(:name :default<[]>); my %header_of :ATTR(:name
:default<[]>); diff --git a/lib/SOAP/WSDL/Operation.pm b/lib/SOAP/WSDL/Operation.pm index 76d86b7..74510d4 100644 --- a/lib/SOAP/WSDL/Operation.pm +++ b/lib/SOAP/WSDL/Operation.pm @@ -4,7 +4,7 @@ use warnings; use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %operation_of :ATTR(:name :default<()>); my %input_of :ATTR(:name :default<[]>); diff --git a/lib/SOAP/WSDL/Part.pm b/lib/SOAP/WSDL/Part.pm index e32a4f5..deca36e 100644 --- a/lib/SOAP/WSDL/Part.pm +++ b/lib/SOAP/WSDL/Part.pm @@ -6,7 +6,7 @@ use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %element_of :ATTR(:name :default<()>); my %type_of :ATTR(:name :default<()>); diff --git a/lib/SOAP/WSDL/Port.pm b/lib/SOAP/WSDL/Port.pm index 60ec970..5287fea 100644 --- a/lib/SOAP/WSDL/Port.pm +++ b/lib/SOAP/WSDL/Port.pm @@ -4,7 +4,7 @@ use warnings; use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %binding_of :ATTR(:name :default<()>); my %address_of :ATTR(:name
:default<()>); diff --git a/lib/SOAP/WSDL/PortType.pm b/lib/SOAP/WSDL/PortType.pm index 1d2c10d..c1960f8 100644 --- a/lib/SOAP/WSDL/PortType.pm +++ b/lib/SOAP/WSDL/PortType.pm @@ -5,7 +5,7 @@ use Class::Std::Fast::Storable; use List::Util; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %operation_of :ATTR(:name :default<()>); diff --git a/lib/SOAP/WSDL/SOAP/Address.pm b/lib/SOAP/WSDL/SOAP/Address.pm index 7a0ee16..dad4af0 100644 --- a/lib/SOAP/WSDL/SOAP/Address.pm +++ b/lib/SOAP/WSDL/SOAP/Address.pm @@ -4,7 +4,7 @@ use warnings; use base qw(SOAP::WSDL::Base); use Class::Std::Fast::Storable; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %location :ATTR(:name :default<()>); 1; \ No newline at end of file diff --git a/lib/SOAP/WSDL/SOAP/Body.pm b/lib/SOAP/WSDL/SOAP/Body.pm index 176e0c6..4d57fa3 100644 --- a/lib/SOAP/WSDL/SOAP/Body.pm +++ b/lib/SOAP/WSDL/SOAP/Body.pm @@ -4,7 +4,7 @@ use warnings; use base qw(SOAP::WSDL::Base); use Class::Std::Fast::Storable; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %use_of :ATTR(:name :default); my %namespace_of :ATTR(:name :default); diff --git a/lib/SOAP/WSDL/SOAP/Header.pm b/lib/SOAP/WSDL/SOAP/Header.pm index 5460c2c..d4e063c 100644 --- a/lib/SOAP/WSDL/SOAP/Header.pm +++ b/lib/SOAP/WSDL/SOAP/Header.pm @@ -4,7 +4,7 @@ use warnings; use base qw(SOAP::WSDL::Base); use Class::Std::Fast::Storable; -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %use_of :ATTR(:name :default); my %namespace_of :ATTR(:name :default); diff --git a/lib/SOAP/WSDL/SOAP/HeaderFault.pm b/lib/SOAP/WSDL/SOAP/HeaderFault.pm index 5e12ff1..9479ea9 100644 --- a/lib/SOAP/WSDL/SOAP/HeaderFault.pm +++ b/lib/SOAP/WSDL/SOAP/HeaderFault.pm @@ -3,6 +3,6 @@ use strict; use warnings; use base qw(SOAP::WSDL::Header); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); 1; \ No newline at end of file diff --git a/lib/SOAP/WSDL/SOAP/Operation.pm b/lib/SOAP/WSDL/SOAP/Operation.pm index ab77c87..73a14ef 100644 --- a/lib/SOAP/WSDL/SOAP/Operation.pm +++ b/lib/SOAP/WSDL/SOAP/Operation.pm @@ -4,7 +4,7 @@ use warnings; use Class::Std::Fast::Storable; use base qw(SOAP::WSDL::Base); -use version; our $VERSION = qv('2.00.05'); +use version; our $VERSION = qv('2.00.07'); my %style_of :ATTR(:name