JAXB Examples

以下各节描述如何使用 JAXB RIBinding 包中包含的示例应用程序。 JAXB RIBinding 包可从http://jaxb.java.net获得。下载并安装 JAXB RIBinding 软件。这些示例位于 jaxb-ri-install /samples/目录中。这些示例演示并构建在关键的 JAXB 功能和概念上。按照显示的 Sequences 执行以下步骤。

阅读本节后,您应该对 JAXB 感到足够自在,可以:

本文档描述了三组示例:

Note:

基本和自定义示例基于“采购订单”业务情景。每个使用针对 XMLPatternpo\.xsd编写的 XML 文档po\.xml。这些文档来自 David_Fallside 编辑的W3C XMLPattern 第 0 部分:入门

基本和自定义示例目录包含几个基本文件:

下表简要描述了基本的,自定义的和 java-to-schema JAXB 示例。

表:基本的 JAXB 示例

Example Name Description
Modify Marshal 演示如何修改 Java 内容树。
Unmarshal Validate 演示如何在编组期间启用验证。

表:定制 JAXB 示例

Example Name Description
Customize Inline 演示如何通过在 XMLPattern 中使用内联 注解 来自定义默认的 JAXB 绑定。
Datatype Converter 说明了 XML simpleType定义与 Java 数据类型的替代性更简洁的绑定,类似于 Customize Inline 示例。
External Customize 说明如何使用外部绑定声明文件将只读 Pattern 的绑定定制传递给 JAXB 绑定编译器。

表:Java 到 Pattern 的 JAXB 示例

Example Name Description
Create Marshal 演示如何使用 ObjectFactory 类创建 Java 内容树并将其编组为 XML 数据。它还演示了如何向 JAXB List 属性添加内容。
XmlAccessorOrder 说明如何在 Java 类中使用@XmlAccessorOrder@XmlType\.propOrderMap注解 来控制 Java 内容对 XML 内容进行编组或解组的 Sequences。
XmlAdapter 说明如何使用interfaceXmlAdapter和注解@XmlJavaTypeAdapter提供自定义 XML 内容到HashMap(字段)的自定义 Map,该字段使用整数(int)作为键和字符串(String)作为值。
XmlAttribute 说明如何使用 注解@XmlAttribute定义要作为 XML 属性处理的属性或字段。
XmlRootElement 说明如何使用 注解@XmlRootElement为相应类的 XMLPattern 类型定义 XML 元素名称。
XmlSchemaType Class 说明如何使用 注解@XmlSchemaType来定制属性或字段到 XML 内置类型的 Map。
XmlType 说明如何使用 注解@XmlType将类或enum类型 Map 到 XMLPattern 类型。

JAXB 编译器选项

JAXB XJCPattern 绑定编译器将源 XMLPattern 转换或绑定到 Java 编程语言中的一组 JAXB 内容类。在 JAXB RIBinding 包中,编译器类xjc的提供方式为:在 Solaris/Linux 上为xjc\.sh,在 Windows 上为xjc\.batxjc类包含在 JDK 类库中(在 tools.jar 中)。

xjc\.shxjc\.bat都使用相同的命令行选项。您可以通过不带任何选项或使用\-helpswitch调用脚本来显示快速使用说明。语法如下:

xjc [-options ...] <schema file/URL/dir/jar>... [-b >bindinfo<] ...

如果指定dir,将编译目录中的所有架构文件。如果指定jar,将编译/META-INF/sun-jaxb.episode 绑定文件。

xjc命令行选项如下:

JAXBPattern 生成器选项

JAXBPattern 生成器schemagen为 Java 类中引用的每个命名空间创建一个 Pattern 文件。可以使用平台的bin目录中的相应schemagen shell 脚本来启动 Pattern 生成器。Pattern 生成器仅处理 Java 源文件。如果您的 Java 源引用了其他类,则必须从您的系统 CLASSPATH 环境变量中访问这些源;否则,生成架构时将发生错误。无法控制生成的 Pattern 文件的名称。

您可以通过不带任何选项的脚本调用或使用\-help选项来显示快速使用说明。语法如下:

schemagen [-d path] 
    [java-source-files]

\-d path 选项指定处理器生成的类文件和javac生成的类文件的位置。

关于架构到 Java 的绑定

当针对基本示例中使用的po\.xsd XMLPattern(Unmarshal Read,Modify Marshal,Unmarshal Validate)运行 JAXB 绑定编译器时,JAXB 绑定编译器会生成一个名为primer\.po的 Java 程序包,其中包含下表中所述的类。

表:基本示例中的 Pattern 派生的 JAXB 类

Class Description
primer/po/Items\.java 绑定到名为Items的架构complexType的公共interface。
primer/po/ObjectFactory\.java 公共类扩展com\.sun\.xml\.bind\.DefaultJAXBContextImpl;用于创建指定interface的实例。例如,ObjectFactory createComment\(\)方法实例化Comment对象。
primer/po/PurchaseOrderType\.java 绑定到名为PurchaseOrderType的架构complexType的公共interface。
primer/po/USAddress\.java 绑定到名为USAddress的架构complexType的公共interface。

下表描述了这些类及其对基本示例的源 XML 架构的特定绑定。

表:基本示例的 Pattern 到 Java 绑定

XML Schema JAXB Binding
<xsd:schema xmlns:xsd=

"http://www.w3.org/2001/XMLSchema">
<xsd:complexType
name="PurchaseOrderType">
<___+136+>
<xsd:element
name="shipTo"
type="USAddress"/>
<xsd:element
name="billTo"
type="USAddress"/>
<xsd:element
ref="comment"
minOccurs="0"/>
<xsd:element
name="items"
type="Items"/>
</xsd:sequence>
<xsd:attribute
name="orderDate"
type="xsd:date"/>
</xsd:complexType>
PurchaseOrderType\.java
<xsd:complexType
name="USAddress">
<___+138+>
<xsd:element
name="name"
type="xsd:string"/>
<xsd:element
name="street"
type="xsd:string"/>
<xsd:element
name="city"
type="xsd:string"/>
<xsd:element
name="state"
type="xsd:string"/>
<xsd:element
name="zip"
type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute
name="country"
type="xsd:NMTOKEN"
fixed="US"/>
</xsd:complexType>
USAddress\.java
<xsd:complexType
name="Items">
<___+140+>
<xsd:element
name="item"
minOccurs="1"
maxOccurs =“ unbounded”>
Items\.java
<___+142+>
<___+143+>
<xsd:element
name="productName"
type="xsd:string"/>
<xsd:element
name="quantity">
<___+144+>
<xsd:restriction
base="xsd:positiveInteger">
<xsd:maxExclusive
value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element
name="USPrice"
type="xsd:decimal"/>
<xsd:element
ref="comment"
minOccurs="0"/>
<xsd:element
name="shipDate"
type="xsd:date"
minOccurs="0"/>
</xsd:sequence>
<xsd:attribute
name="partNum"
type="SKU"
use="required"/>
</xsd:complexType>
Items\.ItemType
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<!--库存单位,代号
identifying products -->
<xsd:simpleType
name="SKU">
<xsd:restriction
base="xsd:string">
<xsd:pattern
value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

架构派生的 JAXB 类

接下来的部分简要说明了 JAXB 绑定编译器为示例生成的以下各个类的功能:

Items Class

Items\.java中:

ObjectFactory Class

ObjectFactory\.java中:

例如,在这种情况下,对于 Java interfaceprimer\.po\.Items\.ItemTypeObjectFactory创建方法createItemsItemType\(\)

PurchaseOrderType Class

PurchaseOrderType\.java中:

USAddress Class

USAddress\.java中:

首页