2

所以我有一棵树实现了我的自定义树结构,更不像这样:

树类:

@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>
4

2 回答 2

0

看看@XmlElements注释,将其中一个合适的添加到 children 属性中Node应该可以实现您所追求的。

于 2012-11-02T08:36:35.640 回答
0

问题是您的组“是一个”节点。当序列化程序遇到一个既有“孩子”又有“组”的对象时该怎么办?

完全避免java继承可能会更好。

实际上,您在[sic]上没有@XMLElement注释,或者...getGeoups()getEntities()

于 2012-11-02T09:29:07.407 回答