38.6. 指定元素或属性的基本类型


概述

有时您需要自定义为元素生成的对象类,或作为 XML 架构复杂类型的一部分定义的属性。例如,您可能希望使用更常规的对象类来允许替换简单的类型。

执行此操作的一种方法是使用 JAXB 基础类型自定义。它允许开发人员根据需要指定生成的对象类来代表元素或属性。基本类型自定义允许您指定 XML 架构结构和生成的 Java 对象之间的备用映射。这个备用映射可以是简单的分类,也可以是默认基本类的规范化。它还可以是 XML 架构原语类型到 Java 类的映射。

自定义使用

要将 JAXB 基础 type 属性应用到 XML Schema 结构,可使用 JAXB baseType 自定义元素。baseType 自定义元素是 JAXB 属性 元素的子级,因此必须正确嵌套它。

根据您要自定义 XML Schema 结构到 Java 对象的映射的方式,您可以添加 baseType 自定义元素的 name 属性或 javaType 子元素。name 属性用于将生成的对象的默认类映射到同一类层次结构中的另一个类。当您要将 XML Schema 原语类型映射到 Java 类时,会使用 javaType 元素。

重要

您不能在同一 baseType 自定义元素中使用 name 属性和 javaType 子元素。

特殊化或常规默认映射

baseType 自定义元素的 name 属性用于将生成的对象的类重新定义到同一 Java 类层次结构中的类。属性指定 XML 架构结构映射到的 Java 类的完全限定名称。指定的 Java 类 必须是 代码生成器通常为 XML Schema 构造生成的 Java 类的超级类或子类。对于映射到 Java 原语类型的 XML 架构类型,打包程序类用作自定义目的的默认基本类。

例如,定义为 xsd:int 的元素使用 java.lang.Integer 作为其默认基本类。name 属性的值可以指定任意 Integer 的超级类,如 NumberObject

对于简单类型替换,最常见的自定义是将原语类型映射到对象对象。

例 38.27 “基本类型的命令行自定义” 显示一行自定义,它将复杂类型中的一个元素映射到 Java 对象对象。

例 38.27. 基本类型的命令行自定义

<complexType name="widgetOrderInfo">
  <all>
    <element name="amount" type="xsd:int" />
     <element name="shippingAdress" type="Address">
      <annotation> <appinfo> <jaxb:property> <jaxb:baseType name="java.lang.Object" /> </jaxb:property> </appinfo> </annotation>
    </element>
    <element name="type" type="xsd:string"/>
  </all>
</complexType>
Copy to Clipboard Toggle word wrap

例 38.28 “用于自定义基本类型的外部绑定文件” 显示用于自定义的外部绑定文件,如 例 38.27 “基本类型的命令行自定义” 所示。

例 38.28. 用于自定义基本类型的外部绑定文件

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="enumMap.xsd">
    <jaxb:bindings node="xsd:ComplexType[@name='widgetOrderInfo']">
      <jaxb:bindings node="xsd:element[@name='shippingAddress']">
        <jaxb:property>
          <jaxb:baseType name="java.lang.Object" />
        </jaxb:property>
      </jaxb:bindings>
    </jaxb:bindings>
  </jaxb:bindings>
<jaxb:bindings>
Copy to Clipboard Toggle word wrap

生成的 Java 对象的 @XmlElement 注释包含一个 type 属性。type 属性的值是代表生成对象的默认基本类型的类对象。如果是 XML Schema 原语类型,则类是相应 Java 原语类型的打包程序类。

例 38.29 “带有修改的基本类的 Java 类” 显示根据 例 38.28 “用于自定义基本类型的外部绑定文件” 中的模式定义生成的类。

例 38.29. 带有修改的基本类的 Java 类

public class WidgetOrderInfo {

    protected int amount;
    @XmlElement(required = true)
    protected String type;
    @XmlElement(required = true, type = Address.class) protected Object shippingAddress;

    ...
    public Object getShippingAddress() {
        return shippingAddress;
    }

    public void setShippingAddress(Object value) {
        this.shippingAddress = value;
    }

}
Copy to Clipboard Toggle word wrap

使用 javaType

javaType 元素可用于自定义如何使用 XML 架构原语类型定义的元素和属性映射到 Java 对象。使用 javaType 元素比使用 baseType 元素的 name 属性提供更大的灵活性。javaType 元素允许您将原语类型映射到任何类对象。

有关使用 javaType 元素的详细描述,请参阅 第 38.2 节 “指定 XML 架构 Primitive 的 Java 类”

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat