#java #jaxb #marshalling #eclipselink #moxy
#java #jaxb #сортировка #eclipselink #moxy
Вопрос:
Я использую реализацию MOXy JAXB и довольно широко использую аннотацию @XmlInverseReference . Однако недавно я столкнулся со сценарием, в котором этот подход, похоже, не работает. Если у меня есть класс, содержащий поле со свойством того же типа, что и родительский класс, применение @XmlInverseReference, похоже, полностью подавляет сортировку этого свойства. Исключение аннотации приводит к предсказуемому исключению StackOverflowException.
Кто-нибудь сталкивался с этой проблемой и обнаружил эффективное решение с помощью MOXy?
Краткий пример класса-нарушителя:
public class Person {
private Long id;
private Person spouse;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@XmlInverseReference(mappedBy="spouse")
public Person getSpouse() {
return spouse;
}
public Person setSpouse(Person spouse) {
this.spouse = spouse;
}
}
Ответ №1:
EclipseLink MOXy @XmlInverseReference
можно использовать, когда объект и свойство имеют один и тот же тип. Текущая проблема с этим вариантом использования заключается в том, что одно и то же свойство необходимо использовать для обоих направлений отношений.
Что вы видите
Когда свойство аннотируется @XmlInverseReference
, для маршалинга MOXy будет рассматривать это свойство как существующее @XmlTransient
.
Запрос на улучшение
Я ввел следующий запрос на улучшение для поддержки этого типа поведения. Пожалуйста, добавьте любые дополнительные детали, которые, по вашему мнению, имеют значение.
Для получения дополнительной информации о @XmlInverseReference
Комментарии:
1. Да, заголовок в вашем отчете об ошибке является более точным способом изложения проблемы. Одним из решений, которое работает в моем случае использования, является аннотирование поля id с помощью amp;amp;XmlID и поля супруга с помощью amp;amp;XmlIDREF . Этот подход имеет свои ограничения, но в данном конкретном случае удается обойти проблему.
2. @Filip — Использование
@XmlID
/@XmlIDREF
— это подход, который вы можете использовать. Посмотрим, что мы можем сделать с вашим запросом на улучшение. Для получения дополнительной информации@XmlID
/@XmlIDREF
см.: blog.bdoughan.com/2010/10 /…