微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JAXB概述

JAXBJava Architecture for XMLBinding 的缩写,它将XML Schema Java对象结合起来,提供XML文档和Java类互相转换的功能(根据Schema生成Java类,或将Java对象类树写到XML文档),从而使XML文件的读(unmarshalling)(marshalling)变得十分方便。

1.JAXB结构

这一节描述JAXB处理模型的组件和相互作用。

架构概述


如图所示,一个JAXB实现包含以下组件:

  • Schema编译器(Schema Compiler),将Schema和由Schema衍生的程序模块绑定。绑定过程由基于XML的绑定语言说明。
  • Schema生成(Schema generator),将一组程序模块映射到一个Schema。映射过程由程序注释(annotations)说明。
  • 绑定过程框架(Binding runtime Framework),提供XML文档操作、验证等所需的读(unmarshalling)和写(writing)功能

JAXB绑定过程

下图描述了JAXB绑定的具体过程:



JAXB数据绑定一般包括以下步骤:

  1. 生成XML Schema作为输入,由JAXB编译器生成对应的类。
  2. 编译类,编译所有的类。
  3. (Unmarshal)JAXB绑定框架能读取所有满足SchemaXML文件,而且也支持DOM节点、String buffersSAX等读取XML内容
  4. 生成对象树(Generate Content tree)Unmarshal后会生成JAXB生成类的实例的结构树;这些类树表示包含了XML文件的结构和内容
  5. 验证(Validate,可选),在读XML文档生成类实例前会验证XML文档,判断文档是否满足Schema的要求。如果在第6步修饰了文档内容,可以在写入XML文档前重新验证。
  6. 处理文档,可通过Java对象对XML数据进行修改
  7. (Marshal),处理后的数据可写入一个或多个XML文档。可在写入前对其验证。认采用UTF-8编码。

2.XML内容表示

JAXB支持生成的类放到不同的package中。一个package包含以下内容

  • XML element名或binding自定义生成java类名。
  • 一个ObjectFactory类,用于创建XML Element对应类的对象。

3.XML Schema 绑定

这一节主要说明JXAB使用的XML-Java绑定。所有这些绑定项都可以在全局上进行覆盖,或者使用自定义绑定声明。具体参见(JAXB文档)

简单类型定义

使用简单类型定义的Schema组件一般映射为Java属性。因为有不同类型的Schema组件,下面的Java属性特征包括

  • 基类型(Base type)
  • 集合类型(Collection type)
  • 断言(predicate)

余下的Java属性特征在Schema 组件中使用simple类型定义指定。

认数据类型绑定

下面部分解释Schema-to-JavaJAXBElementJava-to-Schema数据类型绑定。

Schema-to-Java 映射

Java数据类型比XML Schema要丰富的多。下表提供了JAXBXMLJava数据类型的对应关系:

XML Schema Type

Java Data Type

xsd:string

java.lang.String

xsd:integer

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: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

JAXBElement 对象

XMLElement的信息无法用Java映射类表示时,会以JAXBElement表示。该对象可以获得和设置对象名和值。

Java-to-Schema映射

Java Class

XML Data Type

java.lang.String

xs:string

java.math.BigInteger

xs:integer

java.math.BigDecimal

xs:decimal

java.util.Calendar

xs:dateTime

java.util.Date

xs:dateTime

javax.xml.namespace.QName

xs:QName

java.net.URI

xs:string

javax.xml.datatype.XMLGregorianCalendar

xs:anySimpleType

javax.xml.datatype.Duration

xs:duration

java.lang.Object

xs:anyType

java.awt.Image

xs:base64Binary

javax.activation.DataHandler

xs:base64Binary

javax.xml.transform.source

xs:base64Binary

java.util.UUID

xs:string


4.自定义生成类和Java元素

以下内容讲述如何自定义JAXB生成类和其他Java元素。

Schema-to-Java

自定义JAXB绑定声明允许自定义JAXB生成类,而不局限于XML Schema的限制,例如类名和包名的映射修改等。

JAXB提供了两种自定义XML Schema方法

在后面我们会提供自定义JAXB绑定的实例。

Java-to-Schema

javax.xml.bind.annotation包中提供的JAXBannotation可以用于自定义Java类元素同XML Schema的映射。

Java包注释总结

注释

描述和认设置

@XmlSchema

一个package映射到XML target namespace

认设置:

@XmlSchema (
xmlns = {},
namespace = "",
elementFormDefault = XmlNsForm.UNSET,
attributeFormDefault = XmlNsForm.UNSET
)

@XmlAccessorType

