Release notes for SOAP::WSDL 2.00_17

I'm proud to present a new pre-release version of SOAP::WSDL.

SOAP::WSDL is a toolkit for creating WSDL-based SOAP client interfaces in perl.


    * WSDL based SOAP client
          o SOAP1.1 support
          o Supports document/literal message style/encoding
    * Code generator for generating WSDL-based interface classes
          o Generated code includes usage documentation for the web service interface
    * Easy-to use API
          o Automatically encodes perl data structures as message data
          o Automatically sets HTTP headers right
    * Efficient documentation
          o SOAP::WSDL::Manual guides you at getting your work done, not at 
          the module's internals
    * Thorough test suite
          o SOAP::WSDL is heavily regression tested, with a test coverage of 
          over 90%.
    * SOAP::Lite like look and feel
          o Where possible, SOAP::WSDL mimics SOAP::Lite's API to allow easy migrations
    * XML schema based class library for creating data objects
    * High-performance XML parser
    * Plugin support. SOAP::WSDL can be extended through plugins in various aspects. 
      The following plugins are supported:
          o Transport plugins via SOAP::WSDL::Factory::Transport
          o Serializer plugins via SOAP::WSDL::Factory::Serializer
          o Deserializer plugins via SOAP::WSDL::Factory::Serializer

The following changes have been made:

