JAXB概述
2014-12-01 16:56
155 查看
JAXB是Java Architecture for XMLBinding
的缩写,它将XML Schema
和Java对象结合起来,提供XML文档和Java类互相转换的功能(根据Schema生成Java类,或将Java对象类树写到XML文档),从而使XML文件的读(unmarshalling)写(marshalling)变得十分方便。
如图所示,一个JAXB实现包含以下组件:
Schema编译器(Schema
Compiler),将Schema和由Schema衍生的程序模块绑定。绑定过程由基于XML的绑定语言说明。
Schema生成器(Schema
generator),将一组程序模块映射到一个Schema。映射过程由程序注释(annotations)说明。
绑定过程框架(Binding runtime Framework),提供XML文档操作、验证等所需的读(unmarshalling)和写(writing)功能。
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编码。
从XML element名或binding时自定义名生成的java类名。
一个ObjectFactory类,用于创建XML
Element对应类的对象。
3.XML Schema
这一节主要说明JXAB使用的默认XML-Java绑定。所有这些绑定项都可以在全局上进行覆盖,或者使用自定义绑定声明。具体参见(JAXB文档)。
基类型(Base type)
集合类型(Collection type)
断言(predicate)
余下的Java属性特征在Schema
组件中使用simple类型定义指定。
Schema-to-Java
映射
Java数据类型比XML Schema要丰富的多。下表提供了JAXB中XML和Java数据类型的对应关系:
JAXBElement
对象
当XMLElement的信息无法用Java映射类表示时,会以JAXBElement表示。该对象可以获得和设置对象名和值。
Java-to-Schema映射
Schema的限制,例如类名和包名的映射修改等。
JAXB提供了两种自定义XML Schema的方法:
XML Schema中的内联注释
提供一个额外文件的文件给JAXB绑定编译器,该文件包含自定义绑定声明。
在后面我们会提供自定义JAXB绑定的实例。
Schema的映射。
Java包注释总结
Java类注释总结
Java enum类型注释
Java属性和字段注释
工厂对象注释
适配器注释
的缩写,它将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生成类,而不局限于XMLSchema的限制,例如类名和包名的映射修改等。
JAXB提供了两种自定义XML Schema的方法:
XML Schema中的内联注释
提供一个额外文件的文件给JAXB绑定编译器,该文件包含自定义绑定声明。
在后面我们会提供自定义JAXB绑定的实例。
Java-to-Schema
javax.xml.bind.annotation包中提供的JAXBannotation可以用于自定义Java类元素同XMLSchema的映射。
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 |
相关文章推荐
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统
- java很神奇 用swing制作欢迎屏幕
- java自动生成验证码插件-kaptcha
- ITeye上“10个人,8个人不会解释这个问题”的帖子
- Java IO与NIO的一些文件拷贝测试
- Java反射随记