38.4. 列挙マッピングのカスタマイズ


概要

xsd:string 以外のスキーマタイプに基づく列挙型が必要な場合は、コードジェネレーターにマップするように指示する必要があります。生成される列挙定数の名前を制御することもできます。

カスタマイズは、1 つ以上の jaxb:typesafeEnum Member 要素と共に jaxb:typesafeEnum Class 要素を使用して行われます。

コードジェネレーターのデフォルト設定では、列挙型のすべてのメンバーに対して有効な Java 識別子を作成できない場合もあります。globalBindings カスタマイズの属性を使用して、コードジェネレーターがこれを処理する方法をカスタマイズできます。

メンバー名カスタマイザー

列挙のメンバーを生成する際にコードジェネレーターが名前の競合に直面する場合や、列挙のメンバーに有効な Java 識別子を作成できない場合、デフォルトではコードジェネレーターが警告を生成し、列挙の Java enum 型を生成しません。

この動作は、globalBinding 要素の typesafeEnumMemberName 属性を追加することにより変更できます。typesafeEnumMemberName 属性の値については、表38.2「列挙型メンバー名の生成をカスタマイズするための値」 に記載されています。

表38.2 列挙型メンバー名の生成をカスタマイズするための値
説明

skipGeneration(デフォルト)

Java enum 型が生成されず、警告を生成することを指定します。

generateName

パターン VALUE_N に従ってメンバー名が生成されることを指定します。N は 1 から始まり、列挙のメンバーごとに増分されます。

generateError

列挙を Java enum 型にマッピングできない場合に、コードジェネレーターがエラーを生成することを指定します。

例38.17「タイプセーフなメンバー名を強制するためのカスタマイズ」 は、コードジェネレーターにタイプセーフなメンバー名を生成させるインラインカスタマイズを示しています。

例38.17 タイプセーフなメンバー名を強制するためのカスタマイズ

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <annotation>
    <appinfo>
      <jaxb:globalBindings typesafeEnumMemberName="generateName" />
    </appinfo>
  </annotation>
  ...
</schema>

クラスカスタマイザ

jaxb:typesafeEnumClass 要素は、XML スキーマ列挙を Java enum 型にマッピングする必要があることを指定します。これには、表38.3「生成された列挙型クラスをカスタマイズするための属性」 で説明されている 2 つの属性があります。jaxb:typesafeEnumClass 要素がインラインで指定されている場合は、変更する単純型の xsd:annotation 要素内に配置する必要があります。

表38.3 生成された列挙型クラスをカスタマイズするための属性
属性説明

name

生成される Java enum 型の名前を指定します。この値は有効な Java 識別子である必要があります。

map

列挙を Java enum 型へマッピングすべきかどうかを指定します。デフォルト値は true です。

メンバーカスタマイザー

jaxb:typesafeEnumMember 要素は、XML スキーマ enumeration ファセットと Java enum 型の定数の間のマッピングを指定します。カスタマイズする列挙では、enumeration ごとに 1 つの jaxb:typesafeEnumMember 要素を使用する必要があります。

インラインカスタマイズを使用する場合、この要素は次の 2 つの方法のいずれかで使用できます。

  • 変更する enumeration ファセットの xsd:annotation 要素内に配置することができます。
  • 列挙のカスタマイズに使用される jaxb:typesafeEnumClass 要素の子として、すべて配置することができます。

jaxb:typesafeEnumMember 要素には、必須の name 属性があります。name 属性は、生成される Java enum 型の定数の名前を指定します。その値は有効な Java 識別子でなければなりません。

jaxb:typesafeEnumMember 要素には、value 属性もあります。value は、enumeration ファセットを適切な jaxb:typesafeEnumMember 要素に関連付けるために使用されます。value 属性の値は、enumeration ファセットの value 属性の値のいずれかと一致する必要があります。この属性は、型の生成をカスタマイズするために外部バインディング仕様を使用する場合や、jaxb:typesafeEnumMember 要素を jaxb:typesafeEnumClass 要素の子としてグループ化する場合に必要です。

例38.18「列挙型のインラインカスタマイズ」 は、インラインカスタマイズを使用し、列挙型のメンバーを個別にカスタマイズした列挙型を示しています。

例38.18 列挙型のインラインカスタマイズ

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <simpleType name="widgetInteger">
    <annotation>
      <appinfo>
        <jaxb:typesafeEnumClass />
      </appinfo>
    </annotation>
    <restriction base="xsd:int">
      <enumeration value="1">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="one" />
          </appinfo>
        </annotation>
      </enumeration>
      <enumeration value="2">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="two" />
          </appinfo>
        </annotation>
      </enumeration>
      <enumeration value="3">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="three" />
          </appinfo>
        </annotation>
      </enumeration>
      <enumeration value="4">
        <annotation>
          <appinfo>
            <jaxb:typesafeEnumMember name="four" />
          </appinfo>
        </annotation>
      </enumeration>
    </restriction>
  </simpleType>
<schema>

例38.19「結合マッピングを使用した列挙型のインラインカスタマイズ」 は、インラインカスタマイズを使用し、メンバーのカスタマイズをクラスのカスタマイズに組み合わせた列挙型を示しています。

例38.19 結合マッピングを使用した列挙型のインラインカスタマイズ

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <simpleType name="widgetInteger">
    <annotation>
      <appinfo>
        <jaxb:typesafeEnumClass>
            <jaxb:typesafeEnumMember value="1" name="one" />
            <jaxb:typesafeEnumMember value="2" name="two" />
            <jaxb:typesafeEnumMember value="3" name="three" />
            <jaxb:typesafeEnumMember value="4" name="four" />
        </jaxb:typesafeEnumClass>
      </appinfo>
    </annotation>
    <restriction base="xsd:int">
      <enumeration value="1" />
      <enumeration value="2" />
      <enumeration value="3" />
      <enumeration value="4" >
    </restriction>
  </simpleType>
<schema>

例38.20「列挙をカスタマイズするためのバインディングファイル」 は、列挙型をカスタマイズする外部バインディングファイルを示しています。

例38.20 列挙をカスタマイズするためのバインディングファイル

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="enumMap.xsd">
    <jaxb:bindings node="xsd:simpleType[@name='widgetInteger']">
        <jaxb:typesafeEnumClass>
            <jaxb:typesafeEnumMember value="1" name="one" />
            <jaxb:typesafeEnumMember value="2" name="two" />
            <jaxb:typesafeEnumMember value="3" name="three" />
            <jaxb:typesafeEnumMember value="4" name="four" />
        </jaxb:typesafeEnumClass>
    </jaxb:bindings>
  </jaxb:bindings>
<jaxb:bindings>
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.