Servicios Web SOAP con JAX-WS, Spring y CXF (IV): Handlers

logo java

Es posible que en alguna ocasión nos veamos en la necesidad de realizar algún tipo de operación directamente con el mensaje SOAP que recibe y/o envía nuestro servicio web. Esta tarea puede realizarse con el mecanismo de Handlers (“manejadores”) definidos en la especificación JAX-WS y que permite “interceptar” las peticiones y respuestas SOAP en un método que implementamos. Este mecanismo puede ser aplicado tanto al servidor como a los clientes.

Existen dos tipos de handlers:

  • SOAP handler : Permite acceder a todo el mensaje SOAP completo, incluyendo los headers de la petición. Por este motivo también se denominan Protocol Handler
  • Logical handler: Sólo proporciona acceso al contenido (payload) del mensaje.

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (III): Securización TLS + BASIC

Última actualización: 20/02/2016

logo java

En la mayoría de servicios web será necesario incluir mecanismos tanto de autenticación como de cifrado que “securicen” la utilización del servicio. En SOAP se pueden utilizar varias alternativas, las dos que probablemente se utilizan con mayor frecuencia son las siguientes:

  • HTTPS(TLS) + BASIC: La autenticación BASIC consiste simplemente en el envío en el header del request de un par usuario/contraseña y con el uso del protocolo TLS las comunicaciones se cifran lo que garantiza la confidencialidad de los datos envíados. Esta combinación es fácil de implementar y suele aplicarse tanto a servicios web SOAP como REST proporcinando en muchos casos un nivel de seguridad suficiente.
  • WsSecurity: es un protocolo específico para SOAP y proporciona un elevado nivel de seguridad ya que, entre otras características, permite realizar una firma y cifrado de los mensajes a nivel de aplicación mientras que con TLS sólo garantizamos el cifrado y validez del mensaje a través de la red hasta el servidor de destino. Este mecanismo implica un pequeña merma del rendimiento ya que las aplicaciones clientes y servidor deben firmar los mensajes.

En esta tercera parte del tutorial se va a implementar el mecanismo TLS + BASIC en los ejemplos de los capitulos anteriores.

  1. Servidor
  2. Clientes
  3. Securización TLS + BASIC
  4. Handlers

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (II): Clientes

logo java

Tras la primera parte del artículo ya tenemos una aplicación web que publica mediante SOAP un bean de Spring de forma muy sencilla gracias a JAX-WS y Apache CXF. Ahora toca volver a utilizar estas tecnologías pero con el objetivo contrario, esto es, consumir un servicio web que en nuestro caso será el del primer artículo. Lo haremos con un proyecto Maven y una clase Main y, opcionalmente, con Spring.

  1. Servidor
  2. Clientes
  3. Securización TLS + BASIC
  4. Handlers

Sin Spring (cxf-client)

Usaremos un proyecto Maven estándar no web con el siguiente pom.xml donde sólo se tomarán como dependencias las de CXF y log4j

Seguir leyendo

Servicios Web SOAP con JAX-WS, Spring y CXF (I) : Servidor

Última actualización: 13/02/2016

logo java

Java API for XML Web Services (JAX-WS), es una especificación para la creación de servicios web basados en XML-SOAP que vino a suponer la evolución de la especificación JAX-RPC y que forma parte de JEE 5 y Java SE 6. Está basada en anotaciones y permite la creación tanto de servicios como de clientes de servicios web SOAP directamente con clases Java POJO sin tener que lidiar con XML lo que simplifica enormemente trabajar con esta tecnología. A pesar del auge que han tenido en los últimos años los servicios REST(y que en Java cuentan con la especificación JAX-RS), los servicios web SOAP se siguen usando ampliamente y son una opción perfectamente válida para la publicación de APIs y la interoperabilidad de aplicaciones. En este enlace hay una interesante comparativa entre ambas tecnologías.

JAX-WS cuenta con una implementación de referencia llamada Metro, aunque también existen otros productos que implementan la especificación como CXF (el antigüo XFire) o Axis 2. En este tutorial vamos a partir de la base de que ya tenemos una aplicación web que utiliza Spring (al menos su contenedor IoC) y queremos publicar los métodos de un bean como un servicio web SOAP estándar para su consumo por parte de terceras aplicaciones. El módulo Spring WS permite la creación de servios web Contract-first y un soporte (limitado) del estándar JAX-WS pero lo que nosotros queremos es generar el servicio web automáticamente a partir de nuestro código Java sin definir el WSDL.

Este será el primero de una serie de artículos dedicados a JAX-WS con CXF y Spring.

  1. Servidor
  2. Clientes
  3. Securización TLS + BASIC
  4. Handlers

Nota: Aquí hay una interesante comparativa en inglés entre los puntos fuertes y débiles de Axis 2, CXF y Spring WS, recomendándose este último.
Seguir leyendo