Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Tabla de contenidos

...

Dependencia pom.xml

Para hacer un cliente SOAP en Spring Boot, en primer lugar tendremos que añadir la siguiente dependencia a nuestro pom.xml:


Info

Con la configuración actual de las APIs, con el parent fundewebjs-api-parent (ver Creación y estructura de proyecto SpringBootMigración de APIs a Parent FundeWebJS).

No es necesario realizar ninguna configuración de librerías en pom.xml.

Bloque de código
languagexml
<!-- Dependencia Spring WS --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency>

Plugin para generar automáticamente el cliente

...

Bloque de código
languagejava
package com.servicios.soap.configuracion;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;

import com.servicios.soap.client.MarketSoapClient;

@Configuration
public class ClientesSoapConfiguracion {

	/**
	 * Bean necesario para que el cliente haga la transformacion JAXB
	 * 
	 * @return
	 */
	@Bean
	public Jaxb2Marshaller marshaller() {
		Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
		// El nombre del paquete debe ser donde esten las clases Java generadas con JAXB
		marshaller.setContextPath("com.servicios.soap.model");
		return marshaller;
	}

	/**
	 * Damos de alta el cliente soap
	 * 
	 * @param marshaller
	 * @return
	 */
	@Bean
	public MarketSoapClient marketSoapClient(Jaxb2Marshaller marshaller) {
		MarketSoapClient client = new MarketSoapClient();
		// Indicar la uri del servicio
		client.setDefaultUri("http://localhost:8080/soap");
		client.setMarshaller(marshaller);
		client.setUnmarshaller(marshaller);
		return client;
	}

}

Aquí tendremos que modificar la uri de nuestro servicio. Esto lo haremos en la línea de client.setDefaultUri( ... ), y podemos obtener dicha uri en el archivo que hemos utilizado para generar las clases necesarias, en la propiedad location del bloque <soap address />, por ejemplo:

Bloque de código
<soap:address location="http://serviciosumupruebas.um.es:80/serviciosumu/services/ServicioUmu"/>

Además, también tendremos que especificar el paquete en el que se encuentran las clases generadas, en la instrucción marshaller.setContextPath( ... ).

Configurar más de un cliente

Si configuramos más de un cliente como hemos explicado, se producirá un conflicto por los Bean y no iniciará la aplicación. Para solucionarlo, en cada clase de configuración de un cliente tendremos que ponerle nombre al bean de Jaxb2Marshaller, y en el método del cliente, etiquetar al marshaller que se pasa como parámetro con @Qualifier con el mismo nombre. Así:

Bloque de código
languagejava
 	@Bean( name = "marshallerMarket" )
	public Jaxb2Marshaller marshaller() {
		...
	}

	@Bean
	public MarketSoapClient marketSoapClient( @Qualifier( "marshallerMarket" ) Jaxb2Marshaller marshaller) {
		...
	}