簡體   English   中英

JAXB編組非注釋對象列表的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM