JAX-WS

Conceptos clave

  • API Java™ para crear y consumir servicios web basados en XML.
  • Java API para XML (integrado dentro del stack de tecnologías Java EE/Jakarta EE).
  • Modelo orientado a RPC sobre SOAP, soportando también estilos document/literal.
  • Soporte para asincronía mediante callbacks o polling.
  • Basado en anotaciones (@WebService, @WebMethod, @WebParam, etc.).
  • Generación automática de artefactos:
    • wsimport: genera clases cliente a partir del WSDL.
    • wsgen: genera WSDL y stubs desde clases Java.
  • Permite despliegue tanto en servidores Java EE como en aplicaciones standalone.
  • Interoperabilidad con otros stacks SOAP (.NET, PHP-SOAP, IBM, Oracle…).
  • Seguridad extensible (WS-Security, firma, cifrado, tokens).
  • Binding XML–Java mediante JAXB (mapeo automático entre objetos Java y estructuras XML).
  • Manejo de handlers para interceptar mensajes SOAP.
  • Soporte para transporte HTTP/HTTPS y extensiones a otros protocolos.

Arquitectura y flujo general

  • Componentes:
    • Servicios (@WebService)
    • Endpoints (publicación del servicio)
    • WSDL (descripción del servicio)
    • Artefactos generados (stubs, bindings)
  • Flujo:
    • Un cliente invoca un método → se genera un mensaje SOAP → se envía al endpoint → el servidor procesa y responde con otro SOAP → se transforma de vuelta en objetos Java mediante JAXB.

Migración y estado actual

  • JAX-WS fue estándar central en Java EE hasta Java 10.
  • A partir de Java 11 dejó de incluirse en el JDK; ahora se usa como dependencia externa (Jakarta XML Web Services).
  • Para entornos modernos basados en JSON suele preferirse REST/HTTP o frameworks como Web Services RESTful, pero SOAP sigue siendo clave en entornos corporativos.

Ventajas

  • Alta interoperabilidad con infraestructuras empresariales basadas en SOAP.
  • Contratos estrictos mediante WSDL.
  • Tipado fuerte vía JAXB.
  • Facilidad de uso mediante anotaciones.

Limitaciones

  • Verborrea y complejidad del estándar SOAP.
  • Menor flexibilidad frente a servicios REST.
  • Dependencia de herramientas externas en Java 11+.

Herramientas habituales

  • wsimport
    Genera artefactos cliente a partir de un WSDL.
  • wsgen
    Genera WSDL y clases auxiliares desde código Java.
  • JAXB
    Mapea XML ↔ objetos Java.
  • Handlers
    Extienden el procesamiento de mensajes.

Ejemplo: declaración básica de un servicio

Código

import javax.jws.WebService;

@WebService
public class HolaService {
	public String saludar(String nombre) {
		return "Hola " + nombre;
	}
}

`

Publicación de un endpoint (standalone)

Código

import javax.xml.ws.Endpoint;

public class Publicador {
	public static void main(String[] args) {
		Endpoint.publish("http://localhost:8080/hola", new HolaService());
	}
}

Ejemplo de cliente generado con wsimport

Código

wsimport -s src -p com.ejemplo.hola http://localhost:8080/hola?wsdl

Recursos y documentación