簡體   English   中英

在Java中使用JAXB序列化樹結構

[英]Serializing a tree structure using JAXB in Java

所以我有一個樹實現了我的自定義樹結構,如下所示:

樹類:

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

看一下@XmlElements批注,將其中合適的一項添加到Node的children屬性中應該會達到您的期望。

問題是您的組“是”節點。 當序列化程序遇到同時具有“子項”和“組”的對象時,該怎么辦?

最好完全避免繼承Java。

實際上,您在getGeoups() [sic]或getEntities()上都沒有@XMLElement批注...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM