Module  java.xml.bind

Annotation Type XmlType



  • @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。
    映射到XML模式复杂类型
    • 如果类被注释为@XmlType(name="") ,则将其映射到匿名类型,否则类名映射到复杂类型名称。 XmlName()注释元素可用于自定义名称。
    • 映射到元素的属性和字段将映射到复杂类型中的内容模型。 注释元素propOrder()可以用于将内容模型定制为xs:allxs: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: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

    映射枚举类型

    枚举类型映射到具有枚举方面的XML模式简单类型。 以下注释元素将被忽略,因为它们是没有意义的: propOrder()factoryMethod()factoryClass()

    与其他注释的用法

    此注释可与以下注释一起使用: XmlRootElementXmlAccessorOrderXmlAccessorTypeXmlEnum 但是,在枚举类型上使用此注释时,将忽略XmlAccessorOrderXmlAccessorType

    示例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
    另请参见:
    XmlElementXmlAttributeXmlValueXmlSchema
    • 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不是“”,那么factoryMethodfactoryMethod中静态工厂方法的名称。

        如果factoryClass不是DEFAULT.class,那么factoryMethod不能是“”,并且必须是factoryClass指定的静态工厂方法的名称。

        Default:
        javax.xml.bind.annotation.XmlType.DEFAULT.class
      • factoryMethod

        String factoryMethod
        factoryClass factoryClass()中指定的类中的无参数工厂方法的名称。
        Default:
        “”