2009-11-29 3 views
2

Я пытаюсь использовать resteasy, чтобы обслуживать некоторые объекты, получаемые весной-спящим.Использование Restaasy с javassist?

Я настроил один метод, который возвращает 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> 

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

Could not find MessageBodyWriter for response object of type: com.company.domain.Episode_$$_javassist_27 of media type: application/xml

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

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

ответ

1

Вы должны де-прокси объект .. найден способ утилита, которая работает ..

Converting Hibernate proxy to real object

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; 

}

+0

Приветствия. Я фактически создал DTO для всего домена, но это выглядит как лучшее решение для следующего раза! –

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