2012-12-05 86 views
3

我正在開發要部署在WebSphere應用程序服務器上的Java EE應用程序。在這個應用程序中,我有一個Web服務,通​​過它我想將JPA實體對象作爲方法調用的結果。問題來自實體關係產生的循環。使用JAXB和Eclipselink從Web服務方法返回JPA實體Moxy

我已經使用Eclipselink Moxy來解決JPA實體之間的反向引用問題。但是,由於我自己並沒有調用JAXB實現,但是WAS調用它自己,所以@XmlInverseReference註解會被忽略。我不想使用@XmlTransient批註,因爲對於我來說,獲取所有引用的實體作爲方法結果非常重要。

是否可以使用Moxy作爲默認的WebSphere JAXB實現?或者,我可以爲我的實體創建JAXB適配器,然後在運行時添加@XmlTransient註釋?我需要這個,因爲我有方法返回實體引用其他實體,但也返回引用的實體與他們對數據庫關係的來源引用。

回答

1

備註:我是EclipseLink JAXB (MOXy)的領導和JAXB (JSR-222)專家組的成員。

JAX-WS實現中沒有要求它們能夠在交替的JAXB實現中進行交換。 JAX-WS中不支持MOXy作爲JAXB提供程序的環境中的一種選擇是使用標準的Provider機制。

一個竅門,你可以嘗試更換爲@XmlInverseReference註釋需要的是利用解組事件回調機制。這涉及將下面的方法放在子對象上。在該方法的實現中,您可以將參考設置爲父項。

void afterUnmarshal(Unmarshaller, Object parent); 

注意:您需要使用@XmlTransient對該屬性進行註釋。

MOXY可以用作在以下環境中JAXB提供用於JAX-WS:

+0

非常感謝您的支持swer。執行afterUnmarshal方法的選項對我不起作用,因爲我的編組需要雙向工作,從父到子,反之亦然,這意味着我無法在任何地方使用@XmlTransient。您能否提供關於如何在WebSphere中將Moxy作爲JAXB提供程序安裝的更多信息? – dpesic

+0

@XmlInverseReference批註中存在拼寫錯誤 - 因此不接受少於6個字符的編輯: –

+0

@JacekLaskowski - 感謝您指出錯字,它現在已修復。 –

相關問題