了解Spring-WS

时间:2013-09-13 10:43:02

标签: java spring web-services spring-ws

我在Spring上有一个项目,我希望将其设为SOAP Web Service 我有实体,DAO和控制器,我更喜欢不使用 Apache CXF 我读到Spring-WS是第一个合同。我正在使用Intellij Idea,它从我的实体生成了 .wsdl .xsd 文件。

如果我删除我的实体并继续,它会先算作合约吗? 能否请您给我一个很好的例子或者什么能帮助我理解Spring-WS究竟是什么以及如何开发它?

3 个答案:

答案 0 :(得分: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://本地主机: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不会随时间变化的唯一方法。

答案 1 :(得分:0)

请查看春季文档,了解您需要的所有信息:http://docs.spring.io/spring-ws/sites/2.0/

答案 2 :(得分:0)

三年前,当我学习Spring SOAP网络服务时,我写了this blog。请访问the blog

此博客非常谨慎,并且有理由记住读者可能/可能不熟悉Web服务概念。

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

如果您对基于Spring SOAP的Web服务(合同优先或合同最后)仍然有疑问,请阅读此内容,请ping我。我很乐意提供帮助。