Ejecutar un webservice en tomcat 6 con jdk 1.6 y jax-ws

Se que muchos deben haber andado buscando una forma sencilla de resolver el típico problema: ¿Cómo hago un webservice de java tan fácil como lo hago con .NET? Se dice, la nueva arquitectura de java, es muy buena. Se que es posible, se que gente que la usa, pero en ningún lado encontré una forma concreta y práctica que garantice su funcionamiento. Bueno, no estoy seguro que sea eso lo que piensen, lo que si estoy seguro es que eso fue lo que me pasó a mi… y no es poca cosa, debo agregar. Me costó un poco encontrar una respuesta coherente que sea fácil de transmitir, de ahí, este post.
Intentaré describir en dos niveles, el primero con un ejemplo práctico y el segundo detallando cada función usada. ¿Por qué? porque prefiero que la gente que lea esto entienda el por qué de las cosas que se están haciendo.

  1. Crear un proyecto Web (no importa la herramienta, son siempre iguales)
  2. Configurar el web.xml indicándole que direcciones los pedidos (de alguna url) al servlet de jax-ws
  3. <listener>
    	<listener-class>
    		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
    	</listener-class>
    </listener>
    <servlet>
    	<description>## descripción del Servlet ##</description>
    	<display-name>## nombre a mostrar entre los servicios ejecutándose en el servidor ##</display-name>
    	<servlet-name>## nombre de referencia dentro del xml para el Servlet ##</servlet-name>
    	<servlet-class>
    		com.sun.xml.ws.transport.http.servlet.WSServlet
    	</servlet-class>
    	<load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    	<servlet-name>## nombre de referencia dentro del xml para el Servlet ##</servlet-name>
    	<url-pattern>/##url_dentro_de_la_aplicacion_para_el_servlet##</url-pattern>
    </servlet-mapping>
    
  4. Crear un WEB-INF/sun-jaxws.xml que contenga:
  5. <?xml version="1.0" encoding="UTF-8"?>
    <endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
    	<endpoint name='##nombre_de_la_aplicacion##' implementation='paquete.ClaseConAnotacionWebService' url-pattern='/url_asignada_al_servlet_del_webservice' />
    </endpoints>
    
  6. Configurar las clases que se desea publicar como WebService, con un @WebService
  7. Descargar el jax-ws (la descarga es un jar, que al clickear muestra una licencia y al aceptar descomprime muchos archivos). Hay que copiar todos los *.jar dentro del directorio $CATALINA/lib
  8. Al desplegar la aplicación web, dentro de un WAR, en el tomcat, el jax generará automáticamente los wsdl y todo archivo necesario para publicar el webservice.

Espero que con esto se entienda, links de referencia:


2 Responses to “Ejecutar un webservice en tomcat 6 con jdk 1.6 y jax-ws”

  1. Excelente, me fue de mucha ayuda, simple y conciso. Gracias.

  2. Es justo lo que estaba buscando. Muchas gracias por tomarte el trabajo de publicar este post!

Discussion Area - Leave a Comment