0

我有一个项目Spring,我想把它做成一个SOAP Web Service.
我有实体、DAO 和控制器,我不想使用Apache CXF。
我读到 Spring-WS 首先是合同。我正在使用 Intellij Idea,它从我的实体 生成了.wsdl.xsd文件。

如果我删除我的实体并继续,它会先算作合同吗?
你能否给我推荐一个很好的例子或一些可以帮助我理解 Spring-WS 到底是什么以及如何开发它的东西?

4

3 回答 3

3

啊,我最近经历了很多相同的任务,以了解如何通过基于 xsd 的 spring-ws 发布 Web 服务。我强烈建议查看我发现Spring WS 2 Made Easy的博客

在我浏览的 20 多个中,它是最有帮助的之一,并且可以轻松下载完整的源代码。

您可以仅基于 xsd(或 wsdl)发布 Web 服务。

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:sws="http://www.springframework.org/schema/web-services"
    xsi:schemaLocation="http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/web-services                          
        http://www.springframework.org/schema/web-services/web-services-2.0.xsd">

<!-- To detect @Endpoint -->        
<sws:annotation-driven />

<!-- publish wsdl from xsd (use during development)-->
<sws:dynamic-wsdl
    id="processStuff"
    portTypeName="MyService"
    locationUri="/myService"
    requestSuffix="Request"
    responseSuffix="Response"
    targetNamespace="http://mycompany.com/dostuff">
    <sws:xsd location="/WEB-INF/xsds/myschema.xsd"/>
</sws:dynamic-wsdl>

<!-- publish static wsdl (better for production deployments)-->
<sws:static-wsdl id="orders" location="/WEB-INF/wsdl/orders.wsdl"/>

</beans>

Spring WS 将在 id 的位置发布一个 wsdl,对于 xsd 示例,这将发布在... http://localhost:8080/[warName]/processStuff.wsdl

xsd 中与请求和响应后缀匹配的项目在发布时将被解释为 wsdl 操作。

然后,您需要开发一个使用 @Endpoint 注释的类,以匹配来自 xsd 的操作和参数。

小例子:

@Endpoint
public class MyWebService {

    @PayloadRoot(namespace = "http://mycompany.com/dostuff", localPart = "SomeRequest")
    @ResponsePayload
    public SomeResponse getSomething(@RequestPayload SomeRequest something) {
        return new SomeResponse();
    }
}

我会说它首先是合同,你只是通过代码编写合同,我之前自己做过。我宁愿写 Java 代码也不愿亲自写 xsd。

正如 Sean F 所指出的,动态 wsdl 生成应该只在开发期间完成,如 Spring 页面上的注释所示:

警告

尽管在运行时从 XSD 创建 WSDL 非常方便,但这种方法有几个缺点。首先,尽管我们尝试在不同版本之间保持 WSDL 生成过程的一致性,但它仍然有可能(稍微)发生变化。其次,生成有点慢,虽然一旦生成,WSDL 会被缓存以供以后参考。因此,建议仅在项目的开发阶段使用。然后,我们建议使用您的浏览器下载生成的 WSDL,将其存储在项目中,并使用 . 这是真正确保 WSDL 不会随时间变化的唯一方法。

于 2013-09-24T05:18:11.843 回答
0

请查看 spring 文档以获取您需要的所有信息:http: //docs.spring.io/spring-ws/sites/2.0/

于 2013-09-13T10:51:26.483 回答
0

三年前我在学习 Spring SOAP Web 服务时写了这个博客。请访问博客

这个博客很小心,并且记住读者可能/可能不熟悉 Web 服务概念。

这是一组两篇文章,一篇创建 SOAP Web 服务并托管它。另一篇文章也为此写了一个客户。

阅读本文后,如果您对基于 Spring SOAP 的 Web 服务(先合同或最后合同)仍有疑问,请联系我。我很乐意提供帮助。

于 2013-09-13T10:52:42.493 回答