[英]Problems with JAXB marshalling lists of non-annotated objects
在使用JAXB解組關閉的對象列表時,我遇到了一個問題(在無法添加JAXB批注的意義上來說是關閉的)。 基本上,我的XML如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<document>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!-- SNIP! -->
</rdf:RDF>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<!-- SNIP! -->
</rdf:RDF>
</document>
我的Document類是:
@XmlRootElement(name = "document", namespace = Namespace.DEFAULT_NAMESPACE)
@XmlAccessorType(XmlAccessType.FIELD)
public class Document {
@XmlJavaTypeAdapter(ModelAdapter.class)
@XmlElement(name = "RDF", namespace = Namespace.RDF_NAMESPACE)
private List<Model> models;
....
其中Model是來自框架的類,我無法向其中添加JAXB注釋,因此無法向其添加適配器。
ModelAdapter的實現如下:
public class ModelUnmarshalAdapter extends ModelAdapter<Object, Model> {
@Override
public Model unmarshal(final Object v) throws Exception {
// Turn incoming Node into a Model object
Model model = convert(v);
return model;
}
....
}
當我解組XML時,我發現ModelUnmarshalAdapter.unmarshal()被調用兩次(由於XML中有2個RDF元素),但是Document實例模型屬性始終為null。 就像它沒有實例化必要的列表實例。
任何想法將不勝感激。
謝謝
缺口
經過反復試驗,結果發現解決方案是將封閉對象的具體類(在我的情況下為ModelCom,實現了Model接口)子類化,然后在其中添加@XmlJavaTypeAdapter
@XmlJavaTypeAdapter(ModelAdapter.class)
public class MyModel extends ModelCom {
public Model(Graph base) {
super(base);
}
public Model(Graph base, Personality<RDFNode> personality) {
super(base, personality);
}
}
Document類現在很簡單
public class Document {
@XmlElement(name = "RDF", namespace = Namespace.RDF_NAMESPACE)
private List<MyModel> models;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.