The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

SOAP::WSDL::Deserializer::XSD_XS - Fast XS based deserializer for SOAP-WSDL

DESCRIPTION

Fast XS based deserializer for SOAP::WSDL::Client and interface classes generated by SOAP::WSDL. Converts SOAP messages to SOAP::WSDL::XSD::Typlib:: based objects.

Needs a class_resolver typemap either passed by the generated interface or user-provided.

SOAP::WSDL::DeserializerXSD_XS classes implement the API described in SOAP::WSDL::Factory::Deserializer.

USAGE

You need to use and register SOAP::WSDL_XS's Deserializer like this:

 use SOAP::WSDL::Deserializer::XSD_XS;
 use SOAP::WSDL::Factory::Deserializer;
 # register for SOAP 1.1
 SOAP::Factory::Deserializer->register('1.1' => 'SOAP::WSDL::Deserializer::XSD_XS' );

Registering a new serializer is a global setting - it affects all SOAP::WSDL objects created after registration.

METHODS

deserialize

Deserializes the message.

generate_fault

Generates a SOAP::WSDL::SOAP::Typelib::Fault11 object and returns it.

PERFORMANCE

SOAP::WSDL_XS' deserializer reaches around 5x the performance of SOAP::WSDL's XML deserializer and is a magnitude faster than SOAP::Lite's dezerializer.

Creating a DOM tree using XML::LibXML is around 4 times faster, but not completely compareable - you pay a slight penalty for each XML::LibXML DOM value-acces later. Converting a XML::LibXML DOM to a hash yields approximately SOAP::WSDL's performance.

All benchmarks quoted below are part of the SOAP-WSDL distribution. All results computed on a ThinkPad T42 equipped with a Pentium Mobile (Dothan) at 1.7GHz and 1GB RAM running Ubuntu 7.4 and perl-5.8.8. Note that benchmarking is not an exact science - results may vary due to side conditions. Run your own benchmark when in question.

On a sample SOAP message of 6075 bytes, parser throughput (without object destruction) is

                         Rate
  SOAP::Lite             61.9/s
  XML::LibXML (dom2hash)  267/s
  SOAP::WSDL              268/s
  SOAP::WSDL (Hash)       391/s
  SOAP::WSDL_XS          1087/s
  XML::LibXML (C DOM)    4054/s

A second benchmark shows the effect of caching and the offload of work to the destructor in SOAP::WSDL's Class::Std::Fast based objects.

 XML length (bytes): 12730
 SOAP::Lite - 0.70_03
 SOAP::WSDL - 2.00_27
 SOAP::WSDL_XS - 0.00_1;
 XML::Compile::SOAP - 0.64
 XML::Simple - 2.16

 Benchmark 0: Store result in private variable and destroy it
               Rate   SOAP::Lite XML::Compile SOAP::WSDL XML::Simple WSDL_XS
 SOAP::Lite    25.5/s      --       -28%       -58%        -60%        -77%
 XML::Compile  35.4/s     39%         --       -41%        -44%        -68%
 SOAP::WSDL    60.4/s    137%        70%         --         -4%        -45%
 XML::Simple   63.0/s    147%        78%         4%          --        -42%
 WSDL_XS        109/s    328%       208%        81%         73%          --

 Benchmark 1: Push result on list
               Rate    SOAP::Lite XML::Compile SOAP::WSDL XML::Simple WSDL_XS
 SOAP::Lite     25.5/s      --      -29%        -59%       -71%        -93%
 XML::Compile   36.1/s     42%        --        -43%       -59%        -89%
 XML::Simple    62.8/s    146%       74%          --       -29%        -82%
 SOAP::WSDL     89.0/s    249%      146%         42%         --        -74%
 WSDL_XS        340/s   1235%      842%        441%       282%          --

 Benchmark 2: Play it again, Sam
               Rate   SOAP::Lite XML::Compile SOAP::WSDL XML::Simple WSDL_XS
 SOAP::Lite    25.5/s      --       -29%        -59%       -75%        -94%
 XML::Compile  35.7/s     40%         --        -43%       -64%        -92%
 XML::Simple   62.4/s    145%        75%          --       -38%        -86%
 SOAP::WSDL     100/s    294%       181%         61%         --        -78%
 WSDL_XS        446/s   1652%      1151%        615%       345%          --

SOAP::WSDL_XS trades speed for features, however - see the list of limitations below.

BUGS AND LIMITATIONS

  • All XML elements must be namespace-qualified

    SOAP::WSDL_XS's serializer will croak on non-namespace qualified XML elements. This is a SOAP requirement, too.

  • SOAP Header is not supported yet

    There's no support for the SOAP Header yet.

LICENSE AND COPYRIGHT

Copyright 2004-2009 Martin Kutter.

This file is part of SOAP-WSDL_XS. You may distribute/modify it under the same terms as perl itself.

AUTHOR

Martin Kutter <martin.kutter fen-net.de>

REPOSITORY INFORMATION

 $Rev: 412 $
 $LastChangedBy: kutterma $
 $Id: XSD.pm 412 2007-11-27 22:57:52Z kutterma $
 $HeadURL: http://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Deserializer/XSD.pm $