您的位置:首页 > 编程语言 > Java开发

JAXB概述

2014-12-01 16:56 155 查看
JAXB是Java 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数据绑定一般包括以下步骤:
生成类,XML
Schema作为输入,由JAXB编译器生成对应的类。

编译类,编译所有的类。

(Unmarshal),JAXB绑定框架能读取所有满足Schema的XML文件,而且也支持从DOM节点、String
buffers、SAX等读取XML内容。

生成对象树(Generate Content tree),Unmarshal后会生成JAXB生成类的实例的结构树;这些类树表示包含了XML文件的结构和内容。

验证(Validate,可选),在读XML文档生成类实例前会验证XML文档,判断文档是否满足Schema的要求。如果在第6步修饰了文档内容,可以在写入XML文档前重新验证。

处理文档,可通过Java对象对XML数据进行修改。

(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-Java,JAXBElement和Java-to-Schema数据类型绑定。
Schema-to-Java
映射

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

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 field’s 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jaxb xml java