JAXB概述

1 篇文章 0 订阅

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

1.JAXB结构

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

架构概述

JAXB Architecture Overview

 

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

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

JAXB绑定过程

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

JAXB Binding Process


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的方法:

  • XML Schema中的内联注释
  • 提供一个额外文件的文件给JAXB绑定编译器,该文件包含自定义绑定声明。

在后面我们会提供自定义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",
    propOrder = {""},
    namespace = "##default",
    factoryClass = DEFAULT.class,
    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,
    namespace = "##default",
    type = DEFAULT.class,
    defaultValue = "\u0000"
)

@XmlElements

A container annotation for defining multiple @XmlElement annotations. 

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",
    namespace = "##default",
    type = DEFAULT.class
)

@XmlElementRefs

A container annotation for defining multiple @XmlElementRef annotations. 

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",
    namespace = "##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 a simpleContent or 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,
    namespace = "##default",
    substitutionHeadNamespace = "##default",
    substitutionHeadName = ""
)

 

适配器注释

注释

描述和默认设置

@XmlJavaTypeAdapter

Use the adapter that implements the @XmlAdapter annotation for custom marshalling. 

Default settings:

@XmlJavaTypeAdapter ( type = DEFAULT.class )

@XmlJavaTypeAdapters

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

Default settings: None



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值