为什么在契约优先的SOAP服务中从XSD(而不是WSDL)开始?

时间:2015-08-16 13:42:05

标签: web-services soap wsdl spring-ws

在本春季参考文献中(第3章编写契约优先Web服务)

http://docs.spring.io/spring-ws/site/reference/html/tutorial.html

它说 "服务合同通常表示为WSDL文件。请注意,在Spring-WS中,不需要手动编写WSDL。基于XSD和一些约定,Spring-WS可以为您创建WSDL ..."

这也是示例应用程序中实现的方法:

https://github.com/spring-guides/gs-soap-service.git

只是想知道......如果你做第一次合同",为什么你想从XSD开始,让框架生成WSDL? 我认为背后的想法"合同第一"最好的做法是让你最大限度地控制界面, 确保不同SOAP服务框架,工具,语言等之间的最大兼容性。

虽然XSD包含数据类型和请求/响应对象类型,但它没有定义实际的服务操作(可能还有其他一些东西?)...

是否存在您在XSD中未定义的内容中遇到不同工具之间不兼容的风险?

希望对此有所澄清...

2 个答案:

答案 0 :(得分:1)

使用spring-ws的经验的主要原因。 WSDL可以由Spring动态生成。考虑到它包含端点(在不同的景观之间),这是非常有利的。通常使用基础XSD来定义常用的数据元素。此外,在定义XSD之后,您可以使用jaxb为源代码生成必要的类文件。

如您所见,通过定义XSD,从而从中生成类文件。您的代码库正在成为合法的Web服务。

答案 1 :(得分:1)

请看这个比较: https://dzone.com/articles/apache-cxf-vs-apache-axis-vs

“在XSD中未定义的内容中,您是否会遇到不同工具之间不兼容的风险?”

基本上,Spring所做的是让你通过代码定义服务,并使用从XSD生成的域对象。我猜你不会有这方面的问题。

但是,从我目前的经验来看,因为Spring并不完全兼容JAX-WS,所以你可能会遇到一些实现问题,尤其是当你在第三方团队工作时。例如,spring-ws不支持相同的命名方法&财产对象。

除此之外,它很容易设置和使用