2009-11-29 5 views
2

J'essaie d'utiliser resteasy pour diffuser certaines entités récupérées par spring-hibernate.Utiliser Resteasy avec javassist?

J'ai configuré une méthode qui retourne un POJO et fonctionne comme prévu:

@GET 
@Path("/test") 
@Produces(MediaType.APPLICATION_XML) 
public Episode getTestEpisode() { 
    Episode e = new Episode(); 
    e.setEpisodename("test"); 
    return e; 
} 

Produit:

<episode episodeId="0"> 
<combinedEpisodenumber>0.0</combinedEpisodenumber> 
<combinedSeason>0</combinedSeason> 
<episodename>test</episodename> 
<episodenumber>0</episodenumber> 
<seasonId>0</seasonId> 
<seasonnumber>0</seasonnumber> 
</episode> 

Cependant, si je tente de retourner quelque chose à partir du printemps/mise en veille prolongée, je reçois un erreur:

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

Je suppose que c'est un peu de magie avec javassist, mais je pense que c'est s confondant JAX-B en n'étant pas la classe attendue. Puis-je dire à JAX-B où chercher les annotations, ou puis-je obtenir un POJO de cet objet?

Jamais directement utilisé par javassist, donc je ne sais pas comment cela fonctionne.

Répondre

1

Vous avez à dé-proxy l'objet .. trouvé une méthode utilitaire qui fonctionne ..

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

Vive. J'ai créé des DTO pour l'ensemble du domaine, mais cela ressemble à une meilleure solution pour la prochaine fois! –

Questions connexes