axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James M Snell" <>
Subject Re: Parsing stuff
Date Thu, 19 Apr 2001 04:29:27 GMT
Well... coincidentally, in between implementing a simple version of the 
serialization/deserialization architecture for the current Axis codebase 
and writing a new article for developerWorks, I took some time last night 
to throw together the attached bit of code that does the same thing.  This 
code is pretty basic, and since I'm not going to claim to be an expert in 
Java thread management, may not be completely right on.  But, it does work 
(though the object model does need a bit of cleanup)

This code gives us:

    1. Streaming support
    2. Lazy parsing
    3. Much better performance (for a simple SOAP envelope with 2 headers 
and a single body element, I was noticing speeds averaging about 10 
milliseconds for each loop in the code contained in the class 
(see the zip file) compared to an average of 40-50 milliseconds per loop 
using a DOM approach (I'm using Xerces2 in nonvalidating mode, btw).

I wrote this last night between 11:00pm and 2:00am so please be gentle 
with your flames ;-) 

- James Snell
     Software Engineer, Emerging Technologies, IBM (online) (offline)

Please respond to 
To:     "''" <>
Subject:        Parsing stuff

I've got a version of the multi-thread SAX parse working, though it needs 
bit of cleanup.  It's mostly a proof-of-concept.

I'm going to see if I can make some improvements, clean it up a bit, and
post it to the list tomorrow for review.

Basically, it does exactly what we talked about.  When you create a 
around an InputSource, it spawns a thread which parses the <envelope>
element, makes sure it looks OK, and then suspends.  When anyone asks for
something from the Message (i.e. getHeaderByName(QName)), the parsing 
wakes up and runs until it finds the desired thing or runs out of XML
(initially this just means getting to the end of the headers).  As it 
it creates SOAPHeader objects, which contain records of the SAX events
inside them, suitable for replaying to any ContentHandler.  Meanwhile the
other thread (the one that made the getHeaderByName() call) blocks until 
parse is complete.

Glen Daniels
Engineering Manager
                                Building cool stuff for web developers

View raw message