何時間もの試行錯誤の後、誰かが私の問題を解決するのを手伝ってくれるかどうかここで尋ねたい.
シナリオ:
- JAX-WS 実装として Apache CXF を使用する Java EE サーバー (JBoss 7.2)。
- ServiceA (サービス エンドポイント) と ServiceB (サービス A とサービス エンドポイントを拡張)
- 3 つの持続性プロジェクト: Common、PersistenceA は Common に依存し、PersistenceB は PersistenceA に依存します。
- すべての永続化クラスのスーパークラスであるクラスがあり
UUIDIdentified
ます (JPA を提供します@ID
)。それはプロジェクト共通にあります
ServiceA クラス内にはメソッドがあります。public List<DTO> getData(UUIDIdentified value);
サーバーは、すべて UUIDIdentified のサブタイプであるいくつかのオブジェクトを読み取ります。目標は、オブジェクトを DTO にパックすることです。
DTO は次のようになります。
@XmlAccessorType(XmlAccessType.FIELD)
public class DTO{
private static final long serialVersionUID = 1L;
@XmlElement(name = "uuididentified")
UUIDIdentified object;
public UUIDIdentified getObject() {
return object;
}
public void setObject(final UUIDIdentified object) {
this.object = object;
}
}
SOAP 応答を調べると、<uuididentified>
タグにデータがないことがわかります。私のJAXBの理解はそれほどよくありませんが、UUIDIdentifiedの「実際の」インスタンスとそのタイプはJAXBContextには不明です。
クラスに追加すること@XmlSeeAlso({TypeA.class,TypeB.class})
でこれを解決できました(私はそう思います)。UUIDIdentified
しかし、そうすると、Project Common は Projects PersistenceA/B に依存することになるので、それはできません。
どうすればこれを解決できますか。UUIDIdentifiedを追加するときにClassA/BをJAXBContextに追加する必要があることをJAXB(おそらくxml構成ファイル)にどのように言えますか?
SEIでjaxb.indexファイル、ObjectFactory、@XmlSeeAlsoなどを試しましたが、それが正しい方法かどうかはわかりません。