我正在使用JAXB來快速生成XML。我有一個代表樹形結構的類:有什麼辦法來限制JAXB中對象圖的編組深度?
@XmlRootElement(name = "element")
public class Element {
// [...]
@XmlElementWrapper(name="childs")
@XmlElementRef
public List<Element> getChilds() { /*...*/ }
}
我想限制子集合被編組的深度。因此,例如,我想寫出我送給Marshaller的元素的直接孩子,但省略他們的孩子。
有沒有一個標準的JAXB方式來做到這一點,或者可能是一個回調我可以使用禁用動態的財產編組?
我已經想到了,但無法弄清楚如何從適配器內部觸發JAXB對孩子的編組。沒有通過XmlAdapter接口訪問Marshaller,所以看起來我的選擇是:1)安裝一個新的,可以成爲一個大的性能命中或2)訪問當前的Marshaller - 例如使用一個自定義的ThreadLocal上下文類 - 我猜是不安全的(或者甚至可能),因爲這意味着重用Marshaller而另一個對象仍在處理中。 – FRotthowe 2009-11-10 21:00:13
您可以使用一個Marshailer池並重新使用它們。無論如何,一次只能使用2個,因爲你真的只需要2個等級。 – 2009-11-10 21:53:19
我會嘗試按照你的建議使用一個marshallers池。這不像「乾淨」的解決方案,但至少不需要對模型類進行更改。 – FRotthowe 2009-11-18 07:41:26