17.8. インターフェース、 抽象クラス、 JAXB
オブジェクトモデルによっては抽象クラスやインターフェースを多く使用するものがあります。 JAXB はルートエレメントのインターフェースでは動作しません。
JAXBContext の作成に必要な情報が欠けているため、 RESTEasy はインターフェースや raw 抽象クラスであるパラメータをアンマーシャリングすることはできません。 次の例を見てください。
この例では、 RESTEasy はエラーを表示します ("Cannot find MessageBodyReader for..." など)。 これは、
IFoo の実装が JAXB クラスであることを RESTEasy が認識しないため、 IFoo の JAXBContext を作成できないからです。 回避策として、 インターフェースに @XmlSeeAlso アノテーションを付けて問題を修正します。
注記
この方法は手動のハンドコード JAXB では機能しません。
@XmlSeeAlso(RealFoo.class)
public interface IFoo {}
@XmlSeeAlso(RealFoo.class)
public interface IFoo {}
IFoo 上にある追加の @XmlSeeAlso により、 RealFoo インスタンスのアンマーシャリング方法を認識する JAXBContext を RESTEasy が作成できるようになります。