Как создать две разные структуры XML из одного класса, используя JAXB - PullRequest
2 голосов
/ 17 ноября 2010

У меня есть два класса, Node и Group, группа является подклассом Node.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Node", propOrder = {
    "id",
    "children"
})
public class Node {

    protected int id;
    protected List<Node> children;
}

затем Групповой класс

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Group", propOrder = {
    "name"
})
public class Group extends Node{
   protected String name;
}

Я определил класс Tree, который будет содержать класс Node, поэтому после маршала xml будет

<tree>
  <children>
    <id>1</id>
    <children>
        <id>2</id>
    </children>
    <children>
        <id>3</id>
    </children>
  </children>
</tree>

Существует еще один класс Groups, который будет содержать все группы в массиве, поэтому я хочу, чтобы xml был

<groups>
  <groups>
    <name>group-1</name>
  </groups>
  <groups>
    <name>group-2</name>
  </groups>
  <groups>
    <name>group-3</name>
  </groups>
</groups>

Но поскольку группа унаследовала Node, второй всегда генерирует xml, как этот

<groups>
  <groups>
    <id>group-1</id>
    <name>group-1</name>
    <children>
      <id>2</id>
      <name>group-2</name>
    </children>
    <children>
      <id>3</id>
      <name>group-3</name>
    </children>
  <groups>
<groups>

Как мне относиться к двум разным классам к разным XML-файлам, даже если они наследуются по родству. Мне нужен объект для обработки вещей с текущим унаследованным дизайном. Таким образом, наследуемое не может быть удалено.

Если я добавлю @XmlTransient к свойству дочерних узлов Node, второй xml будет тем, который я хочу, но первый xml не может сгенерироваться как тот, который я хочу.

Я сейчас сбиваю с толку и не знаю, как это сделать.

Любые предложения приветствуются.

Заранее спасибо.

1 Ответ

1 голос
/ 19 ноября 2010

Вы можете иметь несколько представлений XML для объектной модели, используя расширение в EclipseLink JAXB (MOXy) .Это расширение позволяет вам предоставлять дополнительные сопоставления через представление XML.Для получения дополнительной информации см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...