Используете Resteasy с javassist? - PullRequest
2 голосов
/ 29 ноября 2009

Я пытаюсь использовать resteasy для раздачи некоторых сущностей, извлеченных с помощью весеннего спящего режима.

Я настроил один метод, который возвращает POJO и работает как положено:

@GET
@Path("/test")
@Produces(MediaType.APPLICATION_XML)
public Episode getTestEpisode() {
  Episode e = new Episode();
  e.setEpisodename("test");
  return e;
}

Производит:

<episode episodeId="0">
 <combinedEpisodenumber>0.0</combinedEpisodenumber>
 <combinedSeason>0</combinedSeason>
 <episodename>test</episodename>
 <episodenumber>0</episodenumber>
 <seasonId>0</seasonId>
 <seasonnumber>0</seasonnumber>
</episode>

Однако, если я пытаюсь вернуть что-то из spring / hibernate, я получаю сообщение об ошибке:

Не удалось найти MessageBodyWriter для объекта ответа типа: com.company.domain.Episode _ $$ _ javassist_27 с типом носителя: application / xml

Я полагаю, что это какая-то магия с javassist, однако я думаю, что это сбивает с толку JAX-B тем, что он не является ожидаемым классом. Могу ли я сообщить JAX-B, где искать аннотации, или я могу получить POJO от этого объекта?

Никогда не использовал javassist напрямую, поэтому не уверен, как он работает.

1 Ответ

1 голос
/ 19 июня 2010

Вы должны отменить прокси объекта .. нашел полезный метод, который работает ..

Преобразование прокси Hibernate в реальный объект

public static <T> T initializeAndUnproxy(T entity) {
if (entity == null) {
    throw new 
       NullPointerException("Entity passed for initialization is null");
}

Hibernate.initialize(entity);
if (entity instanceof HibernateProxy) {
    entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
            .getImplementation();
}
return entity;

}

...