@Retention(value=RUNTIME) @Target(value=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。 将类映射到XML Schema简单类型
可以使用@XmlValue注释将类映射到XML模式简单类型。 有关其他详细信息和示例,请参阅@ XmlValue
注释类型。
下表显示了类到XML Schema复杂类型或简单类型的映射。 表中使用的符号符号如下:
Target propOrder ClassBody ComplexType SimpleType 类 {} [property]+ -> elements complexcontent
xs:all类 non empty [property]+ -> elements complexcontent
xs:sequence类 X no property -> element complexcontent
empty sequence类 X 1 [ @XmlValue property] &&
[property]+ ->attributessimplecontent 类 X 1 [ @XmlValue property ]&&
no properties -> attributesimpletype
此注释可与以下注释一起使用: 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();
}
}
XmlElement
, XmlAttribute
, XmlValue
, XmlSchema
Modifier and Type | Optional Element and Description |
---|---|
类 |
factoryClass
包含用于创建此类的实例的无参数工厂方法的类。
|
String |
factoryMethod
在
factoryClass factoryClass()中指定的类中的无参数工厂方法的名称。
|
String |
name
类映射的XML模式类型的名称。
|
String |
namespace
XML Schema类型的目标命名空间的名称。
|
String[] |
propOrder
指定类映射到XML模式复合类型时XML Schema元素的顺序。
|
public abstract String name
public abstract String[] propOrder
请参考表格中properder如何影响类的映射
propOrder是类中JavaBean属性的名称列表。 列表中的每个名称都是JavaBean属性的Java标识符的名称。 列出JavaBean属性的顺序是JavaBean属性映射到的XML Schema元素的顺序。
必须列出所有映射到XML Schema元素的JavaBean属性。
proporder中列出的JavaBean属性或字段不得为@XmlTransient暂时性或注释 。
JavaBean属性的默认排序由@ XmlAccessorOrder
确定 。
public abstract String namespace
public abstract 类 factoryClass
如果factoryClass是DEFAULT.class和factoryMethod是“”,那么没有静态工厂方法。
如果factoryClass是DEFAULT.class和factoryMethod不是“”,那么factoryMethod是这个类中静态工厂方法的名称。
如果factoryClass不是DEFAULT.class,那么factoryMethod不能是“”,并且必须是factoryClass中指定的静态工厂方法的名称。
public abstract String factoryMethod