📜  Spring WS-静态WSDL(1)

📅  最后修改于: 2023-12-03 15:05:16.469000             🧑  作者: Mango

Spring WS-静态WSDL

简介

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服务框架。