Java Architecture for XML Binding
Java Architecture for XML Binding (JAXB) is a software framework that allows Java developers to map Java classes to XML representations. JAXB provides two main features: the ability to marshal Java objects into XML and the inverse, i.e. to unmarshal XML back into Java objects. In other words, JAXB allows storing and retrieving data in memory in any XML format, without the need to implement a specific set of XML loading and saving routines for the program's class structure. It is similar to xsd.exe
and XmlSerializer
in the .NET Framework.
JAXB is particularly useful when the specification is complex and changing. In such a case, regularly changing the XML Schema definitions to keep them synchronised with the Java definitions can be time consuming and error-prone.
JAXB is a part of the Java SE platform and one of the APIs in the Java EE platform, and is part of the Java Web Services Development Pack (JWSDP). It is also one of the foundations for WSIT. As of Java 11, JAXB will be removed from the Java SE platform and moved to the Jakarta EE project. For details, see JEP 320.
JAXB 1.0 was developed under the Java Community Process as JSR 31.[1] In 2006 JAXB 2.0 was released under JSR 222 and Maintenance Release 2 released in December 2009.[2] Reference implementations for these specifications are available under the CDDL open source license at java.net.
Usage
The tool "xjc" can be used to convert XML Schema and other schema file types (as of Java 1.6, RELAX NG, XML DTD, and WSDL are supported experimentally) to class representations.[3] Classes are marked up using annotations from javax.xml.bind.annotation.* namespace, for example, @XmlRootElement and @XmlElement. XML list sequences are represented by attributes of type java.util.List. Marshallers and Unmarshallers are created through an instance of JAXBContext.
In addition, JAXB includes a "schemagen" tool that can essentially perform the inverse of "xjc", creating an XML Schema from a set of annotated classes.
Default data type bindings
The table below lists the mappings of XML Schema (XSD) data types to Java data types in JAXB.[4]
XML Schema Type | Java Data Type |
---|---|
xsd:string
|
java.lang.String
|
xsd:integer
|
java.math.BigInteger
|
xsd:positiveInteger
|
java.math.BigInteger
|
xsd:int
|
int
|
xsd:long
|
long
|
xsd:short
|
short
|
xsd:decimal
|
java.math.BigDecimal
|
xsd:float
|
float
|
xsd:double
|
double
|
xsd:boolean
|
boolean
|
xsd:byte
|
byte
|
xsd:QName
|
javax.xml.namespace.QName
|
xsd:dateTime
|
javax.xml.datatype.XMLGregorianCalendar
|
xsd:base64Binary
|
byte[]
|
xsd:hexBinary
|
byte[]
|
xsd:unsignedInt
|
long
|
xsd:unsignedShort
|
int
|
xsd:unsignedByte
|
short
|
xsd:unsignedLong
|
java.math.BigDecimal
|
xsd:time
|
javax.xml.datatype.XMLGregorianCalendar
|
xsd:date
|
javax.xml.datatype.XMLGregorianCalendar
|
xsd:g
|
javax.xml.datatype.XMLGregorianCalendar
|
xsd:anySimpleType [5]
|
java.lang.Object
|
xsd:anySimpleType [6]
|
java.lang.String
|
xsd:duration
|
javax.xml.datatype.Duration
|
xsd:NOTATION
|
javax.xml.namespace.QName
|
Versions
- Java SE 9: JAXB 2.3.0 [7] (in module
java.xml.bind
; this module is marked as deprecated [8]) - Java SE 8: JAXB 2.2.8 [9]
- Java SE 7: JAXB 2.2.3 (JSR 222, maintenance release 2) [10]
- Java SE 6: JAXB 2.0 (JSR 222) [11]
See also
- XML data binding
- JiBX – one of the fastest XML data binders [12][13]
- XMLBeans – a similar and complementary technology to JAXB from Apache Software Foundation
- TopLink – an object to relational and object to XML mapper from Oracle that supports JAXB 1.0
- EclipseLink MOXy – open source implementation of JAXB and object XML mapping services under the Eclipse Foundation
- Liquid XML Studio – Commercial tool for XML data binding code generation
- Simple XML Serialization – An alternative to JAXB, enabling rapid development of XML configuration and communication systems
References
- ↑ "JSRs: Java Specification Requests. JSR 31: XML Data Binding Specification". http://jcp.org/en/jsr/detail?id=031. Retrieved 2011-02-15.
- ↑ "JSRs: Java Specification Requests. JSR 222: Java Architecture for XML Binding (JAXB) 2.0". http://jcp.org/en/jsr/detail?id=222. Retrieved 2011-02-15.
- ↑ "xjc - Java Architecture for XML Binding". http://download.oracle.com/javase/6/docs/technotes/tools/share/xjc.html. Retrieved 2011-02-15.
- ↑ "Using JAXB Data Binding: Standard Data Type Mapping". http://download.oracle.com/docs/cd/E12840_01/wls/docs103/webserv/data_types.html#wp223908.
- ↑ for
xsd:element
of this type - ↑ for
xsd:attribute
of this type - ↑ "Which JAXB RI is included in which JDK?". https://javaee.github.io/jaxb-v2/doc/user-guide/release-documentation.html#deployment-which-jaxb-ri-is-included-in-which-jdk.
- ↑ "Deprecated module java.xml.bind". https://docs.oracle.com/javase/9/docs/api/java.xml.bind-summary.html.
- ↑ "Jaxb 2.2.8 (JDK 8)". https://java.net/jira/browse/JAXB/fixforversion/16521. Retrieved 2015-03-01.
- ↑ "Java SE 7: Java XML Technology Enhancements". http://docs.oracle.com/javase/7/docs/technotes/guides/xml/enhancements.html. Retrieved 2012-03-21.
- ↑ "Java SE 6: Features and Enhancements". http://www.oracle.com/technetwork/java/javase/features-141434.html. Retrieved 2012-03-21.
- ↑ Dennis Sosnoski. "XML and Java technologies: Data binding, Part 2: Performance". http://www.ibm.com/developerworks/xml/library/x-databdopt2/. Retrieved 2011-02-15.
- ↑ "XML Binding Frameworks in the Context of Service-Oriented Architecture". http://soa.sys-con.com/node/114130?page=0,2. Retrieved 2011-02-15.
External links
- JAXB home page Reference Implementation on Project GlassFish
- previous JAXB home page
- A JAXB Tutorial by Wolfgang Laun
- JSR 222 (JAXB 2.0)
- JSR 31 (JAXB 1.0)
- The Java EE 5 Tutorial - Binding between XML Schema and Java Classes JAXB chapter of the Java EE 5 Tutorial
- JAXB Wizard
- JAXB Tutorials
Articles
- Generate an XML Document from an Object Model with JAXB 2
- JAXB 2.0 offers improved XML binding in Java
- XML and Java technologies: Data binding, Part 2: Performance
- JAXB Tutorial for Java XML Binding by Java Code Geeks