2015-03-19 1 views
0

После нескольких часов попыток и ошибок я хочу спросить здесь, может ли кто-нибудь помочь мне решить мою проблему.JAXB не сортирует, как ожидалось. Объект (суперкласс) whitin DTO пуст

Сценарий:

  • Java EE сервер (JBoss 7.2) с Apache CXF как реализации JAX-WS.
  • ServiceA (служебная конечная точка) и ServiceB (расширяет сервис A, а также конечную точку обслуживания)
  • Три проекта сохранения: общий, персистенцияA зависит от общего, PersistenceB зависит от PersistenceA.
  • Существует класс UUIDIdentified, который суперкласс всех настойчивости классов (Это обеспечивает JPA @ID) он находится в Projekt Common

В классе ServiceA является метод: public List<DTO> getData(UUIDIdentified value);

Сервер читает некоторые Объекты, все подтипы UUIDIdentified, и цель состоит в том, чтобы упаковать объекты в DTO.

DTO будет выглядеть следующим образом:

@XmlAccessorType(XmlAccessType.FIELD) 
public class DTO{ 

private static final long serialVersionUID = 1L; 

@XmlElement(name = "uuididentified") 
UUIDIdentified object; 

public UUIDIdentified getObject() { 
    return object; 
} 

public void setObject(final UUIDIdentified object) { 
    this.object = object; 
} 
} 

Если я смотрю в ответ SOAP, я вижу, что нет данных в <uuididentified> тега. Мое понимание JAXB не так хорошо, но, как я понимаю, «реальные» экземпляры UUIDIdentified и их типы неизвестны JAXBContext.

Я мог бы решить эту проблему, добавив @XmlSeeAlso({TypeA.class,TypeB.class}) в класс UUIDIdentified (я считаю). Но это то, что я не могу, потому что, если бы я это сделал, Project Common будет зависеть от проектов PersistenceA/B.

Как я могу это решить. Как я могу сказать JAXB (может быть, в файле конфигурации xml), что он должен добавить ClassA/B в JAXBContext, поскольку он добавляет UUIDIdentified?

Я пробовал некоторые вещи, такие как файлы jaxb.index, ObjectFactorys, @XmlSeeAlso в SEI, но я не знаю, правильно ли это.

ответ

0

После того, как я попытался маршаллировать/развязать объект сам, с @XmlJavaTypeAdapter я столкнулся с корнем проблемы. Это не было ничего с JAXBContect. Проблема заключалась в том, что мой объект был объектом чтения Hibernate-Envers, а envers создает прокси-объекты (даже если они EAGER).

Таким образом, маршаллер не смог извлечь реальное значение из объекта Proxy.

 Смежные вопросы

  • Нет связанных вопросов^_^