JAXP 1.0 was developed under the Java Community Process as JSR-000005 and was released in March 2000. JAXP 1.0 emerged to fill in deficiencies in the SAX 1.0 and DOM 1.0 standards. Over time, industry standards evolved (SAX 2.0, DOM 2.0), and JAXP was expanded to address those and other requirements that were identified. It was developed as JSR-63 and released as JAXP 1.1 with many new enhancements in February 2001. The specifications have subsequently undergone minor modifications in the JCP maintainence phase and have been released as JAXP 1.2, which is packaged with the JAX pack.
Beginning with J2SE 1.4 (or JDK 1.4), JAXP API is included as a part of the standard distribution and is also part of the J2EE 1.3 specifications. This means that the API will be available in all Java 1.4 runtime environments and all J2EE 1.3 containers. This is noteworthy, because prior to JAXP, there were different versions of XML parsers and transformers from different vendors that used proprietary and incompatible APIs.
JAXP is an API, but more important, it is an abstraction layer. Keep in mind that JAXP does not provide a new XML parsing mechanism or add to SAX, DOM or JDOM. As Figure 9.1a shows, it provides a standard vendor- and implementation-independendent interface for developers to use and process XML data in a meaningful way, without bothering about the details of the underlying implementation.
As Figure 9.1b shows, the abstraction in JAXP is achived from its pluggable architecture, based on the Factory pattern. JAXP defines a set of factories that return the appropriate parser or transformer. Multiple providers can be plugged under the JAXP API as long as the providers are JAXP compliant, meaning that they implement the specifications through the interfaces.