将类或枚举类型映射到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。
映射到XML模式复杂类型
如果类被注释为@XmlType(name="") ,则映射到匿名类型,否则,类名映射到复杂类型名称。 XmlName()注释元素可用于自定义名称。
映射到元素的属性和字段将映射到复杂类型中的内容模型。 注释元素propOrder()可用于将内容模型定制为xs:all或xs:sequence 。 它用于指定xs:sequence中XML元素的顺序 。
属性和字段可以映射到复杂类型中的属性。
可以使用注释元素namespace()自定义XML模式类型的目标命名空间 。
将类映射到XML Schema简单类型
可以使用@XmlValue注释将类映射到XML模式简单类型。 有关其他详细信息和示例,请参阅@ XmlValue注释类型。
下表显示了类到XML Schema复杂类型或简单类型的映射。 表中使用的符号符号如下:
- >:表示映射
[x] +:一个或多个x的出现
[ @XmlValue属性]:JavaBean属性注释与@XmlValue
X:不在乎
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]+ ->attributes
simplecontent
类
X
1 [ @XmlValue property ]&&
no properties -> attribute
simpletype
映射枚举类型
枚举类型映射到具有枚举方面的XML模式简单类型。
以下注释元素将被忽略,因为它们是没有意义的:propOrder(),factoryMethod(),factoryClass()。
与其他注释的用法
示例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) {..};
}
示例2:将类映射到具有xs:all的复杂类型
@XmlType(propOrder={})
public class USAddress { ...}
示例3:将类映射到具有匿名类型的全局元素。
@XmlRootElement
@XmlType(name="")
public class USAddress { ...}
示例4:将属性映射到具有匿名类型的本地元素。
//Example: Code fragment
public class Invoice {
USAddress addr;
...
}
@XmlType(name="")
public class USAddress { ... }
}
...
示例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;
}
示例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();
}
}