尝试解组此 xml 时:
<holder>
<name>a</name>
<elements>
<element>
<name>elem</name>
</element>
</elements>
</holder>
我在 中得到错误unexpected element (uri:"", local:"element"). Expected elements are <{}link>,<{}totalSize>
,ValidationEventHandler
并且标记<elements>
(因此类中的elements
字段Holder
)被忽略。
生成XML
两者时link
,并且totalSize
不输出,因为它们是零。
JAVA模型
层次结构有点复杂:
(为了问题而简化)
元素根
摘要ElementRoot
有链接成员
public abstract class ElementRoot implements Serializable {
protected String link;
@XmlElement(name = "link")
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
}
包装器
abstract Wrapper 扩展 ElementRoot 并具有 totalSize 成员
public abstract class Wrapper<T> extends ElementRoot {
protected int totalSize;
protected List<T> collection = new ArrayList<>();
@XmlElement
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
public abstract List<T> getCollection();
}
持有者
Holder 扩展 ElementRoot
@XmlRootElement(name = "holder")
@XmlType(propOrder = {"name", "elements"})
public class Holder extends ElementRoot {
private String name;
private Elements elements;
// setters and getters not annotated
}
元素
Elements 扩展 Wrapper 并具有 Element 的集合
import java.util.Collection;
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "elements)
public class Elements extends Wrapper {
@Override
@XmlElement(name="element")
public Collection<Element> getElements() {
return elements;
}
// No setter, to add getElements().add(element)
}
元素
元素扩展 ElementRoot
@XmlRootElement(name = "element")
@XmlType(propOrder = {"id", "name"})
public class Element extends ElementRoot {
private Integer id;
private String name;
// setters and getters no annotated
}
环境
我正在使用java 7
:
JAXB-api 2.2.7
MOXy 2.5.0