本教程适用于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注解的容器注解。 默认设置: 无 |