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
- 24-Oct-2009: It has been quiet for a while, but things will start moving again: new developers interested in helping with non-blocking part, team will start working on completing API, verifying against real apps. Stay tuned!
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.
Licensing
Aalto is licensed under 2 different licenses:
- Basic GPL ("totally Free") for Free Software (read GNU Manifesto for more), such as research projects and free/open software developers
Negotiatable commercial license by FasterXML, LLC for commercial entities that prefer full control over their usage of Aalto, including distribution without requirement for opening their source code. (Send email to info@fasterxml.com for more information.)
Possible changes?
Updated 24-Oct-2009: Some users (and potential users) have indicated they would prefer having other OS licenses available. We will seriously consider this point, if and when this becomes an issue. Currently it is worth noting that GPL does NOT affect usage of the library, so unless you need to (re)distribute Aalto jar, it should not be an issue. But we understand that for those who do need distribution this may be a concern.
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)
