【问题标题】:Why start from XSD (rather than WSDL) in contract-first SOAP-service?为什么在契约优先的 SOAP 服务中从 XSD(而不是 WSDL)开始?
【发布时间】:2015-08-16 13:42:05
【问题描述】:

在这个 Spring 参考资料中(第 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 中未定义的东西中,您会遇到不同工具之间不兼容的风险吗?

希望对此进行一些澄清...

【问题讨论】:

    标签: web-services soap wsdl spring-ws


    【解决方案1】:

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

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

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

    但是,根据我目前的经验,由于 Spring 不完全兼容 JAX-WS,您可能会遇到一些实现问题,尤其是当您与 3rd 方团队合作时。例如,spring-ws 不支持同名方法和属性对象。

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

    【讨论】:

    • 嗯....我的目标是,它看起来不再像合同优先了。示例:Spring 生成您的 WSDL,并且您获得使用它的客户端应用程序。稍后,您升级到 Spring 的新版本(或者可能稍微更改您的服务实现类,甚至升级您的 jdk 版本?),它可能会导致您的 WSDL 发生一些细微变化 = 某些客户端应用程序的潜在问题。 .??如果您首先执行纯 WSDL,则永远不会发生这种情况......
    • @Rop 即使您首先从 WSDL 创建服务,您也可以让底层框架稍后从您的实现动态创建 WSDL,Jax-ws 或 CXf 无需 spring 就可以做到这一点。然后,您可以修改签名等,这也会更改 WSDL。您需要确保首先不要修改方法签名。 WSDL 只是帮助您首先创建您的服务,仅此而已。主要是让客户了解您的服务。但我同意 spring 将来可能会改变他们的方法命名策略,这可能会导致问题。
    【解决方案2】:

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

    如您所见,通过定义 XSD 并由此生成类文件。您的代码库正在成为合法的网络服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多