接口的各種具體實現我有一個類,任何我需要編組爲XML。如何處理與JAX-B
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassToBeMarshalled {
public Interface object;
}
該接口是由很多具體類實現的,其中大多數是供應商特定的,我的源代碼無法訪問。
所以我的問題是:
如果我試圖封送類,JAX-B會抱怨接口當前的具體實施沒有在上下文已知的 - 換句話說,具體的類沒有被加載通過調用提供當前實現的JAXBContext.newInstance來進入上下文。
最常見的方式來理清這個問題是:
1)使用XMLSeeAlso - 不是一個可行的選擇,因爲有很多具體的類
2)註釋與@XmlRootElement每個類的 - 不因爲我沒有上所有的課
訪問一個可行的選擇有誰知道一種方法,使JAX-B負載的具體類到它的上下文在必要時?
謝謝。
P.S:我使用的是JAX-B RI
如果您正在使用的EclipseLink JAXB(莫西),那麼你可以使用下面的策略。 http://blog.bdoughan.com/2010/07/moxy-jaxb-map-interfaces-to-xml.html。解組將創建一個代理,但接口的任何實現都會編組。 –
這就解決了這個問題 - 但不幸的是我必須堅持使用JAX-B。我們的生產環境非常有限,只有JAX-B RI可以在prod盒中使用。可悲的是我不能採用MOXY。謝謝。 – cldjr
你是否控制'Interface'的源代碼?在編組之前遍歷數據結構並收集所有實現類是否可行?所有的實現類是否被設計爲適當的java bean? – MvG