@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. LightOJ 1030 Discovering Gold (概率/期望DP)

    题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 ...

  2. STL中六大组件

    1)容器(Container),是一种数据结构,如list,vector,和deques ,以模板类的方法提供.为了访问容器中的数据,可以使用由容器类输出的迭代器: 容器(container)用于存放 ...

  3. HDU6655 Just Repeat(2019杭电多校J题)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6655 简单博弈问题,A,B手里各有n,m张牌,牌有颜色,两人轮流出牌(A先出),一个人只能打出对放未打 ...

  4. PAT甲级——A1141 PATRankingofInstitution【25】

    A clique is a subset of vertices of an undirected graph such that every two distinct vertices in the ...

  5. POI教程

    很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告.有时,一个应用程序甚至希望将Excel文件作为输入数据.例如,一个公司开发的应用程序将财务部门需要所有输出生成自己的Ex ...

  6. Struts2的Action访问

    ● 示例项目结构 ●  demo1.jsp <%@ page language="java" import="java.util.*" pageEncod ...

  7. spring 注入bean的两种方式

    我们都知道,使用spring框架时,不用再使用new来实例化对象了,直接可以通过spring容器来注入即可. 而注入bean有两种方式: 一种是通过XML来配置的,分别有属性注入.构造函数注入和工厂方 ...

  8. eslint 禁用命令

    /* eslint-disable */ ESLint 在校验的时候就会跳过后面的代码 还可以在注释后加入详细规则,这样就能避开指定的校验规则了 /* eslint-disable no-new */ ...

  9. css 实现水波纹,波浪动画效果

    <div class="wave"> 水波纹效果 <div class="wave1"></div> <div cla ...

  10. HTML + CSS (上)

    HTML 概念: 超文本标记语言. 核心: 语义. 主体结构: <!doctype html> //告诉浏览器这是什么语言 html //主体 head //头文件 body //页面主体 ...