The following features were added (the numbers in square brackets are the 
tracker IDs from

The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [ 1772617 ] SOAP Header not working
   Added header support. Currently, SOAP headers are only supported with 
   the SOM or the XSD (SOAP11) serializer.

   * [ 1805238 ] Tests in t/SOAP/WSDL don't work when run from t/

   * [ 1805241 ] explain() broken in SOAP::WSDL
   explain has been removed from SOAP::WSDL
The following uncategorized improvements have been made:   

   * Added limited support for complexType complexContent content model with 
   restriction variety.
   SOAP::WSDL now supports this XML Schema definition variant, although no
   constraints are imposed on derived types yet.
   Derived types do not serialize with a xsi:type attribute (and the xsi:type 
   attribute is not recognized by the XML parser), so you cannot use derived 
   types as a substitute for theri parent, yet.

   * Added support for complexType choice variety
   complexType definitions using the choice variety are now supported,
   even though the content is not checked (if you pass in invalid data, 
   invalid XML will be generated).

   * Added Loopback Transport backend.
   SOAP::WSDL::Tranport::Loopback just returns the request as respons, but 
   allows testing the whole chain from user interface to transport backend.

   * Fixed SOAP::WSDL::Factory::Transport prefer user-registered 
   transport backend

   * Fixed set_soap_version method in SOAP::WSDL::Client.
   Re-setting the SOAP version now invalidates (resets) serializer and 
   deserializer, but not the transport backend.

   * Fixed SOAP::WSDL::XSD::Typelib::Builtin::boolean to return false 
   when false and true when true.

   * SOAP::WSDL::XSD::Typelib::Builtin::normalizedString now replaces all 
   occurences of tab, newline and carriage return by whitespce on set_value.

   * Code cleanup
      o Lots of orphan methods now replaced by the SOAP::WSDL::Generator 
        hierarchy have been removed.
      o Unused (and unusable) readable option checking has been removed in 
      o Unused XML Schema facet attributes have been removed from XSD Builtin 
      o Methods common to all expat parser classes have been factored out 
        into a common base class.
   * XML serialization speedup for SOAP::WSDL::XSD::* objects

   * Tests added to improve test coverage.

   * A few documentation errors have been fixed

   * Misspelled default Typemap and Interface prefixes have been corrected

The following features were added (the numbers in square brackets are the 
tracker IDs from

   * [ 1761532 ] Support embedded atomic types
   SOAP::WSDL now supports a greater variety of XML Schema type definitions.
   Note that XML Schema support is still incomplete, though.

   * [ 1797943 ] Create Perl Hash Deserializer
   There's a new deserializer which outputs perl hashes as data structures.
   Much like XML::Simple, but faster. No XML Attribute support, though.

   * [ 1797678 ] Move Code generator from WSDL::Definitions to separate class

   * [ 1803330 ] Create one interface per port
   SOAP::WSDL now creats one interface per port, not one per service.

The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [ 1804441 ] parts from binding not regarded in SOAP::WSDL
   SOAP::WSDL (interpreter mode) now respects the body parts specified in the 

   * [ 1803763 ] nonNegativeInteger misspelled in Schema::Builtin

   * [ 1793965 ] _expand() does not work on non-root-node ns declarations

   * [ 1792348 ] 006_client.t requires SOAP::Lite in 2.00_15
   SOAP::WSDL no longer attempts to load SOAP::WSDL::Deserializer::SOM when 
   no_dispatch is set.
   006_client.t now sets outputxml(1), to be really sure.
The following uncategorized improvements have been made:   

   * Code generator only generates interface for the first port in a service
   The code generator now generates interfaces for all ports.
   Note: The naming scheme has changed. It is now
   * XML Parser speedup
   The XML parser has received a little speedup.
   * A number of errors in parsing / traversing WSDL documents have been 
   * Documentation has been improved
   * A number of (incorrect, but passing) tests have been fixed.

   * Code cleanup: The SOAP::WSDL::SAX* modules are no longer included, as they 
   are not supported any more. They can still be found in SOAP::WSDL's 
   subversion repository in the attic directory, though.

The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [ 1792321 ] 2.00_14 requires SOAP::Lite for passing tests


The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [ 1792235 ] SOAP::WSDL::Transport::Test missing from 2.00_13
   The package has been re-added

   * [ 1792221 ] class_resolver not set from ::Client in 2.00_13
   Changed to set class_resolver correctly.

The following uncategorized improvements have been made:

   * The ::SOM deserializer has been simplified to be just a subclass 
   of SOAP::Deserializer from SOAP::Lite
   * Factories now emit more useful error messages when no class is registered
   for the protocol/soap_version requested
   * Documentation has been improved
      - refined ::Factory:: modules' documentation
   * Several tests have been added
   * XSD classes have been improved for testability

The following features were added (the numbers in square brackets are the 
tracker IDs from

   * [ 1790619 ] Test transport backend
   A test transport backend has been implemented (SOAP::WSDL::Transport::Test).
   It returns the contents from a file and discards the response.
   The filename is determined from the soap_action field.
   * [ 1785196 ] Replace outputsom(1) by deserializer plugin
   outputsom(1) in SOAP::WSDL is now implemented via using the deserializer 
   plugin SOAP::WSDL::Deserializer::SOM.

   * [1785195] Support deserializer plugins
   Deserializer plugin API added via SOAP::WSDL::Factory::Deserializer.
The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [1789581] Support ComplexType mixed
   WSDL parser now supports using the mixed="true" attribute in complexType 
   definitions. Mixed content in messages is only supported via SOAP::SOM yet.

   * [1787975] 016_client_object.t fails due to testing XML as string
   Removed string test.
   * [1787959] Test wsdl seems to be broken
   Corrected typo.
   * [1787955] ::XSD::Typelib::date is broken
   SOAP::WSDL::XSD::Typelib::Builtin::date now converts time-zoned dates properly, 
   and adds the local time zone if none is given.

   * [1785646] SOAPAction header not set from soap:operation soapAction
   SOAP::WSDL now sets the SOAPAction header correctly.

The following uncategorized improvements have been made:

   * Documentation improvements

The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [1787146] SOAP::WSDL still uses XML::LibXML
   The superficious usage of XML::LibXML has been removed. XML::LibXML with 
   sax filter has been replaced by SOAP::WSDL::Expat::WSDLParser.
   * [1787054] Test suite requires XML::LibXML in 2.00_11
   The test suite no longer requires XML::LibXML to pass.

   * [1785678] SOAP envelope not checked for namespace
   The SOAP envelope is now checked for the correct namespace.
   * [1786644] SOAP::WSDL::Manual - doc error
   Documentation improvements
The following uncategorized improvements have been made

   * The SOAPAction header is now alway quoted (R1109 in WS-I BP 1.0).

The following features were added (the numbers in square brackets are the 
tracker IDs from

  * [1767963] Transport plugins via SOAP::WSDL::Factory::Transport.
    SOAP::WSDL uses SOAP::Lite's tranport modules as default, with a 
    lightweight HTTP(S) transport plugin as fallback.
    Custom transport modules can be registered via SOAP::WSDL::Factory::Transport.

  * [ 1772730 ] Serializer plugins via SOAP::WSDL::Factory::Serializer 
    The default serializer for SOAP1.1 is SOAP::WSDL::Serializer::SOAP11.
    Custom serializers classes can be registered via 
    SOAP::WSDL::Factory::Serializer or set via SOAP::WSDL's set_serializer 

The following bugs have been fixed (the numbers in square brackets are the 
tracker IDs from

   * [ 1764854 ] Port WSDL parser to expat and remove XML::LibXML dependency
     SOAP::WSDL now requires only XML::Parser to be installed.
     XML::LibXML is not required any more, though XML::LibXML based modules still 

The following uncategorized improvements have been made

   * The number of dependencies has been reduced. SOAP::WSDL no longer requires the 
     following modules to be installed:
        - XML::SAX::Base
        - XML::SAX::ParserFactory
        - Pod::Simple::Text
        - XML::LibXML

   * The missing prerequisite Template has been added.
   * Documentation has been improved:
        - WS-I Compliance document added.

   * Changed Makefile.PL to use Module::Build (passthrough mode)
   * fixed element ref="" handling

   * SOAP::WSDL::XSD::Typelib::Builtin::boolean objects now return their numerical 
     value in bool context, not "true" or "false" (always true...)
   * date/time test are now timezone-sensitive
   * examples added

   * SOAP::WSDL::XSD::Typelib::ComplexType objects now check the class of their 
     child objects.
     This provides early feedback to developers.
   * SOAP message parser can skip unwanted parts of the message to improve parsing 
     speed - see SOAP::WSDL::Expat::MessageParser for details.
   * HTTP Content-Type is configurable
   * SOAP::WSDL::XSD::Typelib::ComplexType based objects accept any combination of 
     hash refs, list refs and objects as parameter to set_value() and new().
   * SOAP::WSDL::XSD::Typelib::Builtin::dateTime and ::date convert date 
      strings into XML date strings
   * SOAP::WSDL::Definitions::create now
      - converts '.' in service names to '::' (.NET class separator to perl class 
      - outputs Typemaps and Interface classes in UTF8 to allow proper inclusion 
      of UTF8 documentation from WSDL
   * SOAP::WSDL::Definitions::create() includes doc in generated interface classes
   * WSDLHandler now handles <wsdl:documentation> tags
   * fixed explain in SimpleType, ComplexType and Element

2.00_07 and below
   * Implemented a Code generator for creating SOAP interfaces based on WSDL definitions
   * Implemented a high-speed stream based SOAP message parser
     SOAP message parser returns a objects based on XML schema based class library
   * Implemented a XML schema based class library 
   * Implemented a stream based WSDL parser.
     Parses WSDL into objects. Objects can serialize data, and explain how to use the 
     service(s) they make up (output documentation).