# 自定义生成的类和 Java 程序元素

> 原文： [https://docs.oracle.com/javase/tutorial/jaxb/intro/customize.html](https://docs.oracle.com/javase/tutorial/jaxb/intro/customize.html)

以下部分描述如何自定义生成的 JAXB 类和 Java 程序元素。

## Schema-to-Java

自定义 JAXB 绑定声明使您能够自定义生成的 JAXB 类，超出 XML 模式中特定于 XML 的约束，以包括特定于 Java 的细化，例如类和包名称映射。

JAXB 提供了两种自定义 XML 模式的方法：

*   作为源 XML 模式中的内联注释
*   作为传递给 JAXB 绑定编译器的外部绑定自定义文件中的声明

本文档稍后将提供显示如何自定义 JAXB 绑定的代码示例。

## Java-to-Schema

`javax.xml.bind.annotation` 包中定义的 JAXB 注释可用于将 Java 程序元素自定义为 XML 模式映射。下表总结了可与 Java 包一起使用的 JAXB 注释。

表：与 Java 包关联的 JAXB 批注

注解：`@XmlSchema`

说明：将包映射到 XML 目标命名空间。

默认设置：

```
@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` 注释的容器注释。

默认设置：无

下表总结了可以与 Java 类一起使用的 JAXB 注释。

表：与 Java 类关联的 JAXB 批注


注解：`@XmlType`

说明：将 Java 类映射到模式类型。

默认设置：

```
@XmlType (
    name = "##default", 
    propOrder = {""}, 
    namespace = "##default", 
    factoryClass = DEFAULT.class, 
    factoryMethod = ""
)

```

---

注解：`@XmlRootElement`

说明：将全局元素与类映射到的模式类型相关联。

默认设置：

```
@XmlRootElement (
    name = "##default", 
    namespace = "##default" 
)

```

下表总结了可与 Java `枚举`类型一起使用的 JAXB 注释。

表：与 Java `枚举`类型相关联的 JAXB 注释


注解：`@XmlEnum`

说明：将 Java 类型映射到 XML 简单类型。

默认设置：

```
@XmlEnum ( value = String.class )

```

---

注解：`@XmlEnumValue`

说明：将 Java 类型映射到 XML 简单类型。

默认设置：无

---

注解：`@XmlType`

说明：将 Java 类映射到模式类型。

默认设置：

```

@XmlType (
    name = "##default", 
    propOrder = {""}, 
    namespace = "##default", 
    factoryClass = DEFAULT.class, 
    factoryMethod = ""
)

```

---

注解：`@XmlRootElement`

说明：将全局元素与类映射到的模式类型相关联。

默认设置：

```
@XmlRootElement (
    name = "##default", 
    namespace = "##default" 
)

```


下表总结了可与 Java 属性和字段一起使用的 JAXB 注释。

表：与 Java 属性和字段关联的 JAXB 批注

注解：`@XmlElement`

说明：将 JavaBeans 属性或字段映射到从属性或字段名称派生的 XML 元素。

默认设置：

```
@XmlElement (
    name = "##default", 
    nillable = false, 
    namespace = "##default", 
    type = DEFAULT.class, 
    defaultValue = "\u0000"
)

```

---

注解：`@XmlElements`

说明：用于定义多个 `@XmlElement` 注释的容器注释。

默认设置：无
---

注解：`@XmlElementRef`

说明：将 JavaBeans 属性或字段映射到从属性或字段类型派生的 XML 元素。

默认设置：

```
@XmlElementRef (
    name = "##default", 
    namespace = "##default", 
    type = DEFAULT.class
)

```

---

注解：`@XmlElementRefs`

说明：用于定义多个 `@XmlElementRef` 注释的容器注释。

默认设置：无
---

注解：`@XmlElementWrapper`

说明：围绕 XML 表示生成包装元素。它通常用作集合的包装 XML 元素。

默认设置：

```
@XmlElementWrapper (
    name = "##default", 
    namespace = "##default", 
    nillable = false
)

```

---

注解：`@XmlAnyElement`

说明：将 JavaBeans 属性映射到 XML 信息集表示或 JAXB 元素。

默认设置：

```
@XmlAnyElement (
    lax = false, 
    value = W3CDomHandler.class
)

```

---

注解：`@XmlAttribute`

说明：将 JavaBeans 属性映射到 XML 属性。

默认设置：

```
@XmlAttribute (
    name = ##default, 
    required = false, 
    namespace = "##default" 
)

```

---

注解：`@XmlAnyAttribute`

说明：将 JavaBeans 属性映射到通配符属性的映射。

默认设置：无
---

注解：`@XmlTransient`

说明：阻止将 JavaBeans 属性映射到 XML 表示。

默认设置：无
---

注解：`@XmlValue`

说明：使用 `simpleContent` 或 XML Schema 简单类型定义类到 XML Schema 复杂类型的映射。

默认设置：无
---

注解：`@XmlID`

说明：将 JavaBeans 属性映射到 XML ID。

默认设置：无
---

注解：`@XmlIDREF`

说明：将 JavaBeans 属性映射到 XML IDREF。

默认设置：无
---

注解：`@XmlList`

说明：将属性映射到列表简单类型。

默认设置：无
---

注解：`@XmlMixed`

说明：标记 JavaBeans 多值属性以支持混合内容。

默认设置：无
---

注解：`@XmlMimeType`

说明：关联控制属性的 XML 表示的 MIME 类型。

默认设置：无
---

注解：`@XmlAttachmentRef`

说明：标记其 XML 表单是对 mime 内容的 URI 引用的字段/属性。

默认设置：无
---

注解：`@XmlInlineBinaryData`

说明：禁用对绑定到 XML 中的 base64 编码二进制数据的数据类型的 XOP 编码的考虑。

默认设置：无

下表总结了可与对象工厂一起使用的 JAXB 注释。

表：与对象工厂关联的 JAXB 注释

注解：`@XmlElementDecl`

说明： 将工厂方法映射到 XML 元素。

默认设置：

```
@XmlElementDecl (
    scope = GLOBAL.class, 
    namespace = "##default", 
    substitutionHeadNamespace = "##default", 
    substitutionHeadName = ""
)

```


下表总结了可与适配器一起使用的 JAXB 注释。

表：与适配器关联的 JAXB 注释

注解：`@XmlJavaTypeAdapter`

说明：使用实现 `@XmlAdapter` 注释的适配器进行自定义编组。

默认设置：

```
@XmlJavaTypeAdapter ( type = DEFAULT.class )

```

---

注解：`@XmlJavaTypeAdapters`

说明：用于在包级别定义多个 `@XmlJavaTypeAdapter` 注释的容器注释。

默认设置：无