У меня есть много классов, которые конвертируются в 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.
Кто-нибудь может увидеть, что я делаю неправильно?Заранее спасибо.