Menu Close

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;

  ...

}