JAXB Unmarshalls XML错误

时间:2011-08-02 18:29:57

标签: java xml jaxb unmarshalling

好吧,我是JAXB的新手并且无法找到正确的文档来帮助我完成这项工作,我已经阅读了一堆并且仍然不明白JaxB正在做什么。

我有一个班级,叫它容器。它由MyContainer扩展。除了从Container继承的内容之外,MyContainer还有一个额外的布尔值。

无论如何,这就是JAXB Marshalls MyContainer

的方式
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MyContainer name="container" id="1">
    <boolVal>false</boolVal>
    <ListOfResources> //Using @XmlElementWrapper(name=..
        <child>
            <ID>Test Comp 1</ID>
        </child>
        <child>
            <ID>Test Comp 2</ID>
        </child>
    </ListOfResources>
</MyContainer>

我不明白的是标​​签“child”。名为child的唯一东西是列表的名称。该列表包含对象(具有字符串属性,ID),但该对象不应为“child”。然而真正的问题是当我去Demarshall这个班级的时候。该列表将填充列出的“孩子”。我不明白我错过了什么。请注意,我没有得到JAXB异常,但是当我检查未编组的对象时,列表是未填充的

编辑:澄清

对不起,我所说的是JAXB将对列表中的元素进行编组,尽管列表中的每个元素都有列表的名称(子)。但是,当它进入demarshall时,它不会填充新对象中的列表。

EDIT2:Current Setter

public void setChildren(List<Resource<IType>> other) {
    Iterator iterator = other.iterator();
    while(iterator.hasNext()){
        Resource<IType> piece = 
            new Resource<IType>((Resource<IType>) iterator.next());
        this.listOfResources.add(piece);
    }

}

1 个答案:

答案 0 :(得分:0)

我不确定你的问题是什么。首先你说列表将填充“孩子”,然后你说列表没有填充。它是什么,它与你期望看到的有什么不同?如果没有填充某些内容,最常见的原因是您没有为该属性创建格式良好的setter。

在命名时,元素的名称始终与映射到它的属性相同。您可以使用@XmlElement(name="...")更改元素的名称,或者如果您希望在属性引用的对象(如组成列表的对象)之后命名元素,请使用@XmlElementRef