【问题标题】:WSDLS generated in the background by servlet containers?servlet 容器在后台生成 WSDLS?
【发布时间】:2015-12-06 02:50:32
【问题描述】:

最近我阅读了文章http://www.ibm.com/developerworks/library/ws-noide1/,这促使我回顾了我对 SOA 在过去十年左右的发展过程中的了解。这篇评论是一个很好的复习,但我很快就发现了我的知识上的一些空白。

我特别想知道,但找不到明确的答案来确定是否需要 WSDL 文件 无论是哪种协议、范式或 API 用于提供 Web 服务。 这些文件的创建和传播是否由 servlet 容器(如 tomcat、jetty 等)在后台完成?

例如,基本上 HTTP 协议本身不需要 WSDL,这使我相信 WSDL 是与 SOAP 紧密耦合的规范,并且 EJB、Spring 等可能不需要它。

我知道有人问过类似的问题,例如JSON, REST, SOAP, WSDL, and SOA: How do they all link together

但我无法找到这个特定问题的明确答案。

【问题讨论】:

    标签: java web-services servlets soap wsdl


    【解决方案1】:

    如果您仔细查看 Java 规范,您就会清楚地知道什么是 WSDL。

    当您在 Java 中构建 Web 服务时,您有几种方法可以做到这一点。

    • SOAP,规范 Jax-WS:这个标准有点严格。它为了与它沟通,你必须尊重合同。这个契约名为 WSDL,是一个 XML,它定义了如何到达 WS、需要哪些参数以及它们的类型。此文件由服务提供,大多数现代 IDE 都会生成它,但您必须将其提供给您的客户,以便它可以调用符合合同的 WS。
    • REST,规范 Jax-RS:这个标准远没有合同那么严格。这通过特定的 HTTP 方法(GET、POST、PUT、DELETE)提供 URL。要调用这种 WS,只需调用它,您就会看到会发生什么。
    • 队列 JMS:这与其他两个不同,但对我来说似乎很重要,因为它提供了一种创建可靠、解耦和异步消息传递的方法。它基于连接工厂来处理通信。

    这些标准已在当今的大多数主要技术中实施。 Java EE 及其 EJB 实现了这三个,Spring 也是如此。

    SOA 现在提供了多种通信方式,具体取决于您的需求。

    希望对我有所帮助,如果需要,请随时询问。

    编辑:

    为了解释用例,我将尝试设置一个示例...这是一种艰苦的练习,并不完美,但我希望它对您有所帮助。

    考虑一下,您为房屋卖家工作。您有 WS 三个不同的电话:1. 您在您的网站上确认销售,2. 您在目录中搜索,3 您通过 Intranet 上的一条小消息通知您的老板。

    我确切地说,使用三种不同类型的 WS 不是强制性的。

    1. 此操作对您的工作流程非常重要。数据是 发送必须到达。您必须确保尊重预期的内容 WS。客户端和服务器端必须完美匹配。 您将使用 SOAP,因为它们之间存在特定的约定 双方。
    2. 为此,您不需要具体而严格的合同。搜索很简单,不需要具有已定义参数的结构。只需获取数据并将其打印在屏幕上即可。这里 REST 可能更合适,因为它更容易设置,如果需要修改,客户端无需修改合约。
    3. 对于消息传递,您想要发送消息,仅此而已。 JMS 是等待“消息”的队列。这些消息是异步消费的请求。消息将被存储,等待消费者按队列顺序 (FIFO) 接收它们。

    WSDL 的生成是您的任务。它将根据您的 WS 的 Java 代码生成一个 xml 文件。请注意,相反的情况也是可能的,如果您有一个 WSDL,您可以从中生成 Java(请参阅this。大多数情况下,您有一个与您的 WSDL 文件相对应的 url,因此可以从您的客户端访问它。

    您可以从 IDE 生成 WSDL。但我不确定使用 Maven 是否正确。 WSDL 是您的合同,它可能是您基于 WS 的合同。使用 IDE 生成只是让您的生活更轻松的一种方式,但最终 WSDL 可能不会发生太大变化。如果是这样,那么 SOAP 可能不是您所需要的。 REST 可能更“敏捷”。

    查看这些链接以使用 IDE(IntelliJEclipse)或 external tool WSGEN 手动生成。

    【讨论】:

    • 谢谢,这很有帮助,但特别是我还想知道在我们使用 SOAP 的情况下,例如,是 IDE(eclipse 等)在后台生成的 WSDL 还是公共构建编译类时使用的工具(maven/ant)或 java 编译器本身(例如,wsdl 是生成并嵌入到 ouptut jar 中,还是嵌入到清单文件中?)。除了我在显式生成 wsdl 的主要问题中链接的文章之外,我没有发现任何迹象,例如 maven 目标等。抱歉,如果我的原始问题不够清晰/简洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2011-11-08
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多