使用Spring Boot创建SOAP Web服务:
1. Spring Boot主应用文件:
<b>package</b> com.ngdeveloper; <b>import</b> org.springframework.boot.SpringApplication; <b>import</b> org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication <b>public</b> <b>class</b> CouponApplication { <b>public</b> <b>static</b> <b>void</b> main(String[] args) { SpringApplication.run(CouponApplication.<b>class</b>, args); } }
2.pom.xml
下面的pom.xml文件包含从xsd文件生成输出目录文件的插件,于是会创建pom.xml,xsd文件,端点然后通过启动spring boot应用程序,您将能够找到生成的其他所需文件。
<font><i>//</i></font><font> </font><font><i>// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7</i></font><font> </font><font><i>// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a></i></font><font> </font><font><i>// Any modifications to this file will be lost upon recompilation of the source schema.</i></font><font> </font><font><i>// Generated on: 2019.01.23 at 03:41:28 PM IST</i></font><font> </font><font><i>//</i></font><font> </font>
<?xml version=<font>"1.0"</font><font> encoding=</font><font>"UTF-8"</font><font>?> <project xmlns=</font><font>"http://maven.apache.org/POM/4.0.0"</font><font> xmlns:xsi=</font><font>"http://www.w3.org/2001/XMLSchema-instance"</font><font> xsi:schemaLocation=</font><font>"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</font><font>> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.ngdeveloper</groupId> <artifactId>Coupon</artifactId> <version>1.0</version> <name>Coupon</name> <description>Coupon Web service</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>1.6</version> <executions> <execution> <id>xjc</id> <goals> <goal>xjc</goal> </goals> </execution> </executions> <configuration> <schemaDirectory>${project.basedir}/src/main/resources/</schemaDirectory> <outputDirectory>${project.basedir}/src/main/java</outputDirectory> <clearOutputDir>false</clearOutputDir> </configuration> </plugin> </plugins> </build> </project> </font>
为您的请求和响应创建一个xsd文件,
以下coupon-details.xsd文件是请求和响应文件:
<xs:schema xmlns:xs=<font>"http://www.w3.org/2001/XMLSchema"</font><font> xmlns:tns=</font><font>"http://ngdeveloper.com/coupon"</font><font> targetNamespace=</font><font>"http://ngdeveloper.com/coupon"</font><font> elementFormDefault=</font><font>"qualified"</font><font>> <xs:element name=</font><font>"GetCouponDetailsRequest"</font><font>> <xs:complexType> <xs:sequence> <xs:element name=</font><font>"id"</font><font> type=</font><font>"xs:int"</font><font> /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=</font><font>"GetCouponDetailsResponse"</font><font>> <xs:complexType> <xs:sequence> <xs:element name=</font><font>"CouponDetails"</font><font> type=</font><font>"tns:CouponDetails"</font><font> /> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name=</font><font>"CouponDetails"</font><font>> <xs:sequence> <xs:element name=</font><font>"id"</font><font> type=</font><font>"xs:int"</font><font> /> <xs:element name=</font><font>"title"</font><font> type=</font><font>"xs:string"</font><font> /> <xs:element name=</font><font>"code"</font><font> type=</font><font>"xs:string"</font><font> /> </xs:sequence> </xs:complexType> </xs:schema> </font>
3.创建端点:
<b>package</b> com.ngdeveloper.ws.endpoints; <b>import</b> org.springframework.ws.server.endpoint.annotation.Endpoint; <b>import</b> org.springframework.ws.server.endpoint.annotation.PayloadRoot; <b>import</b> org.springframework.ws.server.endpoint.annotation.RequestPayload; <b>import</b> org.springframework.ws.server.endpoint.annotation.ResponsePayload; <b>import</b> com.ngdeveloper.CouponDetails; <b>import</b> com.ngdeveloper.GetCouponDetailsRequest; <b>import</b> com.ngdeveloper.GetCouponDetailsResponse; @Endpoint <b>public</b> <b>class</b> CouponDetailsEndPoint { @PayloadRoot(namespace = <font>"http://ngdeveloper.com/coupon"</font><font>, localPart = </font><font>"GetCouponDetailsRequest"</font><font>) @ResponsePayload <b>public</b> GetCouponDetailsResponse processCouponDetailsRequest(@RequestPayload GetCouponDetailsRequest request) { GetCouponDetailsResponse response = <b>new</b> GetCouponDetailsResponse(); CouponDetails couponDetails = <b>new</b> CouponDetails(); couponDetails.setId(request.getId()); couponDetails.setTitle(</font><font>"10% OFF on Paytm"</font><font>); couponDetails.setCode(</font><font>"PYTM10"</font><font>); response.setCouponDetails(couponDetails); <b>return</b> response; } } </font>
4.WebserviceConfig文件:
这个配置文件在 spring boot for soap webservice and load the xsd file
<b>package</b> com.ngdeveloper; <b>import</b> org.springframework.boot.web.servlet.ServletRegistrationBean; <b>import</b> org.springframework.context.ApplicationContext; <b>import</b> org.springframework.context.annotation.Bean; <b>import</b> org.springframework.context.annotation.Configuration; <b>import</b> org.springframework.core.io.ClassPathResource; <b>import</b> org.springframework.ws.config.annotation.EnableWs; <b>import</b> org.springframework.ws.config.annotation.WsConfigurerAdapter; <b>import</b> org.springframework.ws.transport.http.MessageDispatcherServlet; <b>import</b> org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition; <b>import</b> org.springframework.xml.xsd.SimpleXsdSchema; <b>import</b> org.springframework.xml.xsd.XsdSchema; @EnableWs @Configuration <b>public</b> <b>class</b> WebServiceConfig <b>extends</b> WsConfigurerAdapter { @Bean <b>public</b> ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { MessageDispatcherServlet servlet = <b>new</b> MessageDispatcherServlet(); servlet.setApplicationContext(applicationContext); servlet.setTransformWsdlLocations(<b>true</b>); <b>return</b> <b>new</b> ServletRegistrationBean(servlet, <font>"/ws/*"</font><font>); } @Bean(name = </font><font>"coupon"</font><font>) <b>public</b> DefaultWsdl11Definition defaultCouponWsdl11Definition(XsdSchema couponSchema) { DefaultWsdl11Definition wsdl11Definition = <b>new</b> DefaultWsdl11Definition(); wsdl11Definition.setPortTypeName(</font><font>"CouponPort"</font><font>); wsdl11Definition.setLocationUri(</font><font>"/ws"</font><font>); wsdl11Definition.setTargetNamespace(</font><font>"http://ngdeveloper.com/coupon"</font><font>); wsdl11Definition.setSchema(couponSchema); <b>return</b> wsdl11Definition; } @Bean <b>public</b> XsdSchema couponSchema() { <b>return</b> <b>new</b> SimpleXsdSchema(<b>new</b> ClassPathResource(</font><font>"coupon-details.xsd"</font><font>)); } } </font>
在application.properties中添加以下行以记录输入请求和输出响应,
logging.level.org.springframework.web=DEBUG logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG logging.level.org.springframework.ws.server.MessageTracing.sent=DEBUG logging.level.org.springframework.ws.client.MessageTracing.received=TRACE logging.level.org.springframework.ws.server.MessageTracing.received=TRACE
测试创建的SOAP Web服务:
安装 wizdler插件 以直接从chrome浏览器测试SOAP Web服务。
您还可以使用 SOAP UI工具 (此处提供免费和专业工具)
在chrome浏览器中打开wsdl链接,然后单击wizdler图标以传递请求