JAXB バインディングを使用して、生成された Web サービス タイプのサブクラスであるドメイン レイヤー オブジェクトに直接アンマーシャリングしています。メソッドをオーバーライドしたり、カスタム ロジックを記述したりできるため、これは優れたソリューションです。ただし、XJC コンパイラは、生成されたすべてのクラスに @XmlSeeAlso({MySubclass.class}) アノテーションを付けることを主張しています。ドメインオブジェクトに密結合されています。これは明らかに望ましくなく、ここでは説明しませんが、私のプロジェクト間であらゆる種類の参照の問題を引き起こしています。
@XmlSeeAlso アノテーションを持たないクラスを生成することは可能ですか? サブクラスへのアンマーシャリングの実際の作業は、ObjectFactory クラスで行われるようです。jaxb バインディングを省略して、各アプリケーションのカスタム ObjectFactory を代用することは可能ですか? これにより、共有ユーティリティで自動生成された Web サービス タイプを持つことができ、各 Web プロジェクトはこれらのタイプの異なるサブクラスにアンマーシャリングできます。
<jaxb:bindings node="//xs:complexType[@name='AutogeneratedWebserviceType']">
<jaxb:class implClass="my.project.CustomSubclass" />
</jaxb:bindings>
このバインディングは、サブクラスへのアンマーシャリングの実際の作業を行うように見える ObjectFactory にメソッドを作成します。
public AutogeneratedWebserviceType createAutogeneratedWebserviceType() {
return new CustomSubclass();
}
可能であれば、顧客の ObjectFactory を提供することにより、@XmlSeeAlso アノテーションを使用せずにこの動作が必要です。