好吧,我是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);
}
}
答案 0 :(得分:0)
我不确定你的问题是什么。首先你说列表将填充“孩子”,然后你说列表没有填充。它是什么,它与你期望看到的有什么不同?如果没有填充某些内容,最常见的原因是您没有为该属性创建格式良好的setter。
在命名时,元素的名称始终与映射到它的属性相同。您可以使用@XmlElement(name="...")更改元素的名称,或者如果您希望在属性引用的对象(如组成列表的对象)之后命名元素,请使用@XmlElementRef。