控制字段和属性认序列化。

认设置:

@XmlAccessorType (
value = Accesstype.PUBLIC_MEMBER
)

@XmlAccessorOrder

控制映射到XML元素的属性和字段的认排序。

认设置:

@XmlAccessorOrder (
value = AccessorOrder.UNDEFINED
)

@XmlSchemaType

允许自定义XML Schema内置类型的映射。

认设置:

@XmlSchemaType (
namespace =
"http://www.w3.org/2001/XMLSchema",
type = DEFAULT.class
)

@XmlSchemaTypes

用于多个@XmlSchemaType注释定义的容器的注释。

认设置:None

Java类注释总结

注释

描述和认设置

@XmlType

映射一个Java类到schema类型。

认设置:

@XmlType (
name = "##default",
propOrder = {""},
namespace = "##default",
factoryClass = DEFAULT.class,
factoryMethod = ""
)

@XmlRootElement

Schema类型的一个全局元素和类映射的对象进行关联。

认设置:

@XmlRootElement (
name = "##default",
namespace = "##default"
)

Java enum类型注释

注释

描述和认设置

@XmlEnum

一个Java类型映射到一个XML 简单类型。

认设置:

@XmlEnum ( value = String.class )

@XmlEnumValue

一个Java类型映射到一个XML 简单类型

认设置:None

@XmlType

Java类到Schema类型的映射。

认设置:
@XmlType (
name = "##default",
factoryMethod = ""
)

@XmlRootElement

Schema类型的一个全局元素和类映射的对象进行关联。

认设置:

@XmlRootElement (
name = "##default",
namespace = "##default"
)

Java属性和字段注释

注释

描述和认设置

@XmlElement

Maps a JavaBeans property or field to an XML element derived from a property or field name.

Default settings:

@XmlElement (
name = "##default",
nillable = false,
type = DEFAULT.class,
defaultValue = "\u0000"
)

@XmlElements

A container annotation for defining multiple@XmlElementannotations.

Default settings:None

@XmlElementRef

Maps a JavaBeans property or field to an XML element derived from a property or fields type.

Default settings:

@XmlElementRef (
name = "##default",
type = DEFAULT.class
)

@XmlElementRefs

A container annotation for defining multiple@XmlElementRefannotations.

Default settings:None

@XmlElementWrapper

Generates a wrapper element around an XML representation. It is typically used as a wrapper XML element around collections.

Default settings:

@XmlElementWrapper (
name = "##default",
nillable = false
)

@XmlAnyElement

Maps a JavaBeans property to an XML infoset representation or a JAXB element.

Default settings:

@XmlAnyElement (
lax = false,
value = W3CDomHandler.class
)

@XmlAttribute

Maps a JavaBeans property to an XML attribute.

Default settings:

@XmlAttribute (
name = ##default,
required = false,
namespace = "##default"
)

@XmlAnyAttribute

Maps a JavaBeans property to a map of wildcard attributes.

Default settings:None

@XmlTransient

Prevents the mapping of a JavaBeans property to an XML representation.

Default settings:None

@XmlValue

Defines mapping of a class to an XML Schema complex type with asimpleContentor an XML Schema simple type.

Default settings:None

@XmlID

Maps a JavaBeans property to an XML ID.

Default settings:None

@XmlIDREF

Maps a JavaBeans property to an XML IDREF.

Default settings:None

@XmlList

Maps a property to a list simple type.

Default settings:None

@XmlMixed

Marks a JavaBeans multi-valued property to support mixed content.

Default settings:None

@XmlMimeType

Associates the MIME type that controls the XML representation of the property.

Default settings:None

@XmlAttachmentRef

Marks a field/property that its XML form is a URI reference to mime content.

Default settings:None

@XmlInlineBinaryData

disables consideration of XOP encoding for data types that are bound to base64-encoded binary data in XML.

Default settings:None

工厂对象注释

Annotation

Description and Default Setting

@XmlElementDecl

Maps a factory method to an XML element.

Default settings:

@XmlElementDecl (
scope = GLOBAL.class,
substitutionHeadNamespace = "##default",
substitutionHeadName = ""
)

适配器注释

注释

描述和认设置

@XmlJavaTypeAdapter

Use the adapter that implements the@XmlAdapterannotation for custom marshalling.

Default settings:

@XmlJavaTypeAdapter ( type = DEFAULT.class )

@XmlJavaTypeAdapters

A container annotation for defining multiple@XmlJavaTypeAdapterannotations at the package level.

Default settings: None

原文地址:https://www.jb51.cc/xml/297613.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。