2

私はresteasyを使用して、spring-hibernateによってフェッチされたいくつかのエンティティを提供しようとしています。

POJOを返し、期待どおりに機能する1つのメソッドを構成しました。

@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から何かを返そうとすると、エラーが発生します。

メディアタイプ:application / xmlのタイプ:com.company.domain.Episode _ $$_javassist_27の応答オブジェクトのMessageBodyWriterが見つかりませんでした

これは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 に答える