2

我正在尝试使用 resteasy 来提供一些由 spring-hibernate 获取的实体。

我配置了一种返回 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,所以不确定它是如何工作的。

4

1 回答 1

1

您必须取消代理该对象..找到一个有效的实用方法..

将 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;

}

于 2010-06-18T22:31:23.783 回答