Как использовать WSDL с spring -boot?

У меня есть WSDL и файлы схемы, предоставленные клиентом. Мне нужно создать веб-службу SOAP Spring -boot с этим файлом WSDL. У меня есть google и все примеры, которые я могу найти, они автоматически генерируют wsdl с помощью spring. Как я могу использовать WSDL для создания SOAP-сервиса?

Ответ 1

Ниже приведены общие шаги для использования существующего wsdl с Spring -Ws и Spring -boot.

Класс конфигурации

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/ws/*");
    }

    //http://localhost:8080/ws/services.wsdl --bean name is set to 'services'
    @Bean(name = "services")
    public Wsdl11Definition defaultWsdl11Definition() {
        SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
        wsdl11Definition.setWsdl(new ClassPathResource("/schema/MyWsdl.wsdl")); //your wsdl location
        return wsdl11Definition;
    }
}
  1. В вашем pom.xml используйте плагин jaxb2-maven-plugin для генерации классов из вашего wsdl.
  2. В Spring -WS вам нужно написать конечную точку самостоятельно. Нет генерации кода для конечных точек. Его легко написать. вы можете следовать руководству/руководству на веб-сайте spring.

Ответ 2

Существует несколько вариантов представления веб-службы, начиная с файла WSDL и используя Spring Boot. Обычно вы генерируете свои классы Java из определения WSDL. Существует ряд плагинов JAXB Maven, которые помогут вам в этом.

Кроме того, при использовании Spring Boot убедитесь, что вы используете преимущества весенних загрузчиков, чтобы автоматически управлять различными необходимыми зависимостями.

Один из подходов заключается в использовании Spring Web Services в сочетании с maven-jaxb2-plugin plugin. Я создал пошаговое руководство, в котором объясняется, как сделать это с помощью Spring-WS, начиная с файла WSDL для потребителя и поставщика.

Другой альтернативой является использование фреймворка вроде Apache CXF в сочетании с cxf-codegen-plugin plugin. CXF также поставляется с собственным стартером CXF Spring Boot, который называется cxf-spring-boot-starter-jaxws. Чтобы начать, я скомпилировал пример, который использует стартер CXF в сочетании с Spring Boot для создания веб-сервиса, начинающегося с файла WSDL.

Ответ 3

SOAP (первоначально Simple Object Access Protocol) - это спецификация протокола для обмена структурированной информацией при реализации веб-сервисов в компьютерных сетях. SOAP позволяет обрабатывать процессы, работающие на разрозненных операционных системах (например, Windows и Linux), с использованием расширяемого языка разметки (XML). SOAP может использоваться в сочетании с WSDL, который стандартизован, что означает, что люди, знающие стандарт (WSDL), могут узнать из него, какие операции предлагает веб-сервис и как обмен данными. Эти знания могут быть использованы для создания инструментов, которые генерируют безопасные типы/объекты привязки типа из файла WSDL. Эти сгенерированные классы (для создания RPC) могут использоваться без необходимости ручного внедрения запросов и кодирования/анализа данных, которые обмениваются.
Используя maven-jaxb2-plugin, мы можем генерировать требуемые классы, необходимые из wsdl.

           <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>${maven-jaxb2-plugin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
                    <schemaIncludes>
                        <include>*.wsdl</include>
                    </schemaIncludes>
                </configuration>
            </plugin>

Далее, используя ServletRegistrationBean, мы регистрируем MessageDispatcherServlet с помощью Spring Boot. Во время этой регистрации шаблон URI для сервлета устанавливается в /javainuse/ws/ *. Используя этот путь, веб-контейнер будет отображать входящие HTTP-запросы в MessageDispatcherServlet. DefaultWsdl11Definition предоставляет стандартный WSDL 1.1, используя указанный файл WSDL Hello World. MessageDispatcherServlet также автоматически определяет любое WsdlDefinition, определенное в контексте приложения.

Подробное объяснение вместе с видеоуроком доступно здесь: Spring Первый пример контракта на загрузку и SOAP веб-сервисов

Ответ 4

Самый простой способ - просто использовать cxf-spring-boot-starter incl. Это дополнение к плагину Maven, они позаботятся о том, чтобы генерировать в основном все необходимое из ваших файлов wsdl и schema. Вот полный пример: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple.

Используя стартер в вашем pom.xml, вам просто нужно поместить файлы wsdl & schema в src/main/resources и вы в основном все сделали. Вот полный пример pom.xml:

<?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.0.0-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>

Ответ 5

Вы можете создать Java-класс WebServiceConfiguration в своих пакетах.

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {

    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/ProjectName/*");
    }
    @Bean(name = "wsdlname")
    public DefaultWsdl11Definition defaultWsdl11Definition (XsdSchema cityRequestSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setRequestSuffix("ByCountry");
        wsdl11Definition.setResponseSuffix("City");
        wsdl11Definition.setPortTypeName("Hotelport");
        wsdl11Definition.setLocationUri("/ProjectName");
        wsdl11Definition.setTargetNamespace("http://spring.io/guides/gs-producing-web-service");
        wsdl11Definition.setSchema(cityRequestSchema);
        return wsdl11Definition;

    }

    @Bean
public XsdSchema cityRequestSchema() {
    return new SimpleXsdSchema(new ClassPathResource("CityRequest.xsd"));
}

После запуска в качестве spring загрузочного приложения... затем скопируйте этот url в свой браузер. http://localhost:8080/ProjectName/wsdlname.wsdl

отметил: localhost: 8080 заменить на ваш порт tomcat

Ответ 6

Самый простой способ - просто использовать cxf-spring-boot-starter incl. Это дополнение к плагину Maven, они позаботятся о том, чтобы генерировать в основном все необходимое из ваших файлов wsdl и schema. Вот полный пример: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple.

Используя стартер в вашем pom.xml, вам просто нужно поместить файлы wsdl & schema в src/main/resources и вы в основном все сделали. Вот полный пример pom.xml:

<?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.0.0-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>