Jakarta XML Binding
Jakarta XML Binding is a software framework that allows Jakarta EE 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 one of the APIs in the Jakarta EE platform, part of the Java Web Services Development Pack, and one of the foundations for WSIT. It was also part of the Java SE platform. As of Java SE 11, JAXB was removed. For details, see .
JAXB 1.0 was developed under the Java Community Process as JSR 31. In 2006 JAXB 2.0 was released under JSR 222 and Maintenance Release 2 released in December 2009. Reference implementations for these specifications were 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 to class representations. 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 data types to Java data types in JAXB.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 | java.lang.Object |
xsd:anySimpleType | java.lang.String |
xsd:duration | javax.xml.datatype.Duration |
xsd:NOTATION | javax.xml.namespace.QName |
Versions
- Java SE 9: JAXB 2.3.0
- Java SE 8: JAXB 2.2.8
- Java SE 7: JAXB 2.2.3
- Java SE 6: JAXB 2.0
Articles