-
@Retention(RUNTIME) @Target(TYPE) public @interface XmlType
将类或枚举类型映射到XML模式类型。
用法
@XmlType
通知可以与以下程序元素一起使用:- 顶级班
- 枚举类型
有关其他常见信息,请参阅javax.xml.bind.package javadoc中的“Package Specification”。
映射类
类映射到XML模式类型。 类是用于由属性和字段表示的值的数据容器。 模式类型是模式类型的内容模型中的模式组件所表示的值的数据容器(例如,模型组,属性等)。
要映射,类必须有一个public no-arg构造函数或一个静态无参数工厂方法。 静态工厂方法可以在
factoryMethod()
和factoryClass()
注明注释元素。 在解组中使用静态工厂方法或无参数构造函数来创建此类的实例。 如果两者都存在,静态工厂方法将覆盖no-arg构造函数。类映射到XML模式复合类型或XML模式简单类型。 基于JavaBean属性和类中包含的字段的映射,派生了XML Schema类型。 类映射到的模式类型可以被命名或匿名。 可以通过使用
@XmlType(name="")
注释类来将类映射到匿名模式类型。全局元素,本地元素或本地属性可以与匿名类型相关联,如下所示:
- 全局元素:可以通过使用@
XmlRootElement
注释类来导出匿名类型的全局元素。 参见下面的实施例3。 - 局部元素:引用使用@XmlType(name =“”)注释的类并被映射到与匿名类型关联的元素的JavaBean属性。 参见下面的实施例4。
- 属性:引用使用@XmlType(name =“”)注释的类的JavaBean属性,并映射到与匿名类型相关联的属性。 参见下面的实施例5。
- 如果类被注释为
@XmlType(name="")
,则将其映射到匿名类型,否则类名映射到复杂类型名称。XmlName()
注释元素可用于自定义名称。 - 映射到元素的属性和字段将映射到复杂类型中的内容模型。 注释元素
propOrder()
可以用于将内容模型定制为xs:all
或xs:sequence
。 它用于指定xs:sequence
中XML元素的xs:sequence
。 - 属性和字段可以映射到复杂类型中的属性。
- 可以使用注释元素
namespace()
自定义XML模式类型的目标namespace()
。
将类映射到XML Schema简单类型
可以使用
@XmlValue
注释将类映射到XML Schema简单类型。 有关其他详细信息和示例,请参阅@XmlValue
注释类型。下表显示了类到XML Schema复杂类型或简单类型的映射。 表中使用的符号符号如下:
- - >:表示映射
- [x] +:一个或多个x的出现
- [
@XmlValue
属性]:JavaBean属性注释与@XmlValue
- X:不在乎
Target propOrder ClassBody ComplexType SimpleType Class {} [property]+ -> elements complexcontent
xs:allClass non empty [property]+ -> elements complexcontent
xs:sequenceClass X no property -> element complexcontent
empty sequenceClass X 1 [ @XmlValue
property] &&
[property]+ -> attributessimplecontent Class X 1 [ @XmlValue
property] &&
no properties -> attributesimpletype 映射枚举类型
枚举类型映射到具有枚举方面的XML模式简单类型。 以下注释元素将被忽略,因为它们是没有意义的:propOrder()
,factoryMethod()
,factoryClass()
。与其他注释的用法
此注释可与以下注释一起使用:
XmlRootElement
,XmlAccessorOrder
,XmlAccessorType
,XmlEnum
。 但是,在枚举类型上使用此注释时,将忽略XmlAccessorOrder
和XmlAccessorType
。示例1:使用xs:sequence将类映射到具有JavaBean属性的自定义排序的复杂类型。
@XmlType(propOrder={"street", "city" , "state", "zip", "name" }) public class USAddress { String getName() {..}; void setName(String) {..}; String getStreet() {..}; void setStreet(String) {..}; String getCity() {..}; void setCity(String) {..}; String getState() {..}; void setState(String) {..}; java.math.BigDecimal getZip() {..}; void setZip(java.math.BigDecimal) {..}; }
<!-- XML Schema mapping for USAddress --> <xs:complexType name="USAddress"> <xs:sequence> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> <xs:element name="name" type="xs:string"/> </xs:all> </xs:complexType>
示例2:将类映射到具有xs:all的复杂类型
@XmlType(propOrder={}) public class USAddress { ...}
<!-- XML Schema mapping for USAddress --> <xs:complexType name="USAddress"> <xs:all> <xs:element name="name" type="xs:string"/> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence> </xs:complexType>
示例3:将类映射到具有匿名类型的全局元素。
@XmlRootElement @XmlType(name="") public class USAddress { ...}
<!-- XML Schema mapping for USAddress --> <xs:element name="USAddress"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element>
示例4:将属性映射到具有匿名类型的本地元素。
//Example: Code fragment public class Invoice { USAddress addr; ... } @XmlType(name="") public class USAddress { ... } }
<!-- XML Schema mapping for USAddress --> <xs:complexType name="Invoice"> <xs:sequence> <xs:element name="addr"> <xs:complexType> <xs:element name="name", type="xs:string"/> <xs:element name="city", type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:complexType> ... </xs:sequence> </xs:complexType>
示例5:将属性映射到具有匿名类型的属性。
//Example: Code fragment public class Item { public String name; @XmlAttribute public USPrice price; } // map class to anonymous simple type. @XmlType(name="") public class USPrice { @XmlValue public java.math.BigDecimal price; }
<!-- Example: XML Schema fragment --> <xs:complexType name="Item"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:attribute name="price"> <xs:simpleType> <xs:restriction base="xs:decimal"/> </xs:simpleType> </xs:attribute> </xs:sequence> </xs:complexType>
示例6:定义一个factoryClass和factoryMethod
@XmlType(name="USAddressType", factoryClass=USAddressFactory.class, factoryMethod="getUSAddress") public class USAddress { private String city; private String name; private String state; private String street; private int zip; public USAddress(String name, String street, String city, String state, int zip) { this.name = name; this.street = street; this.city = city; this.state = state; this.zip = zip; } } public class USAddressFactory { public static USAddress getUSAddress(){ return new USAddress("Mark Baker", "23 Elm St", "Dayton", "OH", 90952); }
示例7:定义factoryMethod并使用默认的factoryClass
@XmlType(name="USAddressType", factoryMethod="getNewInstance") public class USAddress { private String city; private String name; private String state; private String street; private int zip; private USAddress() {} public static USAddress getNewInstance(){ return new USAddress(); } }
- 从以下版本开始:
- 1.6,JAXB 2.0
- 另请参见:
-
XmlElement
,XmlAttribute
,XmlValue
,XmlSchema
-
-
Optional Element Summary
Optional Elements Modifier and Type Optional Element 描述 Class
factoryClass
包含用于创建此类的实例的无参数工厂方法的类。String
factoryMethod
在factoryClass
factoryClass()中指定的类中的无参数工厂方法的名称。String
name
类映射的XML模式类型的名称。String
namespace
XML Schema类型的目标命名空间的名称。String[]
propOrder
指定类映射到XML模式复合类型时XML Schema元素的顺序。
-
-
-
Element Detail
-
name
String name
类映射的XML模式类型的名称。- Default:
- “##默认”
-
-
-
propOrder
String[] propOrder
指定类映射到XML模式复合类型时XML Schema元素的顺序。请参考表格中properder如何影响类的映射
propOrder是类中JavaBean属性的名称列表。 列表中的每个名称都是JavaBean属性的Java标识符的名称。 列出JavaBean属性的顺序是JavaBean属性映射到的XML Schema元素的顺序。
必须列出所有映射到XML Schema元素的JavaBean属性。
在propOrder上市JavaBean属性或字段不得为暂时性或注释
@XmlTransient
。JavaBean属性的默认排序由@
XmlAccessorOrder
确定。- Default:
- { “”}
-
-
-
namespace
String namespace
XML Schema类型的目标命名空间的名称。 默认情况下,这是包含该类的包的映射目标命名空间。- Default:
- “##默认”
-
-
-
factoryClass
Class factoryClass
包含用于创建此类的实例的无参数工厂方法的类。 默认是这个类。如果
factoryClass
是DEFAULT.class和factoryMethod
是“”,那么没有静态工厂方法。如果
factoryClass
是DEFAULT.class和factoryMethod
不是“”,那么factoryMethod
是factoryMethod
中静态工厂方法的名称。如果
factoryClass
不是DEFAULT.class,那么factoryMethod
不能是“”,并且必须是factoryClass
指定的静态工厂方法的名称。- Default:
- javax.xml.bind.annotation.XmlType.DEFAULT.class
-
-
-
factoryMethod
String factoryMethod
在factoryClass
factoryClass()中指定的类中的无参数工厂方法的名称。- Default:
- “”
-
-