アノテーション型 XmlType


  • @RetentionSE(RUNTIMESE)
    @TargetSE(TYPESE)
    public @interface XmlType

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

    使用方法

    @XmlType アノテーションは、次のプログラム要素で使用できます。

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

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

    クラスのマッピング

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

    マップするには、クラスにパブリックの引数なしのコンストラクターまたは静的な引数なしのファクトリメソッドが必要です。静的ファクトリメソッドは、factoryMethod() および factoryClass() アノテーション要素で指定できます。静的ファクトリメソッドまたは引数なしのコンストラクターは、このクラスのインスタンスを作成するためにマーシャリング解除中に使用されます。両方が存在する場合、静的ファクトリメソッドは引数なしのコンストラクターをオーバーライドします。

    クラスは、XML スキーマ複合型または XML スキーマ単純型のいずれかにマップされます。XML スキーマ型は、クラス内に含まれる JavaBean プロパティとフィールドのマッピングに基づいて導出されます。クラスがマップされるスキーマ型は、名前付きまたは匿名のいずれかです。クラスに @XmlType(name="") アノテーションを付けることにより、クラスを匿名スキーマ型にマップできます。

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

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

    クラスを XML スキーマの単純型にマッピングする

    クラスは、@XmlValue アノテーションを使用して XML スキーマ単純型にマップできます。詳細と例については、@XmlValue アノテーション型を参照してください。

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

    • -> : マッピングを表します
    • [x] +: x の 1 つ以上の出現箇所
    • @XmlValue プロパティ ]: @XmlValue でアノテーションが付けられた JavaBean プロパティ
    • X : 気にしない
    クラスを XML スキーマの単純型にマッピングする
    ターゲット propOrderClassBodyComplexTypeSimpleType
    クラス {}[ プロパティ ] +-> 要素 complexcontent
    xs:all
    クラス 空でない [ プロパティ ] +-> 要素 complexcontent
    xs:sequence
    クラス X プロパティなし -> 要素 complexcontent
    空のシーケンス
    クラス X1 [@XmlValue プロパティ ] &&
    [ プロパティ ] +-> 属性
    simplecontent
    クラス X1 [@XmlValue プロパティ ] &&
    プロパティなし -> 属性
    simpletype

    列挙型のマッピング

    列挙型は、列挙ファセットを持つ XML スキーマの単純型にマップされます。次のアノテーション要素は意味がないため無視されます: propOrder()factoryMethod()factoryClass()

    他のアノテーションとの使用

    このアノテーションは、XmlRootElementXmlAccessorOrderXmlAccessorTypeXmlEnum のアノテーションとともに使用できます。ただし、このアノテーションが列挙型で使用される場合、XmlAccessorOrder および XmlAccessorType は無視されます。

    例 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
    作成者:
    Sekhar Vajjhala, Sun Microsystems, Inc.
    関連事項:
    XmlElement, XmlAttribute, XmlValue, XmlSchema
    • オプション要素のサマリー

      オプション要素  
      修飾子と型 オプションの要素 説明
      ClassSE<?>factoryClass
      このクラスのインスタンスを作成するための引数なしのファクトリメソッドを含むクラス。
      StringSEfactoryMethod
      factoryClass factoryClass() で指定されたクラスの引数なしファクトリメソッドの名前。
      StringSEname
      クラスがマップされる XML スキーマ型の名前。
      StringSEnamespace
      XML スキーマ型のターゲット名前空間の名前。
      StringSE[]propOrder
      クラスが XML スキーマ複合型にマップされるときの XML スキーマ要素の順序を指定します。
    • 要素の詳細

      • name

        StringSE name
        クラスがマップされる XML スキーマ型の名前。
        デフォルト:
        "##default"
      • propOrder

        StringSE[] propOrder
        クラスが XML スキーマ複合型にマップされるときの XML スキーマ要素の順序を指定します。

        propOrder がクラスのマッピングにどのように影響するかについては表を参照してください

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

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

        propOrder にリストされている JavaBean プロパティまたはフィールドは、一時的なものであったり、@XmlTransient でアノテーションが付けられていたりしてはなりません。

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

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

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

        ClassSE<?> factoryClass
        このクラスのインスタンスを作成するための引数なしのファクトリメソッドを含むクラス。デフォルトはこのクラスです。

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

        factoryClass が DEFAULT.class であり、factoryMethod が "" でない場合、factoryMethod はこのクラスの静的ファクトリメソッドの名前です。

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

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

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