所以我有一个树实现我的自定义树结构更像这样:
树类:
@XmlRootElement
public class Tree {
Set<? extends TreeNode> nodes;
@XmlElement
Set<? extends TreeNode> getNodes() {...}
}
抽象节点:
public abstract class Node {
Set<? extends Node> children;
private String name;
@XmlAttribute
public String getName() {...}
@XmlElement
public abstract Set<? extends Node> getChildren();
}
小组(可以包含小组和实体):
@XmlRootElement(name = "group")
public class Group extends Node {
private final Set<Group> groups = new HashSet<Group>();
private final Set<Entity> entities = new HashSet<Entity>();
public Set<Group> getGeoups() { ... }
public Set<Entity> getEntities() { ... }
}
节点:
@XmlRootElement(name = "entity")
public class Entity extends Node {
public Set<DashboardNode> getChildren() {
return Collections.<DashboardNode> emptySet();
}
}
我的问题是,JAXB不为组和实体使用不同的名称。我想得到类似的结果:
<tree>
<node>
<group>
<group>
<entity/>
</group>
</group>
</node>
<node>
<group>
<entity/>
</group>
<group>
</group>
<entity/>
</node>
</tree>
我得到了这个:
<tree>
<node>
<children>
<children>
<children/>
</children>
</children>
</node>
(...)
</tree>
如果我在getChildren()方法中删除抽象节点类中的注释,我只会注意到这一点:
<tree>
<node>
</node>
<node>
</node>
</tree>
答案 0 :(得分:0)
查看@XmlElements
注释,在Node
的children属性中添加一个合适的注释,可以实现您的目标。
答案 1 :(得分:0)
问题是你的小组'是'a'节点。当遇到一个既有“孩子”又有“群组”的对象时,串行器要做什么?
最好完全避免使用java继承。
实际上,@XMLElement
[原文]或getGeoups()
上没有getEntities()
注释......