jueves, 18 de noviembre de 2010

Configurar CXF en proyecto con Hibernate

Recientemente he tenido que incorporar las librerías de CXF para exponer unos beans de Spring como servicios web. He seguido todos los datos que se explican en el sitio web del proyecto y aún así me estaba encontrando continuamente con un problema.

Los métodos que exponía como servicio web estaban devolviendo un objeto básico con sus getters/setters y al invocarlo me daba el siguiente error:


‘org.apache.cxf.interceptor.Fault: Marshalling Error: ReturnObject is not known to this context’.


Trás mucho indagar por internet vi la solución. Gracias sobre todo al siguiente enlace. Resulta que hay una incompatibilidad entre la versión de la librería ASM que usa Hibernate (1.5.3) y la que necesita CXF (2.2.3).

Las dependencias de mi proyecto están gestionadas con Maven, por lo que la solución fue sencilla: Poner una cláusula de exclusion en la dependencia de hibernate para que no se traiga ASM ni CGLIB, añadir una dependencia con CGLIB-NODEP y dejar que las dependencias de CXF se traigan exactamente la versión de ASM que necesitan.

En el pom.xml quedaría así:



org.hibernate
hibernate
3.2.5.ga
compile


asm
asm


asm
asm-attrs


cglib
cglib





cglib
cglib-nodep
2.1_3
compile



org.apache.cxf
cxf-rt-frontend-jaxws
${cxf.version}



org.apache.cxf
cxf-rt-transports-http
${cxf.version}



Una vez realizados estos cambios, el servicio web funcionó como un tiro :-D

No hay comentarios:

Publicar un comentario