2

オブジェクトであるいくつかの「特権」を含むことができるオブジェクト「ロール」があります。ここで、Xstream で Role をシリアル化しようとすると、xml は次のようになります。

  <role>
    <roleName>Administrator</roleName>
    <privileges class="org.hibernate.collection.PersistentSet">
      <set>
        <privilege>
          <privilegeId>1001</privilegeId>
          <privilegeName>Admin Privilege</privilegeName>
          <privilegeKey>Admin</privilegeKey>
        </privilege>
      </set>
      <initialized>true</initialized>
      <owner class="role" reference="../.."/>
      <cachedSize>-1</cachedSize>
      <rolemodel.valueobject.Role.privileges</role>
      <key class="int">3</key>
      <dirty>false</dirty>
      <storedSnapshot class="map">
        <entry>
          <privilege reference="../../../set/privilege"/>
          <privilege reference="../../../set/privilege"/>
        </entry>
      </storedSnapshot>
    </privileges>
  </role>

私はそれを次のようにしたい:

  <role>
    <roleName>Administrator</roleName>
    <privileges>
          <privilegeId>1001</privilegeId>
          <privilegeName>Admin Privilege</privilegeName>
          <privilegeKey>Admin</privilegeKey>
    </privileges>
  </role>

これらの追加フィールドをすべて省略/削除/含めないようにするにはどうすればよいですか? hbm.xmlで宣言していないため、hibernateによって追加された「ユーティリティ」フィールドのようです。私はすでにそれらを省略しようとしました.Privilegesコレクションを暗黙的に追加し、XStreamページで見つけた他のものを追加しました.

編集 以下で提案されているように XSLT テンプレートを作成できませんでしたが、カスタム コンバーターはこのジョブを実行するための非常に優れたシンプルなツールであることがわかりました。ここのヘルプ ページを確認してください - http://x-stream.github.io/converter-tutorial.html。そして、これが私のマーシャルメソッドです:

public void marshal(Object value, HierarchicalStreamWriter writer,
                    MarshallingContext context) {
    Role role = (Role) value;
    writer.startNode("roleId");
    writer.setValue(role.getRoleId().toString());
    writer.endNode();
    writer.startNode("roleName");
    writer.setValue(role.getRoleName());
    writer.endNode();
    writer.startNode("privileges");
    for (Privilege privilege : role.getPrivileges()){
        writer.startNode("privilege");
        writer.setValue(privilege.getPrivilegeName());
        writer.endNode();
    }
    writer.endNode();
}

そしてそれが生成するxml:

  <role>
    <roleId>3</roleId>
    <roleName>Web Administrator</roleName>
    <privileges>
      <privilege>Web Access</privilege>
    </privileges>
  </role>
4

0 に答える 0