The Aalto XML processor is a next-generation StAX XML processor implementation. It is not directly related to other existing mature implementations (such as Woodstox or Sun Java Streaming XML Parser), although it did come about as a prototype for evaluating implementation strategies that differ from those traditionally used for Java-based parsers.
Two main goals (above and beyond stock StAX/SAX API implementation) are:
- Ultra-high performance parsing by making the Common Case Fast (similar to original RISC manifesto). This may mean limiting functionality, but never compromising correctness. XML 1.0 compliancy is not sacrificed for speed.
- Allowing non-block, asynchronous parsing: it should be possible to "feed" more input and incrementally get more XML events out, without forcing the current thread to block on I/O read operation.
The current implementation goes a long way towards both goals, proving that they are both achievable using a single implementation.
News
11-Feb-2011: Version 0.9.7 released; available from Maven repos (and Download Page)
- 11-Oct-2010: Version 0.9.6 released
01-Sep-2010: Moving source code to github, specifically to http://github.com/FasterXML/aalto-xml. Licensing changed to basic Apache License 2.0
20-Mar-2009: Release 0.9.5: Minor change; the only visible thing is that classes are now under com.fasterxml.aalto package
- 04-Feb-2009: Release 0.9.4: Complete StAX 1.0 (API, feature set) implementation: now includes coalescing mode and namespace-repairing stream writers!
- Licensing clarified as GPL or for-fee commercial license (see 'Licensing' section for more
- 21-Jan-2009: Release 0.9.3: complete Typed Access API (with official stax2-api-3.0.0 jar), bug fixes. Licensing clarified as GPL or for-fee commercial license
- 13-Mar-2008: Release 0.9.2: bug fixes, implemented StAX 2 (v3.0) Typed Access API (at level comparable to Woodstox 3.9.2)
- 13-Mar-2008: Release 0.9.1: minor fixes, improvements, non-blocking (async) parser getting more complete.
- 21-Feb-2008: Fixed a small but important typo in Usage section below -- property names were wrong (thanks Lowell!)
- 05-Feb-2008: Hacked together this home page, including downloadable implementation jar.
Documentation
Licensing
Aalto is licensed under Apache License 2.0.
Features
Current version supports non-validating XML 1.0 subset (minus handling of DTD subsets -- that is, entity expansion and attribute defaulting have not been implemented). Supports for Stax2 validation interface is incomplete.
Stax 1.0 API is implemented for the most part, with following main exceptions:
- Non-namespace-aware mode (optional feature) is not implemented for stream writer
The main remaining goal for 1.0 release is to complete the non-blocking (asynchronous) parsing mode, which means:
- Finalizing additional API needed for non-blocking access
- Completing implementation (bootstrapping, handling xml declaration)
There is only one additional dependency, beyond requirement to have APIs (Stax, SAX) available either as part of JDK (6.0) or separately: since Aalto implements Stax2 API (developed as part of Woodstox project), Stax2 API jar is needed along with Aalto jar. Version 3.0 (which is distributed along with Woodstox 4.0) should be used.
As indicated by above, Aalto features a reasonably complete StAX2 implementation. Some features (most notably Validation API) are only partially implemented, but others such as Typed Access API are complete. Usage Implementation jar contains necessary service definition files (under META-INF/services directory), but it may be necessary to specify factory classes explicitly, using normal JAXP/Stax settings. System properties to use are:
-Djavax.xml.stream.XMLInputFactory=com.fasterxml.wool.stax.InputFactoryImpl
-Djavax.xml.stream.XMLOutputFactory=com.fasterxml.wool.stax.OutputFactoryImpl
-Djavax.xml.stream.XMLEventFactory=com.fasterxml.wool.stax.EventFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=com.fasterxml.wool.sax.SAXParserFactoryImpl
Download
See Download page.
Testimonials
Given potential benefits of Aalto, after testing it, you may be interested in using it for real production systems. But can you trust it will work as well as it did during testing?
One possiblity is to have a look at current known users of Aalto (we will try to get list more complete -- this is solely based on voluntary user submissions)
