У меня есть набор классов доменов, которые используют спящий режим для сохранения. Это работает нормально. Но сейчас я пытаюсь реализовать сортировку XML / JSON поверх этого, и у меня возникли некоторые проблемы с Джексоном и Сетами.
Итак, мой код в основном такой:
@XmlRootElement
class IdentifiableObject {
@XmlAttribute
Integer id;
@XmlElement
String name;
}
@XmlRootElement
class A extends IdentifiableObject {}
@XmlRootElement
class B extends IdentifiableObject {
@XmlElementWrapper(name = "aSet")
@XmlJavaAdapter( IdentifiableXmlAdapter.class )
@XmlElement( name = "a" )
Set<A> As;
}
Это прекрасно работает в JAXB (который я также использую), но при попытке упорядочить это с помощью Джексона (используя JaxbAnnotationIntrospector) я получаю это исключение:
Unable to marshal: org.hibernate.collection.PersistentSet cannot be cast to IdentifiableObject (through reference chain: B["aSet"])
Так что, похоже, маршаллер Джексона видит прокси-сервер в спящем режиме, а не фактический компонент ... но JAXB использует это нормально.
Мое веб-представление использует фильтр org.springframework.orm.hibernate3.support.OpenSessionInViewFilter, который обеспечивает открытие (и повторное использование) сеанса гибернации.
Есть предложения, как это исправить?
ОБНОВЛЕНИЕ: Таким образом, на самом деле кажется, что если я удаляю @XmlJavaAdapter из набора, он работает на стороне Джексона ... но мне нужно переписать мой объект, поскольку он на самом деле имеет циклическую ссылку. Зачем @XmlJavaAdapter портить тип здесь? и только с Джексоном?
-
Morten