JAXB概述

前端之家收集整理的这篇文章主要介绍了JAXB概述前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

1.JAXB结构

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

架构概述


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

@H_404_102@
  • 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包含以下内容

    @H_404_102@
  • 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

    猜你在找的XML相关文章