Welcome to Apache Axiom

The Apache Axiom™ library provides an XML Infoset compliant object model implementation which supports on-demand building of the object tree. It supports a novel "pull-through" model which allows one to turn off the tree building and directly access the underlying pull event stream using the StAX API. It also has built in support for XML Optimized Packaging (XOP) and MTOM, the combination of which allows XML to carry binary data efficiently and in a transparent manner. The combination of these is an easy to use API with a very high performant architecture!

Developed as part of Apache Axis2, Apache Axiom is the core of Apache Axis2. However, it is a pure standalone XML Infoset model with novel features and can be used independently of Apache Axis2.

Apache Axiom, Axiom, Apache, the Apache feather logo, and the Apache Axiom project logo are trademarks of The Apache Software Foundation.

Key Features

  • Full XML Infoset compliant XML object model
  • StAX based builders with on-demand building and pull-through
  • XOP/MTOM support offering direct binary support
  • Convenient SOAP Infoset API on top of Axiom
  • Two implementations included:
    • Linked list based implementation
    • W3C DOM supporting implementation
  • Highly performant

Latest Release

2nd December 2012 - Apache Axiom Verson 1.2.14 Released!

Axiom 1.2.14 contains fixes for more than twenty JIRA issues as well as lots of other improvements.

Users upgrading to 1.2.14 should take into account the following changes:

  • Axiom now uses Woodstox 4.1.x as StAX implementation (although 3.2.x and 4.0.x are still supported).
  • OMFactory implementations for DOOM are now stateless.
  • Several deprecated classes have been moved to a new JAR file named axiom-compat and are no longer included in the core artifacts (axiom-api, axiom-impl and axiom-dom).

For more information about the possible impact on existing application code of these changes, please refer to the user guide.

Previous Releases

2nd April 2012 - Apache Axiom Version 1.2.13 Released!

[Download Axiom 1.2.13]

Axiom 1.2.13 contains fixes for over thirty JIRA issues as well as lots of other improvements, mainly related to XOP/MTOM processing, namespace handling, DOM support, documentation and code quality.

The most prominent change in 1.2.13 is that Axiom no longer uses its own MIME parser, but instead relies on Apache James Mime4J for XOP/MTOM processing. This was done in order to support streaming of the content of MIME parts in XOP/MTOM messages: they can now be processed without writing them to memory or disk first. This also applies to the root/SOAP part, which in previous versions was always read into memory before parsing could start.

For more information about the possible impact on existing application code of the changes included in Axiom 1.2.13, please refer to the user guide.

2nd July 2011 - Apache Axiom Version 1.2.12 Released!

Axiom 1.2.12 contains fixes for the following JIRA issues:

  • [AXIOM-63] - OMXMLStreamReaderValidator incorrectly reports mismatched END_ELEMENT events
  • [AXIOM-305] - Need OMElement.getNamespaceURI() convenience method
  • [AXIOM-354] - Potential class loader leak caused by the thread local in org.apache.axiom.util.UIDGenerator
  • [AXIOM-356] - OMElement#resolveQName implementations use incorrect algorithm to resolve unprefixed QNames
  • [AXIOM-358] - OMStAXWrapper#hasNext may return incorrect value
  • [AXIOM-359] - OMProcessingInstructionImpl incorrectly trims the value passed in the constructor
  • [AXIOM-364] - Unnecessary cast to byte while scanning for first MIME boundary
  • [AXIOM-365] - Add ConcurrentModificationException support to iterators

3rd February 2011 - Apache Axiom Version 1.2.11 Released!

Axiom 1.2.11 is a maintenance release to support the upcoming Axis2 1.6 release. It also introduces a couple of new APIs that make it easier to support alternative Axiom implementations and that eliminate the need to refer to internal Axiom APIs.

Resolved JIRA issues:

  • [AXIOM-12] - OMOutputFormat: doSWA and doOptimize should be mutually exclusive...plus we need doOptimizeThreshold
  • [AXIOM-24] - OMDocument#serializeAndConsume doesn't consume the document
  • [AXIOM-172] - OMChildrenQNameIterator doesn't work correctly if hasNext() is not called before next()
  • [AXIOM-274] - Refactor/deprecate MIMEOutputUtils
  • [AXIOM-275] - Implement non JavaMail implementation of MultipartWriter
  • [AXIOM-313] - Add a new getDocumentElement method to StAXOMBuilder that allows to discard the OMDocument
  • [AXIOM-333] - getFirstChildWithName should not read the next element.
  • [AXIOM-346] - Enhance OMStAXWrapper/OMNavigator to work with OMDocument objects
  • [AXIOM-351] - Links in Javadoc JARs are broken
  • [AXIOM-352] - StAXDialectDetector doesn't recognize com.bea.core.weblogic.stax_1.7.0.0.jar

Please refer to the user guide for additional information about changes in Axiom 1.2.11.

30th October 2010 - Apache Axiom Version 1.2.10 Released!

Axiom 1.2.10 is a maintenance release that contains the following improvements:

  • Improved DOM compatibility and performance for DOOM. Users running Rampart on Axis2 1.5.2 may want to upgrade Axiom to 1.2.10 to take advantage of these improvements.
  • Improved interoperability with various StAX implementation, in particular support for Woodstox 4.0.
  • It is now possible to specify a configuration when requesting an XMLStreamWriter from StAXUtils, similarly to what is already possible for XMLStreamReader instances. This feature is required to support the next Abdera release (see ABDERA-267).

