38.5. 固定値属性マッピングのカスタマイズ

概要

デフォルトでは、コードジェネレーターは、固定値を持つものとして定義された属性を通常のプロパティーにマップします。スキーマ検証を使用する場合、Apache CXF はスキーマ定義を適用できます (「スキーマ検証タイプの値」 を参照)。ただし、スキーマ検証を使用すると、メッセージの処理時間が長くなります。

固定値を持つ属性を Java にマップする別の方法は、それらを Java 定数にマップすることです。globalBindings カスタマイズ要素を使用して、固定値属性を Java 定数にマッピングするようコードジェネレーターに指示することができます。また、property 要素を使用して、固定値属性の Java 定数へのマッピングをよりローカルレベルでカスタマイズすることもできます。

グローバルカスタマイズ

この動作は、globalBinding 要素の fixedAttributeAsConstantProperty 属性を追加することにより変更できます。この属性を true に設定すると、fixed 属性を使用して定義された属性を Java 定数にマッピングするようにコードジェネレーターに指示します。

例38.21「定数の生成を強制するためのインラインカスタマイズ」 は、コードジェネレーターに固定値の属性の定数を生成させるインラインカスタマイズを示しています。

例38.21 定数の生成を強制するためのインラインカスタマイズ

<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 fixedAttributeAsConstantProperty="true" />
    </appinfo>
  </annotation>
  ...
</schema>

例38.22「定数の生成を強制するためのファイルのバインディング」 は、固定属性の生成をカスタマイズする外部バインディングファイルを示しています。

例38.22 定数の生成を強制するためのファイルのバインディング

<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="types.xsd">
    <jaxb:globalBindings fixedAttributeAsConstantProperty="true" />
  <jaxb:bindings>
<jaxb:bindings>

ローカルマッピング

property 要素の fixedAttributeAsConstantProperty 属性を使用して、属性ごとに属性のマッピングをカスタマイズできます。この属性を true に設定すると、fixed 属性を使用して定義された属性を Java 定数にマッピングするようにコードジェネレーターに指示します。

例38.23「定数の生成を強制するためのインラインカスタマイズ」 は、コードジェネレーターが固定値を持つ単一の属性の定数を生成するように強制するインラインカスタマイズを示しています。

例38.23 定数の生成を強制するためのインラインカスタマイズ

<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">
  <complexType name="widgetAttr">
    <sequence>
      ...
    </sequence>
    <attribute name="fixer" type="xsd:int" fixed="7">
      <annotation> <appinfo> <jaxb:property fixedAttributeAsConstantProperty="true" /> </appinfo> </annotation>
     </attribute>
  </complexType>
  ...
</schema>

例38.24「定数の生成を強制するためのファイルのバインディング」 は、固定属性の生成をカスタマイズする外部バインディングファイルを示しています。

例38.24 定数の生成を強制するためのファイルのバインディング

<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="types.xsd">
    <jaxb:bindings node="xsd:complexType[@name='widgetAttr']">
      <jaxb:bindings node="xsd:attribute[@name='fixer']">
            <jaxb:property fixedAttributeAsConstantProperty="true" />
        </jaxb:bindings>
    </jaxb:bindings>
  </jaxb:bindings>
<jaxb:bindings>

Java マッピング

デフォルトのマッピングでは、すべての属性がゲッターメソッドとセッターメソッドを使用して標準の Java プロパティーにマッピングされます。このカスタマイズが fixed 属性を使用して定義された属性に適用されると、例38.25「固定値属性の Java 定数へのマッピング」に示されているように、属性は Java 定数にマッピングされます。

例38.25 固定値属性の Java 定数へのマッピング

@XmlAttribute
public final static type NAME = value;

タイプ は、「プリミティブ型」 で説明されているマッピングを使用して、属性の基本タイプを Java タイプにマッピングすることによって決定されます。

NAME は、attribute 要素の name 属性の値をすべて大文字に変換することで決定されます。

attribute 要素の fixed 属性の値によって決定されます。

たとえば、例38.23「定数の生成を強制するためのインラインカスタマイズ」 で定義された属性 例38.26「Java 定数にマップされた固定値属性」 に示すようにマップされます。

例38.26 Java 定数にマップされた固定値属性

@XmlRootElement(name = "widgetAttr")
public class WidgetAttr {

    ...

  @XmlAttribute
  public final static int FIXER = 7;

  ...

}