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 8 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. Si queremos generar las clases a partir de diferentes wsdl, debemos ponerlos en diferentes bloque s<execution>:

<!-- 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>ServicioFopumDesa.wsdl</include> -->
								<include>ServicioFopumTest.wsdl</include>
								<!-- <include>ServicioFopumProd.wsdl</include> -->
								<!-- <include>ServicioArchivoUMU.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>

Aquí, tendremos que especificar el campo generatePackage, con el paquete en el que se crearán las clases, schemaDirectory con el directorio donde el plugin buscará los archivos wsdl, que se especificarán dentro de schemaIncludes.

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();
		client.setDefaultUri("http://localhost:8080/soap");
		client.setMarshaller(marshaller);
		client.setUnmarshaller(marshaller);
		return client;
	}

}
  • Sin etiquetas