domingo, 2 de agosto de 2015

WebService con JAX-WS - I

La idea de este post y si puede ser de una serie de post futuros, es crear pequeños prototipos de los que partir para hacer futuros desarrollos.

Para este primer caso vamos a hacer un webservices con JAX-WS pero nada de spring, algo básico. Además aparte del post iré poniendo la dirección GIT donde lo tengo subido para que cualquiera pueda descargarlo y continuar con el mismo.

Si no estas familiarizado con la tecnología te hago aquí un pequeño resumen de que es cada estandar con el que crearemos la aplicación:
  • JAX-WS: Es la API de Java para la creación de servicios web que forma parte de JAVA EE. 
Para empezar creamos un proyecto web y lo reconfiguramos como proyecto maven. Las librerías que hemos necesitado han sido:
  • jaxws-rt: La implementación para el funcionamiento de JAX-WS
  • slf4j-api y log4j: Librerías para realizar logs
Una vez configurado el cliente vamos ha hacer dos cosas. Crear la propia interfaz del servicio web:

@WebService
public interface WebServiceSample {
 @WebMethod
 Saludo saludar();
 @WebMethod
 String despedir();
}

Y aquí esta su implementación, una cosa sencillita. La importancia del asunto recae en las anotaciones que marcan a la clase y a su implementación como servicio web.

@WebService(endpointInterface = "es.home.ws.example.WebServiceSample")
public class WebServiceSampleImpl implements WebServiceSample {
 @Override
 public Saludo saluda() {
  Saludo s = new Saludo();
  s.setNombre("John");
  s.setSaludo("Doe");
  return s;
 }
 @Override
 public String despedir() {
  return "Goodbye";
 }
}

En principio con esto nos valdría si desplegásemos en un servidor de aplicaciones web como weblogic o jboss. Pero nosotros vamos a hacerlo en un contenedor de servlets como Tomcat. Y para ello necesitaremos de dos configuraciones más. modificar el web.xml y crear el fichero sun-jaxws.xml

El fichero web.xml configuramos para la ruta por la que queremos que pasen las llamadas a nuestro webservices e indicamos el servlet que captará estas llamadas.


  com.sun.xml.ws.transport.http.servlet.WSServletContextListener
 
 
  webservice-sample
  com.sun.xml.ws.transport.http.servlet.WSServlet
  1
 
 
  webservice-sample
  /webservice-sample
 

En el fichero sun-jaxws.xml indicamos la configuración para que el servicio funcione correctamente. Esta configuración será leída por el servlet indicado en el web.xml y en ella le indicamos la url por la cual va a ser llamado el servicio (configurado en el web.xml) y que implementación realizará las llamadas


 


Una vez configurado si arrancamos el tomcat y accedemos a la URL:  http://localhost:8080/ExampleWS/webservice-sample veremos la configuración del servicio web y tendremos acceso a su WSDL.

En este enlace (ExampleWS) podreis encontrar el código fuente subido a Github.

Anotación: He tenido problema con maven al resolver las dependencias de jax-rt en su versión 2.2.10. La he cambiado por al 2.2.3 y ha funcionado correctamente.

2 comentarios:

  1. Buenas noches, una consulta, si yo estoy desplegando en weblogic no debo configurar el web.xml ni el sun.java? y que ruta debo colocar para ver mi web service?. Gracias

    ResponderEliminar
  2. Hola buenas.

    Como bien dices, en caso de desplegarlo en un servidor de aplicaciones (weblogic, jboss, etc) no te harán falta las configuraciones del sun-jaxws.xml ni del web.xml. Puesto que los servidores serán capaces de configurar el servicio en base a las anotaciones (las librerías de maven además tendrían un scope 'provided' ya vendrían en el servidor).

    Por otro lado, la ruta se compondría de la siguiente forma:
    http://servidor:puerto/nombreAplicacion/nombreDeLaClase+Service?wsdl

    Si quieres cambiar el nombre del servicio, utiliza el atributo 'serviceName' dentro de la anotación @WebService. Importante, esta configuración hazla en la clase de implementación y no en la interfaz.

    ResponderEliminar