# 自定义生成的类和 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` 注释的容器注释。
默认设置：无 |