gpt4 book ai didi

java - Java 中的 Web 服务

转载 作者:数据小太阳 更新时间:2023-10-29 01:52:36 25 4
gpt4 key购买 nike

您在开发 Java 项目时通常使用什么来连接 Web 服务?

有不同的 API 可以完成这项工作。我从不同的书籍和教程中了解到:JAX-WS、JAXB、JAXM、JAXR、JAX-RPC、Axis 等。

我想知道您到底在用什么,用了多少?如果您愿意,可以将此作为一项调查:)

最佳答案

要回答您的问题,我们首先需要区分您列出的工具。

JAX-WS、JAXB、JAXM、JAXR、JAX-RPC 是与 XML 和 Web 服务相关的 API,而 Axis 1 和 2 是零个、一个或多个这些 API 的实现,具体取决于版本。

JAX-B 1 和 2 是 XML 到对象绑定(bind) API,JAX-WS 是基于 WSDL 和 SOAP 的 Web 服务 API,是 JAX-RPC 的前身,JAX-M 是较旧的 XML 消息传递 API,而 JAX-R 是用于与 UDDI 和 ebXML 等注册中心交互的抽象 API。

来自 Java.net JAX-RPC 页面:

The JAX-RPC expert group has wide industry participation with Sun Microsystems as the EG lead. The initial specification (JAX-RPC 1.0) was JSR-101 and was released in June 2002. A maintenance release followed in October 2003 providing better integration with JAXB 1.0 as well as better support for doc/literal.

The next version of the spec was renamed from JAX-RPC 2.0 to JAX-WS 2.0 and is being developed as JSR-224; this release will address a number of additional requirements in the area, and will increase the synergy between the JAXB and JAX-WS specifications. You can access the JAX-WS project page here.

自从 JAX-B 1.0 和 JAX-RPC 1.0 以来,SOAP 堆栈已经取得了长足的进步,我建议远离 Axis 1.0 和 XFire(如果我没记错的话,它们甚至没有实现 JAX-RPC 1)。有许多 SOAP 堆栈实现了较新的 API(JAX-WS 2.x 和 JAX-B 2.x)。

正如其他人所提到的,Axis 2、JAX-WS RI 和 CXF 都是有效的选择。这些 SOAP 堆栈要成熟得多,并且支持许多现代 WS-* 规范。

请注意有关使用 IDE 自动生成客户端代码的注释。虽然我大力支持分别从 XSD 和 WSDL 生成 XML 数据绑定(bind)代码和 JAX-WS 接口(interface),但我提醒您使用 IDE 中的内置向导来执行自动生成。如果您在一个拥有多个开发人员的团队中工作,或者计划修改生成的代码,您应该考虑这种方法的可维护性。

如果您有多个开发人员,有时他们中的一个会使用不同版本的自动生成工具、不同的 IDE,或者他们的工具中有不同的配置。此外,如果您从向导自动生成代码,则由开发人员记住他们是如何生成代码的,以备将来您需要重新生成代码时使用。如果您更改 XSD 并且不记得上次自动生成时的配置,则生成的代码可能与整个程序中已使用的现有代码不一致。

如果您打算修改生成的代码,请确保您只需要修改一次,并且从那时起您可以轻松地手动维护代码或定期将重新生成的代码与您的修改合并。

这两个问题都可以通过在构建过程中编写代码生成脚本来避免。 JAX-WS 和 JAX-B 都带有 Ant 任务和/或 Maven 2 插件,它们易于在您的构建中使用。认真对待这些警告,因为我已经看到多个项目在需要修改 5 年前由一名已离开公司的员工生成的代码时遇到这些问题。

我最后要提醒的是,当允许工具从您的 WSDL 自动生成您的 Web 服务接口(interface)时要小心。 JAX-WS RI WSDL2Java 工具喜欢在生成的接口(interface)中放置指向 WSDL 的硬编码路径。我认为您应该自动生成一次接口(interface),然后删除硬编码的 URL 和 QName 引用,以使该接口(interface)适用于实现该接口(interface)表示的 WSDL 绑定(bind)的所有 Web 服务,而不仅仅是您的一个端点WSDL 描述。

关于java - Java 中的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/246134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com