首页 文章

使用Resteasy和javassist?

提问于
浏览
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返回一些东西,我会收到一个错误:

无法找到类型为:com.company.domain.Episode _ $$ _ javassist_27的响应对象的MessageBodyWriter:application / xml

我想这对于javassist来说是一些神奇的东西,但是我认为这不是JAX-B的混乱而不是预期的类 . 我可以告诉JAX-B在哪里查找注释,还是可以从这个对象中获取POJO?

从未直接使用过javassist,因此不确定它是如何工作的 .

1 回答

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

    }

相关问题