13th June 2010 - Apache Axiom Version 1.2.9 Released!

Note: Starting with release 1.2.9, Axiom requires Java 1.5. While the API is still compatible with Java 1.4, Axiom relies on classes from the Java 1.5 runtime environment. Some of its dependencies also require Java 1.5.

Highlights in this release:

  • Improved interoperability with StAX implementations other than Woodstox. Axiom now detects the StAX implementation that is used and works around interoperability issues. In particular, version 1.2.9 solves the longstanding concurrency issue that occurs when using Axiom with SJSXP.
  • Better control over XMLInputFactory and XMLOutputFactory settings. It is now possible to use property files to define application wide default settings for the StAX factories used by StAXUtils. It is also possible to specify a particular configuration when requesting a StAX parser from StAXUtils.
  • Improved XOP/MTOM handling. Axiom 1.2.9 is able to stream binary/base64 data in several situations where this was not possible previously. The behavior of Axiom 1.2.9 is also more consistent with respect to XOP encoded data sent to the application, solving some issues where attachments were processed incorrectly.
  • Improved documentation. There is now more and better Javadoc. Also, a user guide is available in HTML and as PDF.
  • Better OSGi support.
  • Improved consistency of the core interfaces. E.g. OMDocument now has a build method.

Resolved JIRA issues:

  • WSCOMMONS-547 apache-release profile not working
  • WSCOMMONS-546 axiom unit test failure in axiom-parser-tests
  • WSCOMMONS-545 Legal issue related to inclusion of Jaxen source code in Axiom
  • WSCOMMONS-541 Create replacement for UUIDGenerator
  • WSCOMMONS-540 CustomBuilder interface is not well defined for optimized binary data
  • WSCOMMONS-536 OMStAXWrapper generated illegal event code of 0
  • WSCOMMONS-535 StreamingOMSerializer drops "xml" prefixes
  • WSCOMMONS-534 "prefix cannot be null or empty" with SJSXP
  • WSCOMMONS-530 AXIOM DOM implementation of SOAPFaultDetailImpl only serializes the first child node whereas the LLOM implementation serializes all children
  • WSCOMMONS-528 Unable to build axiom-api with IBM JDK
  • WSCOMMONS-526 SOAPEnvelope toString() behavior inconsistant dependent on content
  • WSCOMMONS-518 Some consumers of Axiom need direct access to the orignal parser/XMLStreamReader
  • WSCOMMONS-516 Axiom Bundles are "named" the same, appear to be running twice in ServiceMix/Karaf
  • WSCOMMONS-513 Behavior of insertSiblingAfter and insertSiblingBefore is not well defined for orphan nodes
  • WSCOMMONS-505 Build Error when creating source jar fie on modules that do not have source directory
  • WSCOMMONS-502 Backward imcompatibility with Apache Abdera in Axiom 1.2.9-SNAPSHOT
  • WSCOMMONS-489 StAXUtils incorrectly assumes that XMLInputFactory and XMLOutputFactory instances are thread safe
  • WSCOMMONS-488 The sequence of events produced by OMStAXWrapper with inlineMTOM=false is inconsistent
  • WSCOMMONS-487 DataHandler extension should support deferred loading/parsing
  • WSCOMMONS-485 The sequence of events produced by OMStAXWrapper for XOP:Include is inconsistent
  • WSCOMMONS-483 provide help how to find a datahandler when you see "Cannot get InputStream from DataHandler.javax.activation.UnsupportedDataTypeException: no object DCH for MIME type ..."
  • WSCOMMONS-481 Add a method to OMFactory to create an OMSourcedElement using a QName
  • WSCOMMONS-480 Some of the serialize/serializeAndConsume methods are declared on the wrong interface
  • WSCOMMONS-479 OMDocument should have a "build" method
  • WSCOMMONS-478 OMChildrenIterator based on local name has bug in isEqual() method
  • WSCOMMONS-477 Attachment order is not preserved in Axiom
  • WSCOMMONS-462 axiom-api 1.2.8 is missing OSGi Import-Package to javax.xml.stream.util under JDK 1.5
  • WSCOMMONS-461 Allow StAXUtils to apply properties to XMLInputFactory and XMLOutputFactory
  • WSCOMMONS-457 Build fails on JDK 1.6
  • WSCOMMONS-452 Merge org.apache.axis2.format.ElementHelper into org.apache.axiom.om.util.ElementHelper
  • WSCOMMONS-446 Serializing an MTOM SOAPEnvelope inlines the attachments
  • WSCOMMONS-437 Define a common superinterface for SOAPFaultCode and SOAPFaultSubCode
  • WSCOMMONS-435 org.apache.axiom.om.impl.dom.ParentNode.removeChild(Node) is broken
  • WSCOMMONS-433 When inlining a DataHandler as Base64, OMTextImpl doesn't stream the data
  • WSCOMMONS-432 Make OMAbstractFactory work correctly in an OSGi runtime environment
  • WSCOMMONS-417 Clarify the status of the JavaMail dependency
  • WSCOMMONS-414 Namespace issue in SOAP message generated
  • WSCOMMONS-111 Careless exception handling needs to be fixed