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 $