@Retention(value=RUNTIME)
@Target(value=TYPE)
public @interface XmlType

将类或枚举类型映射到 XML 模式类型。

用法

@XmlType 注释可以与以下程序元素一起使用:

  • 顶层类
  • 枚举类型

有关其他公共信息,请参阅 javax.xml.bind.package javadoc 中的“包规范”。

映射一个类

将一个类映射到 XML 模式类型。类是通过属性和字段表示的值的数据容器。模式类型是一个数据容器,用于模式类型的内容模式中的模式组件(如模型组件、属性等)所表示的值。

要被映射,类必须拥有一个不带参数的公共构造方法,或者一个静态的不带参数的工厂方法。静态工厂方法可以使用 factoryMethod() 和 factoryClass() 注释元素来指定。在解组过程中将使用静态工厂方法或不带参数的构造方法来创建此类的实例。如果两者同时存在,则静态工厂方法将重写不带参数的构造方法。

将类映射到 XML 模式复杂类型或 XML 模式简单类型。XML 模式类型是基于类中包含的 JavaBean 属性和字段的映射派生出来的。类将要映射到的模式类型可以是已命名的,也可以是匿名的。通过使用 @(name="") 对类进行注释,可以将该类映射到匿名模式类型。

全局元素、本地元素或本地属性都可以与匿名类型关联,如下所示:

  • 全局元素:通过使用 @XmlRootElement 对类进行注释,可以派生出一个匿名类型的全局元素。请参阅下文示例 3。
  • 本地元素: JavaBean 属性,引用使用 @XmlType(name="") 注释的类且映射到与匿名类型关联的某一元素。请参阅下文示例 4。
  • 属性: JavaBean 属性,引用使用 @XmlType(name="") 注释的类且映射到与匿名类型关联的某一属性。请参阅下文示例 5。

映射到 XML 模式复杂类型

  • 如果使用 @XmlType(name="") 对类进行注释,那么该类将被映射到匿名类型。否则将类名称映射到复杂类型名称。可以使用 XmlName() 注释元素来自定义名称。
  • 映射到元素的属性和字段将映射到复杂类型中的内容模式。可以使用注释元素 propOrder() 将内容模式自定义为 xs:all 或 xs:sequence,还可以使用该元素指定 xs:sequence 中 XML 元素的顺序。
  • 可以映射到复杂类型中的属性的属性和字段。
  • XML 模式类型的 targetnamespace 可以使用注释元素 namespace() 自定义。

将类映射到 XML 模式简单类型

可以使用 @XmlValue 注释将类映射到 XML 模式简单类型。有关其他详细信息和示例,请参阅 @XmlValue 注释类型。

下表显示了类到 XML 模式复杂类型或简单类型的映射。表中使用的标志符号是:

  • -> : 代表一个映射
  • [x]+ :x 出现一次或多次
  • @XmlValue property ]:使用 @XmlValue 注释的 JavaBean 属性
  • X :任意
Target propOrder ClassBody ComplexType SimpleType
Class {} [property]+ -> elements complexcontent
xs:all
 
Class non empty [property]+ -> elements complexcontent
xs:sequence
 
Class X no property -> element complexcontent
empty sequence
 
Class X 1 [ @XmlValue property] && 
[property]+ ->attributes
simplecontent  
Class X 1 [ @XmlValue property ]&& 
no properties -> attribute
  simpletype  

映射一个枚举类型

将枚举类型映射到带有 enumeration facet 的 XML 模式简单类型。由于没有意义,以下注释元素将被忽略:propOrder()factoryMethod() 和 factoryClass()

与其他注释一起使用的方法

此类可与以下注释一起使用: XmlRootElementXmlAccessorOrderXmlAccessorType、 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();
}
}
从以下版本开始:
JAXB2.0
另请参见:
XmlElementXmlAttributeXmlValueXmlSchema

可选元素摘要
 Class factoryClass 
          包含用来创建此类实例的不带参数的工厂方法的类。
 String factoryMethod 
          一个不带参数的构造方法的名称,该构造方法在 factoryClass factoryClass() 所指定的类。
 String name 
          类被映射到的 XML 模式类型名称。
 String namespace 
          XML 模式类型的目标名称空间名。
 String[] propOrder 
          在将类映射到 XML 模式复杂类型时,指定 XML 模式元素的顺序。

name

public abstract String name
类被映射到的 XML 模式类型名称。

默认值:
"##default"

propOrder

public abstract String[] propOrder
在将类映射到 XML 模式复杂类型时,指定 XML 模式元素的顺序。

有关 propOrder 影响类映射的方式,请参见上表。

propOrder 是类中 JavaBean 属性的名称列表。列表中的每个名称都是 JavaBean 属性的 Java 标识符的名称。JavaBean 属性被列出的顺序是 JavaBean 属性映射到 XML 模式元素的顺序。

必须列出所有映射到 XML 模式元素的 JavaBean 属性。

以 propOrder 顺序列出的 JavaBean 属性或字段不得为 transient 或使用 @XmlTransient 注释。

JavaBean 属性的默认顺序由 @XmlAccessorOrder 确定。

默认值:
""

namespace

public abstract String namespace
XML 模式类型的目标名称空间名。默认情况下,这是包含类的包将被映射到的目标名称空间。

默认值:
"##default"

factoryClass

