web-dev-qa-db-ja.com

spring-bootでWSDLを使用する方法は?

クライアントから提供されたWSDLおよびスキーマファイルがあります。このWSDLファイルを使用してSpring-boot SOAP Webサービスを作成する必要があります。Googleで検索でき、すべてのサンプルがあります。春でwsdlを自動生成しています。 WSDLを使用してSOAPサービス?

14
user3496599

Spring-WsおよびSpring-bootで既存のwsdlを使用するために従うべき一般的な手順を次に示します。

構成クラス

@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では、エンドポイントを自分で作成する必要があります。エンドポイントのコード生成はありません。書きやすい。あなたは春のウェブサイトのチュートリアル/ガイドに従うことができます。
18
Ketan

WSDLファイルから開始してSpring Bootを使用するWebサービスを公開するための多くのオプションがあります。通常、WSDL定義からJavaクラスを生成します。これを行う際にサポートする多くの JAXB Mavenプラグイン があります。

さらに、Spring Bootを使用するときは、必要なさまざまな依存関係を自動的に管理するために、 spring-boot-starters を利用してください。

1つのアプローチは、Spring Webサービスをmaven-jaxb2-pluginプラグインと組み合わせて使用​​することです。 コンシューマとプロバイダーの両方のWSDLファイルからSpring-WSを使用してこれを行う方法を説明するステップバイステップのチュートリアル を作成しました。

別の方法は、Apache CXFのようなフレームワークをcxf-codegen-pluginプラグインと組み合わせて使用​​することです。 CXFには、独自の CXF Spring Bootスターターcxf-spring-boot-starter-jaxwsと呼ばれるものも付属しています。始めるために WSXファイルから開始するWebサービスを作成するためにCXFスターターをSpring Bootと組み合わせて使用​​する例 をコンパイルしました。

8
CodeNotFound

パッケージにWebServiceConfiguration Javaクラスを作成できます。

@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"));
}

スプリングブートアプリとして実行した後、ブラウザにこのURLをコピーして貼り付けます。 http:// localhost:8080/ProjectName/wsdlname.wsdl

注意:Tomcatポートに置き換えるlocalhost:8080

2
Jasintha Peiris

SOAP(元々Simple Object Access Protocol)は、コンピューターネットワークでのWebサービスの実装で構造化された情報を交換するためのプロトコル仕様です。 SOAPは、異なるオペレーティングシステム(WindowsやLinuxなど)で実行されているプロセスがExtensible Markup Language(XML)を使用して通信できるようにします。SOAP標準化されたWSDLは、標準(WSDL)を知っている人がWebサービスが提供する操作とデータの交換方法を学習できることを意味します。この知識を使用して、タイプセーフなバインダークラス/オブジェクトを生成するツールを作成できます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/*に設定されます。このパスを使用して、Webコンテナーは受信HTTP要求をMessageDispatcherServletにマップします。 DefaultWsdl11Definitionは、指定されたHello World WSDLファイルを使用して標準WSDL 1.1を公開します。 MessageDispatcherServletは、アプリケーションコンテキストで定義されたWsdlDefinitionも自動的に検出します。

詳細な説明とビデオチュートリアルは、こちらから入手できます。 Spring Boot + SOAP Web Services Contract First Example

1
Gordan

最も簡単な方法は、単に cxf-spring-boot-starter inclを使用することです。 companion Maven plugin であり、wsdlおよびスキーマファイルから必要なほとんどすべてを生成します。完全な例: https://github.com/codecentric/spring-samples/tree/master/cxf-boot-simple

pom.xmlのスターターを使用して、wsdlとスキーマファイルを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>
0
jonashackt