【问题标题】:Creating a WADL and WSDL in Java?在 Java 中创建 WADL 和 WSDL?
【发布时间】:2014-12-06 00:49:28
【问题描述】:

我的任务是在 Java 中创建一个 WADL 和一个 WSDL。不过我有几个问题。

首先,WSDL 是描述客户端如何从 SOAP 系统请求信息的 XML 文档。 WADL 是描述客户端如何从 REST 系统请求信息的 XML 文档。这两个都对吗?

如果是这样,他们到底是做什么的?我了解 SOAP 和 REST 如何与 HTTP 一起正常工作,但是 我无法理解 WADL 和 WSDL 的确切意义、它们的用途以及我应该如何创建一个java.

【问题讨论】:

  • 我正在为我创建的一个安静的 Web 服务创建 WADL 的一些相同的任务。那么你能够创建 WADL 吗?

标签: java rest soap wsdl wadl


【解决方案1】:

当你的代码中有一个方法并且你需要调用它时,你如何调用它?您查看方法签名和 javadoc。您会看到参数名称是什么,它们的含义,它们的类型,javadoc 会告诉您是否对值有一些限制,如果您不遵守这些限制,您会得到什么异常,等等。

现在考虑一个网络服务。让我们首先从 SOAP 开始。它是通过网络公开的操作。你怎么称呼这只野兽?您只能看到一个端点,您必须在其中发送格式正确的 SOAP 有效负载。这会告诉你操作名称吗?参数名称和类型?限制你的价值观?不!它绝对不会告诉你什么。您需要一种方法来告诉客户如何调用此服务。

您可以拥有文档,就像 javadoc 一样。您可以使用它来学习如何拨打电话。但这将是 XML。你是用 XML 还是 Java 编程?您使用 Java 进行编程,但您需要将对象编组为 XML,然后将来自 XML 的响应解组回 Java 对象。而且您必须编写所有执行此操作的代码。如果您误解了文档,您将构建错误并且它不会在第一次工作。您将不得不再次阅读文档、调整您的 XML、调试它、重试、重复直到工作等。这是徒劳的!

如果您有一个工具可以为您生成代码,这样您就可以专注于需要完成的实际业务而不是浪费时间在 XML 上,这不是很好吗?输入 WSDL。

WSDL 是一种描述 SOAP Web 服务的方式。它是签名、参数名称和类型、限制和文档,全部合二为一。它的有用之处在于,您可以将其提供给工具,并让工具从中生成代码,为您处理 XML 编组/解组,并将方法和对象公开给您的 Java 代码。

现在 REST 是不同的野兽。要调用 RESTful Web 服务,您需要“说它的语言”,没有要遵循的“协议”。客户需要了解MIME types才能使用该服务。这主要是您必须阅读和理解然后构建代码的文档。因为这也主要是样板代码,所以使用 SOAP WSDL 提供的特性的人们决定为 REST 创建类似的东西。这是 WADL。

WADL 对 REST 的作用与 WSDL 对 SOAP 的作用相同(请注意,尽管 REST 不仅仅是一种执行 SOAP 的不同方式,因此当您尝试对 REST 做同样的事情时,您使用 SOAP 所做的,您只需将 RESTful Web 服务(which is hypermedia driven)简化为 WebAPI)。

至于创建 WSDL 和 WADL 的方法,如果你有知识,你可以自己动手(称为“contract-first”)或者你可以使用JAX-RSJAX-WS 框架,先写你的服务并让框架自动为您生成 WSDL(这称为“contract-last”)。

【讨论】:

  • 感谢您的精彩解释。关于您提到“最后合同”的最后一部分,您能告诉我如何(以编程方式)为已经创建的 RESTful Web 服务创建 WADL 吗?实际上有一个存储库 WSO2,我想在其中发布我的 RESTful Web 服务,WADL 是为发布目的而设计的吗?
【解决方案2】:

只有几点。

严格来说 RESTful Web 服务不是服务。 这只是查看您与服务器交互的方式。

早期有RPC(Remote Procedure Call),所以重点是用名称、参数等来描述远程方法。 当 XML Schema 出现时,我们不定义参数,而是将 XML“文档”发送给方法(文档样式)。 Java 将参数映射到 XML 文档 (JAX-WS),这是在 Java(文档/文字)样式中执行 WS 的最“推荐”方式。

在 REST 中没有服务,而是可以创建/读取/更新/删除 (CRUD) 的资源。 大多数情况下都使用 HTTP 协议。

WSDL 1.1 是描述 WS 的“事实上的”标准,Java 支持该标准。 WSDL 2.0 是标准,虽然没有得到业界的大力支持。

请注意,WSDL 可用于通过 http 绑定来描述 HTTP 服务(而不是资源!)。 WSDL 1.1 在 HTTP 术语支持方面受到限制(仅 GET 和 POST),而 WSDL 2.0 支持所有 HTTP 操作。

WADL 是 SUN Microsystems 为 REST 制作一种 WSDL 的提议。 WADL 要简单得多。

所以区别在于远程执行(WS / WSDL)与资源(REST / WADL)。

关于 Java。 如果您使用 JAX-WS 对服务进行编程,您通常不需要手动创建 WSDL,因为 JAX-WS 会自动从代码中生成它。

JAX-WS 不支持 WSDL 2.0 - 您可以使用 Apache Woden 解析它或使用 tinyWSDL 解析/生成。 http://ws.apache.org/woden/ http://sourceforge.net/projects/tinywsdl/

还有 java WADL 项目可以使用 WADL(不能发布超过 2 个链接)

干杯,

D.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 2016-12-16
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多