我有一个项目Spring
,我想把它做成一个SOAP Web Service
.
我有实体、DAO 和控制器,我不想使用Apache CXF。
我读到 Spring-WS 首先是合同。我正在使用 Intellij Idea,它从我的实体 生成了.wsdl和.xsd文件。
如果我删除我的实体并继续,它会先算作合同吗?
你能否给我推荐一个很好的例子或一些可以帮助我理解 Spring-WS 到底是什么以及如何开发它的东西?
我有一个项目Spring
,我想把它做成一个SOAP Web Service
.
我有实体、DAO 和控制器,我不想使用Apache CXF。
我读到 Spring-WS 首先是合同。我正在使用 Intellij Idea,它从我的实体 生成了.wsdl和.xsd文件。
如果我删除我的实体并继续,它会先算作合同吗?
你能否给我推荐一个很好的例子或一些可以帮助我理解 Spring-WS 到底是什么以及如何开发它的东西?
啊,我最近经历了很多相同的任务,以了解如何通过基于 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 不会随时间变化的唯一方法。
请查看 spring 文档以获取您需要的所有信息:http: //docs.spring.io/spring-ws/sites/2.0/