【发布时间】:2014-09-18 17:41:55
【问题描述】:
我在使用 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 实例模型属性始终为空。好像它没有实例化必要的列表实例。
我们将不胜感激任何想法。
谢谢
尼克
【问题讨论】:
-
我不太相信
XmlAdapter<?,?>、ModelAdapter<Object, Model>的继承结构,它缺失但设置为@XmlJavaTypeAdapter和ModelUnmarshalAdapter,(如您所说)通过调用unmarshal。这里需要一整套重现错误的java代码——否则都是猜测,
标签: java jaxb unmarshalling