我在Spring
上有一个项目,我希望将其设为SOAP Web Service
我有实体,DAO和控制器,我更喜欢不使用 Apache CXF
我读到Spring-WS是第一个合同。我正在使用Intellij Idea,它从我的实体生成了 .wsdl 和 .xsd 文件。
如果我删除我的实体并继续,它会先算作合约吗? 能否请您给我一个很好的例子或者什么能帮助我理解Spring-WS究竟是什么以及如何开发它?
答案 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)