モジュール java.xml.bind
パッケージ javax.xml.bind.annotation

注釈型XmlType


  • @Retention(RUNTIME)
    @Target(TYPE)
    public @interface XmlType

    クラスまたは列挙型をXML Schema型にマップします。

    使用法

    @XmlType注釈は、次のプログラム要素で使用できます。

    • トップレベル・クラス
    • 列挙型

    追加の一般的な情報については、javax.xml.bind.package javadocの「パッケージの仕様」を参照してください。

    クラスのマッピング

    クラスをXML Schema型にマップします。 クラスは、プロパティおよびフィールドで表現される値のデータ・コンテナです。 スキーマ型は、スキーマ型のコンテンツ・モデル(モデル・グループ、属性など)内のスキーマ・コンポーネントで表現される値のデータ・コンテナです。

    クラスをマップするには、引数のないpublicコンストラクタか、引数のないstaticファクトリ・メソッドのいずれかがクラスに含まれる必要があります。 staticファクトリ・メソッドは、factoryMethod()およびfactoryClass()注釈要素で指定できます。 非整列化の実行中に、staticファクトリ・メソッドまたは引数のないコンストラクタは使用され、このクラスのインスタンスが作成されます。 両方ある場合、引数のないコンストラクタよりもstaticファクトリ・メソッドが優先されます。

    クラスは、XML Schema複合型かXML Schema単純型のいずれかにマップされます。 XML Schema型は、クラス内に含まれるJavaBeanプロパティとフィールドのマッピングに基づいて派生します。 クラスがマップされるスキーマ型は、名前付きか匿名のいずれにもできます。 クラスは、@XmlType(name="")でクラスに注釈を付けることによって、匿名のスキーマ型にマップできます。

    グローバル要素、ローカル要素、またはローカル属性を次のように匿名型に関連付けることができます。

    • グローバル要素: 匿名型のグローバル要素は、クラスを@XmlRootElementで注釈することによって派生できます。 下記の例3を参照してください。
    • ローカル要素: @XmlType(name="")で注釈されたクラスを参照し、匿名型に関連付けられた要素にマップされるJavaBeanプロパティ。 下記の例4を参照してください。
    • 属性: @XmlType(name="")で注釈されたクラスを参照し、匿名型に関連付けられた属性にマップされるJavaBeanプロパティ。 下記の例5を参照してください。
    XML Schema複合型へのマッピング
    • クラスが@XmlType(name="")で注釈されている場合、匿名型にマップされます。それ以外の場合、クラス名は複合型名にマップされます。 XmlName()注釈要素を使用し、名前をカスタマイズすることもできます。
    • 要素にマップされるプロパティとフィールドは、複合型内のコンテンツ・モデルにマップされます。 propOrder()注釈要素を使用して、コンテンツ・モデルをxs:allまたはxs:sequenceにカスタマイズすることもできます。 これは、xs:sequenceにXML要素の順序を指定するために使用されます。
    • プロパティおよびフィールドを複合型内の属性にマップできます。
    • namespace()注釈要素を使用して、XML Schema型のtargetnamespaceをカスタマイズできます。

    XML Schema単純型へのクラスのマッピング

    @XmlValue注釈を使用して、クラスをXML Schema単純型にマップできます。 追加の詳細情報や例については、@XmlValue注釈型を参照してください。

    次の表は、XML Schema複合型または単純型へのクラスのマッピングを示します。 この表で使用する表記記号は、次のとおりです。

    • -> : マッピングを表す
    • [x]+ : xの1回以上の出現
    • [ @XmlValueプロパティ]: @XmlValueで注釈されたJavaBeanプロパティ
    • X : 関係しない
    ターゲット propOrder ClassBody ComplexType SimpleType
    クラス {} [プロパティ]+ ->要素 複合コンテンツ
    xs:all
    クラス 空以外 [プロパティ]+ ->要素 複合コンテンツ
    xs:sequence
    クラス X プロパティなし ->要素 複合コンテンツ
    空のsequence
    クラス X 1 [@XmlValueプロパティ] & &
    [property] + ->属性
    単純コンテンツ
    クラス X 1 [@XmlValueプロパティ] & &
    プロパティなし ->属性
    単純型

    列挙型のマッピング

    列挙型を、列挙ファセットを持つXMLスキーマ単純型にマップします。 注釈要素propOrder()factoryMethod()factoryClass()は意味がないため、無視されます。

    ほかの注釈との併用

    この注釈型は、注釈型XmlRootElementXmlAccessorOrderXmlAccessorTypeXmlEnumとともに使用できます。 ただし、この注釈が列挙型で使用される場合、XmlAccessorOrderXmlAccessorTypeは無視されます。

    例1: JavaBeanプロパティの順序をカスタマイズするxs:sequenceを使用した複合型にクラスをマップする。

       @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
    関連項目:
    XmlElement, XmlAttribute, XmlValue, XmlSchema
    • オプション要素のサマリー

      オプションの要素 
      修飾子と型 オプション要素 説明
      Class factoryClass
      このクラスのインスタンスを作成する引数のないファクトリ・メソッドを含むクラスです。
      String factoryMethod
      factoryClass factoryClass()で指定されたクラス内の引数のないファクトリ・メソッドの名前です。
      String name
      クラスがマップされるXML Schema型の名前です。
      String namespace
      XML Schema型のターゲット名前空間の名前です。
      String[] propOrder
      クラスがXML Schema複合型にマップされる場合、XML Schema要素の順序を指定します。
    • 要素の詳細

      • name

        String name
        クラスがマップされるXML Schema型の名前です。
        デフォルト:
        「##default」
      • propOrder

        String[] propOrder
        クラスがXML Schema複合型にマップされる場合、XML Schema要素の順序を指定します。

        propOrderがクラスのマッピングに与える影響については、表を参照してください。

        propOrderは、クラス内のJavaBeanプロパティ名リストです。 リスト内の個々の名前は、JavaBeanプロパティのJava識別子名です。 リスト内のJavaBeanプロパティの順序は、JavaBeanプロパティがマップされるXMLスキーマ要素の順序です。

        XML Schema要素にマップされるすべてのJavaBeanプロパティがリストされる必要があります。

        propOrderに含まれるJavaBeanプロパティまたはフィールドは、一時的なものであってはならず、@XmlTransient注釈が指定されていてはいけません。

        JavaBeanプロパティのデフォルトの順序は、@XmlAccessorOrderによって決定されます。

        デフォルト:
        {""}
      • namespace

        String namespace
        XML Schema型のターゲット名前空間の名前です。 デフォルトでは、クラスを含むパッケージがマップされるターゲット名前空間です。
        デフォルト:
        「##default」
      • factoryClass

        Class factoryClass
        このクラスのインスタンスを作成する引数のないファクトリ・メソッドを含むクラスです。 デフォルトはこのクラスです。

        factoryClassがDEFAULT.classで、factoryMethodがの場合、staticファクトリ・メソッドはありません。

        factoryClassがDEFAULT.classで、factoryMethodが以外の場合、factoryMethodがこのクラスのstaticファクトリ・メソッドの名前です。

        factoryClassがDEFAULT.class以外の場合、factoryMethodはであってはならず、factoryClassで指定されたstaticファクトリ・メソッドの名前である必要があります。

        デフォルト:
        javax.xml.bind.annotation.XmlType.DEFAULT.class
      • factoryMethod

        String factoryMethod
        factoryClass factoryClass()で指定されたクラス内の引数のないファクトリ・メソッドの名前です。
        デフォルト:
        ""