Por un lado, la documentación oficial es escasa, como ya he comentado, pero e incluso los ejemplos oficiales son confusos ya que tienen archivos de contexto innecesarios y no se ejecutan tan fácilmente como deberían.
Por otro lado, muchos de los ejemplos que podemos encontrar en Internet no comentan algunos puntos básicos, están equivocados en algunos puntos y para rematar no funcionan.
Así que voy a aportar yo un ejemplo sencillo y ejecutable sin ningún problema. Lo podéis descargar en esta ruta. El ejemplo se puede ejecutar fácilmente con Maven y gracias al plugin de Jetty.
Algunos comentarios:
- Para generar los artefactos Java, se utiliza el plugin cxf-codegen-plugin que no sólo genera los artefactos Java sino que también genera el interfaz del servicio. Este último punto es muy importante y el algo que olvidan citar casi todos, sino todos los ejemplos que he visto.
- Al disponer del Interfaz del servicio, sólo necesitamos implementar el servicio y no crear el Interfaz por nuestra cuenta (como intentan muchos ejemplos). Primero, porque es una tarea inneceesaria. Segundo, por que posiblemente entre en conflicto con el interfaz ya generado por el plugin.
- En la definición del EndPoint, dentro del contexto de Spring, no es necesario añadir el atributo wsdlLocation como parte del enfoque "contrato primero" sin embargo, sí es necesario si queremos que no se genere el WSDL cada vez que demandemos éste o si queremos validar las peticiones sobre el esquema.