クライアントから提供されたWSDLおよびスキーマファイルがあります。このWSDLファイルを使用してSpring-boot SOAP Webサービスを作成する必要があります。Googleで検索でき、すべてのサンプルがあります。春でwsdlを自動生成しています。 WSDLを使用してSOAPサービス?
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;
}
}
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と組み合わせて使用する例 をコンパイルしました。
パッケージに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
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
最も簡単な方法は、単に 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>