2009-11-29 46 views
2

我正在嘗試使用resteasy提供spring-hibernate提取的一些實體。在javassist中使用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> 

不過,如果我嘗試從春天返回的東西/休眠我得到一個錯誤:

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,但是這看起來像是下次更好的解決方案! – 2010-06-19 10:41:08