public abstract Class factoryClass
包含用来创建此类实例的不带参数的工厂方法的类。默认值为此类。

如果 factoryClass 为 DEFAULT.class 且 factoryMethod 为 "",则没有静态工厂方法。

如果 factoryClass 为 DEFAULT.class 且 factoryMethod 不为 "",则 factoryMethod 是此类中静态工厂方法的名称。

如果 factoryClass 不是 DEFAULT.class,则 factoryMethod 不得为 "",且必须是 factoryClass 中指定的静态工厂方法的名称。

默认值:
javax.xml.bind.annotation.XmlType.DEFAULT.class

factoryMethod

public abstract String factoryMethod
一个不带参数的构造方法的名称,该构造方法在 factoryClass factoryClass() 所指定的类。

 
 

注释类型 XmlType的更多相关文章

  1. Struts2 注释类型

    Struts 2 应用程序可以使用Java5注释作为替代XML和Java属性配置.这里是清单的不同的类别有关的最重要的注解: 命名空间注释(动作注释): @ Namespace注释允许在Action类 ...

  2. java.注释类型

    单行注释  //注释内容 多行注释 /*注释内容*/ 文档注释 /**注释内容*/

  3. HTML、CSS和JS中注释类型的总结

    添加必要的注释,是一个优秀的程序员必须具备的好习惯,可以大大提高代码的可维护性.可读性. 1.HTML注释 <!--注释的内容--> 注释的地方(根据个人习惯可能有所不同): 结束标签的后 ...

  4. springMVC 数据模型相关注解 可注释类型 ModelAttribute SessionAttributes InitBinder

    ModelAttribute 参数/方法SessionAttributes 类InitBinder 方法

  5. java基础-注释

    注释是一种形式的元数据,提供了非程序自身的数据,注释对于被注释的代码没有直接的影响. 本文主要概括注释的使用,java平台(SE)预定义的注释,类型注释是如跟可插入类型系统连用达到更强的类型检查的,以 ...

  6. 注释声明:TODO HACK XXX FIXME REVIEW

    注释有时候也可以用来给一段代码声明额外的信息.这些声明的格式以单个单词打头并紧跟一个冒号.可以使用的声明如下. TODO: 说明代码还未完成.应当包含下一步要做的事情. HACK: 表明代码实现走了一 ...

  7. Java魔法堂:注释和注释模板

    一.注释   1. 注释类型 [a]. 单行注释 // 单行注释 String type = "单行注释"; [b]. 多行注释 /* * 多行注释 */ String type ...

  8. 关于HTML条件注释你可能不知道的一些事儿

    最近经常看到类似这样的HTML代码片段,很多前端开发人员应该都熟悉: 1 <!--[if lt IE 7]>      <html class="ie6"> ...

  9. java JDK8 学习笔记——第18章 自定义泛型、枚举与注释

    第十八章 自定义泛型.枚举与注释 18.1 自定义泛型 泛型定义: (1)仅定义在方法上的泛型语法 (2)用来限制泛型可用类型的extends与super关键字(3)?类型通配字符的使用 18.1.1 ...

随机推荐

  1. Redis Cluster 设置密码

    两种方式 1.修改配置文件 在每个节点的配置文件里面增加密码选项,一定要加上 masterauth,不然 Redirected 的时候会失败. masterauth redispassword req ...

  2. python学习笔记:循环语句——while、for

    python中有两种循环,while和for,两种循环的区别是,while循环之前,先判断一次,如果满足条件的话,再循环,for循环的时候必须有一个可迭代的对象,才能循环,比如说得有一个数组.循环里面 ...

  3. docker使用entrypoint执行时报permission denied错误

    在Dockerfile中使用指令ENTRYPOINT来执行项目下entrypoint.shshell文件,如下: ENTRYPOINT ["./entrypoint.sh"] 时报 ...

  4. yum update过程中失败后再次执行出现“xxxx is a duplicate with xxxx”问题

    问题现象: 解决办法: 利用yum-uitls中的工具package-cleanup指令,使用方法见下图,具体可通过man package-cleanup查询 列出重复的rpm包        pac ...

  5. pytest-Allure安装

    mac安装allure brew install allure---安装 brew info allure---查看信息 mac端需要配置环境变量 win安装: windows/mac通用安装 • h ...

  6. 关于solr的一些知识

    简单了解 怎么理解Solr是个什么东西呢? 引用官网的介绍, Solr is the popular, blazing-fast, open source enterprise search plat ...

  7. termcap - 终端功能数据库

    描述 DESCRIPTION termcap 数据库是一个过时 (obsolete) 工具,用来描述以字符为单位的终端和打印机的功能.它之所以被保留,是为了兼容古老的程序:新程序应当使用 termin ...

  8. JNI intArray

    JNIDemo.java public class JNIDemo { static { /* 1. load */ System.loadLibrary("native"); / ...

  9. 通信矩阵转DBC

    DBC的制作对于一些人来时比较陌生,熟悉的人做他感觉浪费时间(像我这样的),于是自己用PYTHON写了一个脚本,还挺好用的,只需要填写表格就好了,省出来大部分的时间. 分享下思路, 来看下DBC的文本 ...

  10. 删除Excel空列

    /// <summary> /// 删除Excel空列 /// </summary> /// <param name="excelPath">E ...