32.4. ランタイムマーシャラーへのクラスの追加

概要

Apache CXF ランタイムが XML データを読み書きするとき、XML スキーマタイプをそれらの代表的な Java タイプに関連付けるマップを使用します。デフォルトでは、マップには WSDL コントラクトの schema 要素のターゲット namespace で定義されたすべてのタイプが含まれます。また、WSDL コントラクトにインポートされたスキーマの名前空間から生成されたタイプも含まれています。

アプリケーションの schema 要素によって使用されるスキーマ namespace 以外の名前空間から型を追加するには、@XmlSeeAlso アノテーションを使用します。アプリケーションがアプリケーションの WSDL ドキュメントの範囲外で生成されるタイプを操作する必要がある場合は、@XmlSeeAlso アノテーションを編集して JAXB マップに追加できます。

@XmlSeeAlso アノテーションを使用する

@XmlSeeAlso アノテーションは、サービスの SEI に追加できます。JAXB コンテキストに含めるクラスのコンマ区切りリストが含まれています。例32.7「JAXB コンテキストにクラスを追加するための構文」@XmlSeeAlso アノテーションを使用する構文を示しています。

例32.7 JAXB コンテキストにクラスを追加するための構文

import javax.xml.bind.annotation.XmlSeeAlso;
     @WebService()
     @XmlSeeAlso({Class1.class, Class2.class, ..., ClassN.class})
     public class GeneratedSEI {
         ...
     }

JAXB が生成したクラスにアクセスできる場合は、必要なタイプに対応するために生成された ObjectFactory クラスを使用することがより効率的になります。ObjectFactory クラスを含めるには、オブジェクトファクトリーに認識されるすべてのクラスが含まれます。

例32.8「JAXB コンテキストへのクラスの追加」 は、@XmlSeeAlso アノテーションが付けられた SEI を示しています。

例32.8 JAXB コンテキストへのクラスの追加

...
import javax.xml.bind.annotation.XmlSeeAlso;
...
    @WebService()
    @XmlSeeAlso({org.apache.schemas.types.test.ObjectFactory.class, org.apache.schemas.tests.group_test.ObjectFactory.class})
    public interface Foo {
        ...
    }