Estoy haciendo un cliente de Web Service con CXF que luego ira en una página web, de forma que un usuario a través de la página pueda consultar los web services. Y ha surgido un pequeño incordio.
Cojo el wsdl y con la herramienta wsdl2java de CXF genero las clases correspondientes al ciente, todo bien. Hago mi software y todo maravilloso, en local, incluso desplegado en mi propio Tomcat, todo va de perlas.
Lo subo al servidor real….. y error. No encuentra los wsdl. Efectivamente, wsdl2java genera el código del cliente y pone en ese código java la ubicación del wsdl. Luego, cuando usas el cliente, el código java de CXF busca no sé para qué ese wsdl y si no lo encuentra, da error y no funciona nada más.
Yo, en mi ignorancia, pensé que ese wsdl no servía para nada una vez generado el código java, así que no lo incluí como parte de mi proyecto ni en el war. Bueno, la solución parece sencilla, basta meterlo en el war y modifiar las clases de cliente generadas por CXF para que lo busquen dentro del webapp en algún sitio. Pues no, no es tan sencillo. Desgraciadamente el código java dentro de un war tiene muy dificil, si no imposible, saber cual es el directorio en el que está la aplicación web. El directorio por defecto suele ser el del ejecutable tomcat y no el de la aplicación web, por lo que una de las soluciones más socorrida en poner los ficheros que necesitas en el classpath, bien dentro de un jar, bien en el directorio WEB-INF/classes. Pero CXF no entiende de una URL que empiece por "classpath:…."
Por internet buscas y sí, hay cosas, pero normalmente suelen ser si usas spring y en los ficheros de XML de configuración de Spring pones cosas y tal. No es el caso, sólo uso Tomcat.
Total, que muy a mi pesar y por no perder el tiempo, opté por poner los wsdl en un directorio fijo y conocido en el servidor y acceder a ellos con path absoluto. En fin, un asquito y una cosa que se me queda en la lista de tareas para revisar "algún día".
ACTUALIZACIÓN: serhii se ha cargado el problema (lo ha solucionado y ya no es un problema), ver comentario número 7. Está claro que algunos debemos dedicarnos a otra cosa
Muchas gracias, serhii.