由 servlet 容器在后台生成的 WSDLS?

WSDLS generated in the background by servlet containers?

最近我阅读了文章 http://www.ibm.com/developerworks/library/ws-noide1/,这促使我回顾了我对 SOA 在过去十年左右的发展历程的了解。审查是一个很好的复习,但我很快发现我的知识存在一些差距。

我特别想知道,但找不到明确的答案 WSDL 文件是必需的 不管 哪个 协议、范式或API用于提供网络服务。 这些文件的创建和传播是由servlet容器完成的,例如tomcat、jetty等背景

例如,本质上 HTTP 协议本身不需要 WSDL,这让我相信 WSDL 是一种与 SOAP 紧密耦合的规范,也许 EJB、Spring 等不需要它。

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

但我没能找到这个具体问题的明确答案。

如果您仔细查看 Java 规范,您将了解什么是 WSDL。

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

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

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

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

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

编辑:

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

考虑一下,您为房屋销售商工作。您对 WS 进行了三种不同的调用:1. 您在您的网站上确认了一次销售,2. 您在您的目录中进行搜索,3. 您在内联网上通过一条小消息通知您的老板。

我明确指出,使用三种不同类型的 WS 并不是强制性的。

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

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

您可以从 IDE 生成 WSDL。但我不确定使用 Maven 是否正确。 WSDL 是您的合同,它可能是您基于 WS 的合同。 IDE 的一代只是让您的生活更轻松的一种方式,但最终 WSDL 可能不会有太大变化。如果确实如此,那么 SOAP 可能不是您所需要的。 REST 可能更多 "agile".

查看这些链接以使用 IDE (IntelliJ, Eclipse) or with external tool WSGEN.

手动生成