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

問題は、グループが「is-a」ノードであることです。「子」と「グループ」の両方を持つオブジェクトに遭遇した場合、シリアライザーは何をしますか?

Java 継承を完全に回避する方がよい場合があります。

実際、[sic]@XMLElementに注釈がないか、どちらか...getGeoups()getEntities()

于 2012-11-02T09:29:07.407 に答える