Eclipse Moxy игнорирует @XmlNamedObjectGraph в некоторых случаях - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть много классов, которые конвертируются в XML с использованием eclipse MOXy @XmlNamedObjectGraphs для генерации.Похоже, что они в основном ведут себя сами, за исключением одного класса - TaskSchedule:

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlNamedObjectGraphs({
  @XmlNamedObjectGraph(
          name="full",
          attributeNodes = {
                  @XmlNamedAttributeNode( "businessEntityNumber" ),
                  @XmlNamedAttributeNode( "businessEntityClass" ),
                  @XmlNamedAttributeNode( value="task", subgraph="simple" ),
                  @XmlNamedAttributeNode( "cron" ),
                  @XmlNamedAttributeNode( "enabled" ),
                  @XmlNamedAttributeNode( "endDate" ),
                  @XmlNamedAttributeNode( "name" ),
                  @XmlNamedAttributeNode( "period" ),
                  @XmlNamedAttributeNode( value="region", subgraph="simple" ),
                  @XmlNamedAttributeNode( value="productGroup", subgraph="simple" ),
                  @XmlNamedAttributeNode( value="user", subgraph="simple" ),
                  @XmlNamedAttributeNode( "scheduleType" ),
                  @XmlNamedAttributeNode( "startDate" ),
                  @XmlNamedAttributeNode( value="parameterGroup", subgraph="full" )
          }),
  @XmlNamedObjectGraph(
          name="simple",
          attributeNodes = {
                  @XmlNamedAttributeNode( "businessEntityNumber" ),
                  @XmlNamedAttributeNode( "businessEntityClass" ),
                  @XmlNamedAttributeNode( "name" )
          }),
  @XmlNamedObjectGraph(
          name="child_group", // used when as a child of a group - some fields dont apply
          attributeNodes = {
                  @XmlNamedAttributeNode( "businessEntityNumber" ),
                  @XmlNamedAttributeNode( "businessEntityClass" ),
                  @XmlNamedAttributeNode( "name" ),
                  @XmlNamedAttributeNode( value="region", subgraph="simple" ),
                  @XmlNamedAttributeNode( value="productGroup", subgraph="simple" ),
                  @XmlNamedAttributeNode( value="task", subgraph="simple" ),
                  @XmlNamedAttributeNode( value="parameterGroup", subgraph="full" )
          })
})
public class TaskSchedule extends AbstractBusinessEntity {
  protected Task task;
  protected String cron;
  protected Boolean enabled;
  protected Date endDate;
  protected String name;
  protected ExecutionPeriod period;
  protected Region region;
  protected ProductGroup productGroup;
  protected TaskScheduleType scheduleType;
  protected Date startDate;
  protected TaskParameterGroup parameterGroup;
  protected User user;

  // get/set methods
}

Все работает нормально, когда я преобразовываю расписание в XML, если это расписание является элементом верхнего уровня, который нужно преобразовать (т. Е. 'полный график используется).Однако у меня также есть другие классы - TaskGroup и TaskGroupSchedule:

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlNamedObjectGraphs({
  @XmlNamedObjectGraph(
          name="full",
          attributeNodes = {
                  @XmlNamedAttributeNode( "businessEntityNumber" ),
                  @XmlNamedAttributeNode( "businessEntityClass" ),
                  @XmlNamedAttributeNode( "name" ),
                  @XmlNamedAttributeNode( value="createdBy", subgraph="simple" ),
                  @XmlNamedAttributeNode( "createdOn" ),
                  @XmlNamedAttributeNode( value="schedules", subgraph="simple" ),
          }
          ),
  @XmlNamedObjectGraph(
          name="simple",
          attributeNodes = {
                  @XmlNamedAttributeNode( "businessEntityNumber" ),
                  @XmlNamedAttributeNode( "businessEntityClass" ),
                  @XmlNamedAttributeNode( "name" )
          }
          )
})
public class TaskGroup extends AbstractBusinessEntity {
  protected String name;
  protected User createdBy;
  protected Date createdOn; 
  protected Set<TaskGroupSchedule> schedules;

  // get/set methods
}

TaskGroupSchedule:

@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlNamedObjectGraphs({
  @XmlNamedObjectGraph(
          name="child",
          attributeNodes = {
                  @XmlNamedAttributeNode( "id" ),
                  @XmlNamedAttributeNode( "className" ),
                  @XmlNamedAttributeNode( value="schedule", subgraph="child_group" ),
                  @XmlNamedAttributeNode( "sequence" ),
                  @XmlNamedAttributeNode( "enabled" ),
                  @XmlNamedAttributeNode( "stopOnError" ),
                  @XmlNamedAttributeNode( "delayBeforeNext" ),
          })
})
public class TaskGroupSchedule extends AbstractManagedData implements IEnableable, IRegional, Sequenceable {

  protected TaskGroup parent;
  protected TaskSchedule schedule;
  protected int sequence;
  protected Boolean enabled;
  protected long delayBeforeNext;

  // get/set methods, with @XMLTransient on getParent
}

Вот проблема: Когда я пытаюсь преобразовать TaskGroup в XML, он игнорирует мой запросиспользуйте подграф 'child_group' для TaskGroupSchedule -> TaskSchedule и вместо этого проходит через каждое свойство TaskSchedule, преобразуя их (что приводит к неожиданному ' Обнаружен цикл в графе объектов. Это приведет к бесконечно глубокому XML 'ошибки для элементов со ссылками на родительский элемент), что, я предполагаю, является поведением по умолчанию, если граф не определен.Я использую MOXy версии 2.6.3 и Java 8.

Кто-нибудь может увидеть, что я делаю неправильно?Заранее спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

ОК. Я пропустил очевидную проблему.

Это потому, что граф TaskGroup предполагал, что TaskGroupSchedule имеет граф 'simple', определенный не как граф 'child'.Изменение 'simple' на 'child' в TaskGroup заставило его работать.

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