本教程适用于JDK 8。本页中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用选项的信息,请参阅JDK版本说明。
以下部分介绍了如何自定义生成的JAXB类和Java程序元素。
自定义JAXB绑定声明使您可以根据XML模式中的XML特定约束以外的要求自定义生成的JAXB类,包括Java特定的细化,如类和包名称映射。
JAXB提供了两种自定义XML模式的方式:
本文档后面提供了示例代码,展示了如何自定义JAXB绑定。
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模式内置类型。 默认设置: @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 enum类型一起使用的JAXB注解。
表:与Java enum类型相关的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@XmlElement (
name = "##default",
nillable = false,
namespace = "##default",
type = DEFAULT.class,
defaultValue = "\u0000"
)
@XmlElementRef (
name = "##default",
namespace = "##default",
type = DEFAULT.class
)
@XmlElementWrapper (
name = "##default",
namespace = "##default",
nillable = false
)
@XmlAnyElement (
lax = false,
value = W3CDomHandler.class
)
@XmlAttribute (
name = ##default,
required = false,
namespace = "##default"
)
下表总结了可以与对象工厂一起使用的JAXB注解。
表格:与对象工厂关联的JAXB注解
| 注解 | 描述和默认设置 |
|---|---|
| @XmlElementDecl | 将工厂方法映射到XML元素。 默认设置: @XmlElementDecl (
scope = GLOBAL.class,
namespace = "##default",
substitutionHeadNamespace = "##default",
substitutionHeadName = ""
)
|
下表总结了可以与适配器一起使用的JAXB注解。
表格:与适配器关联的JAXB注解
| 注解 | 描述和默认设置 |
|---|---|
| @XmlJavaTypeAdapter | 使用实现了@XmlAdapter注解的适配器进行自定义编组。 默认设置: @XmlJavaTypeAdapter ( type = DEFAULT.class ) |
| @XmlJavaTypeAdapters | 用于在包级别定义多个@XmlJavaTypeAdapter注解的容器注解。 默认设置: 无 |