Title: HighPerformance Predictive XML Parsing with gSOAP
1High-Performance Predictive XML Parsing with gSOAP
- Robert van EngelenFlorida State University
2The gSOAP Toolkit
12/2003
10/2001
12/2002
1/2002
3/2002
9/2003
1/2000
7/2002
1/2004
3/2004
9/2004
v1.2latencyhidingWSDLoutput
v2.0MT/safe
v1.1streamingXMLSOAP1.1RPC
v1.3HTTPSSSL
v2.1DIME
v2.2streaming DIME
v2.3SOAP1.2
v2.4Doc/LitWSDL1.1tools
v2.5WS-BP1.0a
v2.6
v2.7SwAWS-
gt50,000 downloads
www.genivia.com
http//gsoap2.sourceforge.net
3Early Versus Late Bindings
EARLY BINDING
Static proxy generation with schema-specific
DFA-based XML parsing
Static proxy generation with schema-specific
PDA-based XML parsing
flexibility
performance
Static proxy generation with generic XML parsing
Dynamic proxy generation (DII) with generic XML
parsing
LATE BINDING
4gSOAP Architecture
- Static binding
- WSDL tools to generate bindings
- Stub/skeleton compiler to generate C and C code
- Schema-specific predictive XML parsing
- Supports in-situ serialization and deseralization
of applications native C/C data structures in
XML - Integrated stacks
- TCP/IP - HTTP/S - DIME/MIME - SOAP/XML
- Transport latency hiding
5Client Application Development and Deployment
Service definitionservice.wsdl
WSDL Importer
Client Application
Bindingsservice.h
Client Proxy Object
Stub
gSOAP Compiler
Client-side code
Marshal
Demarshal
6Server Development and Deployment
Service definitionservice.wsdl
WSDL Importer
Web Service
Bindingsservice.h
Server Object
Skeleton
gSOAP Compiler
Server-side code
Marshal
Demarshal
7Server Development and Deployment (Alternative)
Web Service
Bindingsservice.h
Server Object
Skeleton
gSOAP Compiler
Server-side code
Marshal
Demarshal
Service definitionservice.wsdl
8Schema-Specific Predictive XML Parsing
Bindings
WSDL Importer gSOAP Compiler
XML Schemas
PredictiveXML Parser
class ns__List stdvectorltchargt item int
in(char tag) int out(char tag)
ltcomplexType nameListgt ltcomplexContentgt
ltsequencegt ltelement nameitem
typexsdstring maxOccursunbounded/gt
lt/sequencegt lt/complexContentgtlt/complexTypegt
int ns__Listin(char tag) if
(begin_element(tag) ! OK) return
TAG_MISMATCH in_vectorOfstring(item, item)
end_element(tag)
9Latency Hiding with Integrated Stacks
Serialization
HTTPoverTCP/IP
Deserialization
10Latency and Speedup
Interop Round 2 Base echoVoid() latency
better
Relative average speedup for array-based SOAP
messages(10 to 80,000 ints, doubles, and strings)
better
11DFA-Based Parsing
Expat
gSOAP
DFA
better
DFA (opt)
12Conclusions
- Static bindings with predictive XML parsing
delivers performance - Two-stage compilation 1) bindings 2) code
- Integrated stacks to improve performance
- DFA-based parsing probably too limited for
realistic applications - More info http//gsoap2.sourceforge.net