📅  最后修改于: 2023-12-03 15:05:16.469000             🧑  作者: Mango
Spring WS是一个基于Spring框架的Web服务框架,它支持SOAP协议和XML格式数据传输,并提供了丰富的扩展和定制能力。其中,静态WSDL是Spring WS中一个重要的概念,它允许我们基于XML Schema文件自动生成WSDL文件,使得客户端可以根据该WSDL文件自动生成Java客户端代码。
我们可以通过Maven来依赖Spring WS框架,相关依赖如下所示:
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>${spring.ws.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
<version>${spring.ws.version}</version>
</dependency>
其中,${spring.ws.version}
是一个自定义的版本号变量,我们需要在POM文件中声明并引用。
我们需要在Spring配置文件中声明Spring WS的命名空间,并进行相关配置。示例代码如下所示:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:ws="http://www.springframework.org/schema/web-services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd">
<ws:definition>
<ws:types>
<xs:schema targetNamespace="http://www.example.org/customer">
...
</xs:schema>
</ws:types>
<ws:message>
<ws:part name="input" element="tns:customerId"/>
<ws:part name="output" element="tns:customer"/>
</ws:message>
<ws:portType name="customerLookup">
...
</ws:portType>
<ws:binding>
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<ws:operation name="lookup">
...
</ws:operation>
</ws:binding>
<ws:service>
...
</ws:service>
</ws:definition>
</beans>
其中,我们需要在<ws:types>
标签中定义XML Schema文件,它可以是一个本地的文件路径,也可以是一个URL地址。例如,我们可以在该标签中定义如下示例:
<ws:types>
<xsd:schema targetNamespace="http://www.example.org/customer">
<xsd:element name="customerId" type="xsd:string"/>
<xsd:element name="customer">
...
</xsd:element>
</xsd:schema>
</ws:types>
其余的<ws:message>
、<ws:portType>
、<ws:binding>
和<ws:service>
标签分别对应于WSDL文件中的<wsdl:message>
、<wsdl:portType>
、<wsdl:binding>
和<wsdl:service>
元素。
我们可以通过第三方工具或操作系统自带的Java编译器来生成客户端代码。其中,wsimport
命令是一个常见的命令,它可以根据WSDL文件自动生成Java客户端代码,如下所示:
wsimport -d generated -keep http://localhost:8080/application/services/MyService?wsdl
其中,-d
参数表示输出目录,-keep
参数表示保留生成的Java文件,http://localhost:8080/application/services/MyService?wsdl
是WSDL文件的地址。
一个完整的示例项目可以在GitHub上找到,地址为:
https://github.com/spring-projects/spring-ws-samples/tree/master/sts/contract-first。
本文介绍了Spring WS框架中的静态WSDL概念,并提供了相关的使用示例。Spring WS具有强大的扩展和定制能力,是一个非常好的Web服务框架。