Я использую JAXB в веб-сервисе с некоторыми немного сложными объектами.Один из объектов, Sensor, имеет список других объектов, с которыми он может взаимодействовать, которые обязательно могут включать себя (поведение, которое нельзя изменить), приводя к циклической ссылке во время маршалинга на XML.
@XmlAccessorType(XmlAccessType.FIELD)
public class Sensor extends BaseObject {
private ArrayList<SensorCommLink> sensorCommLinks;
}
@XmlAccessorType(XmlAccessType.FIELD)
public class SensorCommLink {
@XmlIDREF
private BaseObject receiver;
@XmlIDREF
private Sensor cueingSensor;
}
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class BaseObject {
@XmlElement
@XmlID
private String id;
}
Как показано выше, я решил это, используя @XmlIDREF и @XmlID, и это работает очень хорошо.
Код на стороне клиента, сгенерированный с помощью wsimport, выполняет маршалирование объектов в XML, и сервер может их идеально разархивировать.
Проблема, с которой я столкнулся, заключается в том, что по какой-то причине на стороне сервераЯ получаю исключение циклической ссылки, когда пытаюсь маршалировать объект Sensor.Сводит с ума то, что код на стороне сервера содержит аннотации JAXB, которые wsimport использует для создания кода на стороне клиента, и это прекрасно работает, но я не могу маршалировать датчики на стороне сервера из-за цикла.
Я попытался скопировать все дополнительные аннотации, которые JAXB добавляет к клиентскому коду, в классы на стороне сервера, думая, что, возможно, в JAXB была ошибка во время выполнения, которая мешала ему правильно применять аннотацию @XmlIDREF.Не повезло.
Возможно, я упускаю что-то очень простое, но эта проблема сводит меня с ума, и я нахожусь в тупике, пока пытаюсь понять это.
Одна вещь, которую я заметил, что я исследую, состоит в том, что некоторые из пространств имен в сгенерированных объектах на стороне клиента не соответствуют ожиданиям, хотя код работает.Мне любопытно посмотреть, не вызывает ли проблема с пространством имен на сервере маршалинг IDREF.
Буду очень признателен за любые предложения по исправлению или дополнительному устранению неполадок!
Приветствия,
Крис