Web Services con Java (JAX-WS)

ReflectionToStringBuilderLos Web Services cada vez son más indispensable a la hora de construir aplicaciones, debido a que ya casi cualquier aplicación empresarial, requiere integrarse o comunicarse con otra. Por este motivo Java ofrece la librería JAX-WS la cual es definida por la especificación JSR 224. La especificación remplace a la JAX-RCP, la cual era únicamente para llamadas a procedimientos remotos, lo cual es diferente a los Web Services.

 

Crear Web Services con Java es mucho más fácil de lo que pudiéramos creer, pues ya que tan solo es necesario anotar una clase, para que esta sea expuesta automáticamente como tal por medio del servidor de aplicaciones. Para demostrar esto, desarrollaremos un Servicio para consultar y crear Empleados.

 

Lo primero que tenemos que hacer, es crear una clase que queremos exponer como WebService, luego la tenemos que anotar con @WebService :

Las propiedades utilizadas son las siguientes:

  • serviceName: Nombre del servicio, que será utilizado para crear la URL del endpoint.
  • targetNamespace: Define el Namespace del servicio.

 

Basta decir que las propiedades serviceName  y targetNamespace  son opcionales, ya que, de no colocarlas, serán asignadas de forma automática, tomando el nombre de la clase y el paquete en que se encuentra respectivamente.

 

En segundo lugar, es necesario crear los métodos que serán expuestos como las operaciones del WebService, estos métodos, deben de ser anotados con @WebMethod , veamos cómo quedaría una clase WebService terminada:

 

La anotación @WebParam  es utilizado para personalizar el nombre del parámetro en el WSDL.

 

La definición de la clase Employee es la siguiente:

 

Finalmente, solo serán necesario deployar en el servidor de aplicaciones nuestro proyecto, en este caso, estamos utilizando Wildfly 9, pero podrías utilizar cualquier servidor que sea de tu preferencia. Una vez deployado, podrás ver el servicio en la URL: http://localhost:8080/JAX-WS-1.0-SNAPSHOT/EmployeeService?wsdl.

 

Podemos probar el servicio con SOAP-UI para ver el servicio y las dos operaciones:

Web Services con Java

 

Observemos que tenemos dos operaciones:

  • createEmployee: nos permite crear un nuevo Empleado
  • getEmployeeList: obtener un listado de todos los Empleados registrados.

 

Primeo ejecutaremos el método createEmployee:

Web Services con Java

Con este paso, ya habremos creado un nuevo Empleado llamado Oscar Blancarte.

 

El segundo paso, será consultar los empleados con el método getEmployeeList:

Web Services con Java

 

Como vemos, crear Servicios Web es tan simple como anotar una simple clase y desplegarla en nuestro servidor de aplicaciones.

 

 

Artículos relacionados

Estructuras de datos – Listas ligadas Sin duda una de las partes mas emocionantes cuando programamos es la parte de la algoritmia donde tenemos que usar la mente para resolver problemas qu...
Introducción a Java Transaction API(JTA) JTA o Java Transaction API es la encarga de administrar las transacciones del lado del servidor, abstrayendo casi en su totalidad al programador de ab...
Java – Weakreference Este tema hasta para los expertos en java les puede resultar desconocido y es que siempre creemos que un objeto que no esta referenciado por ninguna v...

Oscar Blancarte

Ideológico, Innovador y emprendedor, Padre, Tecnólogo y Autor, amante de la ciencia y la tecnología en todos sus colores y sabores. Arquitecto de software & Full Stack Developer con experiencia en la industria del desarrollo de software y la consultoría. Amante de la programación y el Ajedrez.

6 comentarios en “Web Services con Java (JAX-WS)

  1. Hola me encanto tu articulo oye tengo una duda ojala me pudieras ayudar, soy nuevo en java y creé un servicio web utilizando net beans y tengo algunas clases con metodos para hacer algunas operaciones y esos metodos me regresan parametros por lo general tipo cadena en su mayoria el problema es que en algunos metodos creo algunos objetos para ejecutar metodos de otras clases pero el servicio web no hace nada es decir envio el parametro (texto ) recibido del cliente y se va hacia los metodos y no hace nada no me da ningun resultado
    solo se ejcuta el servicio pero no hace nada y ya lo estuve revisando y si funciona correctamente hasta que escribo la instruccion para crear un objeto.

    1. Hola Charly, tu pregunta es complicada de responder, pues probablemente sea un escenario muy concreto de tu desarrollo, pues en teoría, esto que comentas no debería tener un impacto sobre tu desarrollo.

  2. Hola excelente tu post me ayudó bastante porque estoy haciendo un service web para una empresa de impuestos.

    Ahora mis dudas son:

    Como puedo arrojar una excepción si un @WebParam está nulo o no tiene la información esperada, además que esos @WebParam aparezca en el wsdl de la aplicación cómo parámetros obligatorios.

    Tengo que implementar seguridad usando , donde lo colocaría para que si el usuario no existe o no sea válido no llame a un webservice.

    Gracias

    1. Hola Jairo, gracias por tu comentario.

      Con respecto al primer punto que mencionas, para marcar un campo como obligatorio, deberás usar las anotaciones de JAXB, la cual es un API especial para controlar la forma en que un Objeto se convierte en XML y como el XML se convierte en objetos. Internamente Java usa JAXB para convertir el request en un objeto Java, de la misma forma, usa JAXB para convertir el objeto de respuesta en un XML, lo que tienes que hacer es darle una revisada a la documentación de esta API, como resumen te podría decir que uses la anotación @XmlElement(name = "xxx", required = true) sobre el elemento que quieres marcar como requerido, donde el atributo required le indica a JAXB que el campo deberá ser obligatorio, y por consecuencia, el WSLD lo debería de marcar como tal.
      Con respecto a la validacón, hay varias formas, podrías validar el input contra el Schema, validar manualmente cada campo mediante condiciones, podrías usar el API de Bean Validator, etc, en realidad hay varias formas, todo dependerá de que tan sofisticado quieres que sean tus validaciones y claro el tiempo que tengas para implementarlas.

      Con respecto a lo de la seguridad, creo que no terminaste la oración, por que dice “Tengo que implementar seguridad usando”, pero no dices que estás usando.

      1. Hola gracias por responder.

        Se borró la parte que describía la autenticación que debe usar UsernameToken (username y password),

        leere la parte del @XmlElement, tienes algún libro que describa con facilidad y ejemplos de uso de las anotaciones?

        Saludos.

        1. lo de la autenticación es algo largo para explicarlo aquí, pero te puedo recomendar la siguiente liga, en donde lo explican muy bien: https://java.globinch.com/enterprise-java/web-services/jax-ws/secure-metro-jax-ws-usernametoken-web-service-signature-encryption/

          Con respecto al libro sobre JAXB, existen libros que lo cubren pero no es el tema central, mi recomendación es que busques en google documentación, esta es un API bastante fácil de aprender, sobre todo si lo necesitas para realizar algunas anotaciones simples.

          Como un tema adicional, te puedo recomendar mi libro de Aplicaciones reactivas con React, NodeJS & MongoDB, en el explico como crear un API REST con NodeJS y te enseño a usar la autenticación por medio de JSON Web Tokens (JWT), ademas de que aprenderás React y MongoDB, que son tecnologías altamente demandadas y pagas hoy en día por si estas interesado.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *