Estás viendo una versión antigua de esta página. Ve a la versión actual.

Comparar con el actual Ver el historial de la página

« Anterior Versión 10 Siguiente »


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:

		<!-- Dependencia Spring WS -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web-services</artifactId>
		</dependency>

Plugin para generar automáticamente el cliente

Podemos añadir, también en el pom.xml, el siguiente plugin para generar las clases necesarias para el cliente automáticamente, a partir de un archivo .wsdl, que lo situaremos en la ruta /src/main/resources/xsd. La ruta de nuestro .wsdl la tendremos que poner en el bloque <schemaDirectory>, y el nombre del archivo en <include>.  Si queremos generar las clases a partir de varios .wsdl, debemos poner tener un bloque <execution> por cada archivo. Además, podemos definir el paquete de nuestro proyecto en el que se generarán las clases, especificándolo en el campo <generatePackage>:

<!-- SOAP -->
			<plugin>
				<groupId>org.jvnet.jaxb2.maven2</groupId>
				<artifactId>maven-jaxb2-plugin</artifactId>
				<version>0.14.0</version>
				<executions>
					<execution>
						<id>Fopum</id>
						<goals>
							<goal>generate</goal>
						</goals>
						<configuration>
							<args>
								<arg>-XautoNameResolution</arg>
							</args>
							<schemaLanguage>WSDL</schemaLanguage>
							<generateDirectory>${project.basedir}/src/main/java</generateDirectory>
							<generatePackage>es.um.atica.bajamatricula.soap.fopum</generatePackage>
							<schemaDirectory>${project.basedir}/src/main/resources/xsd</schemaDirectory>
							<schemaIncludes>
								<include>ServicioFopumTest.wsdl</include>
							</schemaIncludes>
						</configuration>
					</execution>
					<execution>
						<id>ArchivoUMU</id>
						<goals>
							<goal>generate</goal>
						</goals>
						<configuration>
							<args>
								<arg>-XautoNameResolution</arg>
							</args>
							<schemaLanguage>WSDL</schemaLanguage>
							<generateDirectory>${project.basedir}/src/main/java</generateDirectory>
							<generatePackage>es.um.atica.bajamatricula.soap.archivo</generatePackage>
							<schemaDirectory>${project.basedir}/src/main/resources/xsd</schemaDirectory>
							<schemaIncludes>
								<include>ServicioArchivoUMU (1).xml</include>
							</schemaIncludes>
						</configuration>
					</execution>
				</executions>
			</plugin>

Generar clases

Lo normal es que al añadir el plugin al pom.xml y guardarlo, se ejecute automáticamente el plugin y se generen las clases, pero si no es así, podemos hacer un Maven Build (Click derecho en el proyecto → Run As → Maven Build) para hacer que se ejectue.

Cliente

Una vez generadas las clases necesarias por el plugin, tendremos que hacer el cliente:

package com.servicios.soap.client;

import javax.xml.bind.JAXBElement;

import org.springframework.ws.client.core.support.WebServiceGatewaySupport;

import com.servicios.soap.model.ObjectFactory;
import com.servicios.soap.model.ProductosVentaRequestType;
import com.servicios.soap.model.ProductosVentaResponseType;

public class MarketSoapClient extends WebServiceGatewaySupport {

	public ProductosVentaResponseType obtenerTodosProductos() {
		ObjectFactory of = new ObjectFactory();
		JAXBElement<ProductosVentaRequestType> request = of.createProductosTodosRequest(new ProductosVentaRequestType());

		JAXBElement<ProductosVentaResponseType> response = (JAXBElement<ProductosVentaResponseType>) getWebServiceTemplate()
		          .marshalSendAndReceive(request);
		
		return response.getValue();
	}

}

Configuración cliente

Por último, tendremos que añadir la siguiente clase para la configuración del cliente:

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:

<soap:address location="http://serviciosumupruebas.um.es:80/serviciosumu/services/ServicioUmu"/>
  • Sin etiquetas