Java Architecture for XML Binding (JAXB) позволяет Java разработчикам ставить в соответствие Java классы и XML представления. JAXB предоставляет две основные возможности: маршаллирование Java объектов в XML и наоборот, то есть демаршализация из XML обратно в Java объект. Другими словами, JAXB позволяет хранить и извлекать данные в памяти в любом XML-формате, без необходимости выполнения определённого набора процедур загрузки и сохранения XML. Он похож на xsd.exe
и XmlSerializer в .NET Framework.
JAXB особенно полезен, когда спецификация является сложной и меняющейся. В этом случае, постоянные изменения схемы XML определений для синхронизации их с определениями Java могут занять много времени и быть подвержены ошибкам.
JAXB является частью Java SE платформы и является одной из API в Java EE платформе, и является частью Java Web Services Development Pack (JWSDP). Он также является базисом для WSIT. JAXB является частью SE версии 1.6.
JAXB 1.0 был разработан в рамках Java Community Process как JSR 31.[1] Как и в 2006, JAXB 2.0 разрабатывается в рамках JSR 222.[2] Эталонная реализация для этих спецификаций доступна как CDDL open source license на java.net.
Использование
Инструмент «xjc» может использоваться для конвертации XML схемы и схем других файловых типов (как в Java 1.6, RELAX NG, XML DTD, и WSDL поддерживаются экспериментально) в классовые представления.[3] Классы помечаются при помощи аннотаций из пространства имен javax.xml.bind.annotation.*, например, @XmlRootElement и @XmlElement. Последовательности XML-списков представлены атрибутами типа java.util.List. Сериализаторы и десериализаторы создаются через экземпляр JAXBContext
Кроме того, JAXB включает в себя инструмент «schemagen», который может по существу выполнять обратное к «xjc», создавая XML-схему из набора аннотированных классов.
Связывание типов данных по умолчанию
В таблице ниже перечислены отображения типов данных XML схемы (XSD) и типов данных Java в 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 (для элементов этого типа)
|
java.lang.Object
|
xsd: anySimpleType (для атрибутов этого типа)
|
java.lang.String
|
xsd: duration
|
javax.xml.datatype.Duration
|
xsd:NOTATION
|
javax.xml.namespace.QName
|
Версии
- Java SE 7: JAXB 2.2.3 (JSR 222, maintenance release 2)[5]
- Java SE 6: JAXB 2.0 (JSR 222)[6]
Также смотрите
Примечания
Ссылки
Статьи