Saltar al contenido

CXF con Spring-Boot

Solución:

Ten tu jaxwsEndpoint bean devuelve una instancia de org.apache.cxf.jaxws.EndpointImpl, que se extiende javax.xml.ws.Endpoint:

@Autowired
private ApplicationContext applicationContext;

@DependsOn("servletRegistrationBean")
@Bean
public Endpoint jaxwsEndpoint(){
   Bus bus = (Bus) applicationContext.getBean(Bus.DEFAULT_BUS_ID);
   EndpointImpl endpoint = new EndpointImpl(bus, subscriberApi());
   endpoint.publish("/SubscriberApi");
   // also showing how to add interceptors
   endpoint.getServer().getEndpoint().getInInterceptors().add(new LoggingInInterceptor());
   endpoint.getServer().getEndpoint().getOutInterceptors().add(new LoggingOutInterceptor());

   return endpoint;
}

La publicación original no incluye un ejemplo ejecutable, pero esto debería resolver el problema.

Se puede encontrar un ejemplo de ejecución aquí, con toda la configuración vinculada: Application.java

Hay una forma mucho más fácil para que Spring Boot y Apache CXF se ejecuten y brinden un servicio web SOAP basado en su archivo WSDL: simplemente use cxf-spring-boot-starter, que hace todo por usted. Solo necesita usar el iniciador y su complemento Maven complementario en su pom.xml así (¡ejemplo completo!):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.codecentric.soap</groupId>
    <artifactId>cxf-boot-simple</artifactId>
    <version>2.1.2-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>cxf-boot-simple</name>
    <description>Demo project for using Spring Boot Starter CXF</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>cxf-spring-boot-starter</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>de.codecentric</groupId>
                <artifactId>cxf-spring-boot-starter-maven-plugin</artifactId>
                <version>2.0.0.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Coloque su wsdl en algún lugar dentro src/main/resources, implemente su clase de punto final y ¡Terminaste!. Eso es realmente todo, sin codificación repetitiva manual (no ServletRegistrationBean etc.). Esto solo se genera para usted en función del WSDL: primero el contrato del 100%.

Aquí también hay un proyecto de ejemplo completamente comprensible: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple. Y también hay una serie de publicaciones en el blog, que le presentará todo lo relacionado con saber: https://blog.codecentric.de/en/2016/10/spring-boot-apache-cxf-spring-boot-starter/ Diviértase !

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *