【问题标题】:Random questions on JAX-WS and JAX-RPC compatibilities关于 JAX-WS 和 JAX-RPC 兼容性的随机问题
【发布时间】:2015-04-01 12:33:49
【问题描述】:
  1. 我们有一个在旧版本的应用服务器上运行的 Web 服务。这个旧的应用程序服务器在 JAVA EE 1.4 上运行。它的客户端在另一台服务器上,也运行在相同版本的应用服务器上。

  2. 升级我们的应用服务器的行动已经开始。新版本现在将在 Java EE 6 上运行。问题是,客户端仍将在旧版本上运行。它还能访问现在将在 Java EE 6 上运行的 Web 服务吗?

如果是#2 的答案,我在下面有一个后续问题

  1. 我们的 Web 服务现在将使用 JAX-WS 创建。这是否意味着我们应该将客户端类生成为 JAX-RPC?让在旧版本中运行的客户端能够访问它?如果是,如何?

换个说法,如果您有 JAX-WS Web 服务,您如何生成 JAX-WS 客户端以及如何生成 JAX-RPC 客户端?我做了一些初步研究,他们似乎是以同样的方式完成的,我不确定这是否正确。我很困惑。

谢谢

【问题讨论】:

  • 您只需使用正确的工具完成正确的工作:使用wsimport 处理 jax-ws wsdl; wsdl2java 用于 rpc/编码的 wsdl。根据目标 web 服务使用适当的存根

标签: web-services jax-ws java-ee-6 jax-rpc


【解决方案1】:

既然您提到了 J2EE 1.4,我猜测 Web 服务是基于 JAX-RPC 1.x 标准的。由于基于 Java EE 6 的 Web 服务基于 JAX-WS,我建议使用 wsimport 命令生成客户端存根,方法是使用新服务中的 WSDL 来生成存根类。

如果您想深入了解并且应该始终参考 JAX-WS 规范文档here(请阅读第 4 章 - 客户端 API)

【讨论】:

  • 如果客户端存根是从 JAVA EE 6 生成的,那么部署在 J2EE 1.4 中的客户端如何能够访问它?
  • 哦。那是不可能的。我想我错过了您提到的关于客户端仅限于 J2EE 1.4 的观点。如果您想解耦 WS 客户端实现 (1) 使用 POX (plain old XML) 来调用您的 JAX-WS 端点,我可以考虑其他几个选项 - 不过这可能需要一些工作 (2) 公开您的 WS使用 REST 的功能(JAX-RS 1.0 支持是 Java EE 6 的一部分)。这样,您可以使用 HTTP 库来简单地调用您的 REST 端点——另一种解耦客户端和服务器的方式
【解决方案2】:

服务消费者(客户端)和服务提供者技术是独立的。您可以(在大多数情况下)拥有 JavaEE6/JAX-WS Web 服务提供者,但在技术上仍然使用 JAX-RPC 客户端(就此而言,客户端可能甚至没有用 Java 实现!)。唯一的技术障碍可能是您的服务提供者使用 JAX-RPC 无法处理的 SOAP 1.2 构造,但我怀疑如果您严格迁移/升级提供者应用程序,情况并非如此。

一些应用服务器仍然支持 JAX-RPC,即使它现在(JavaEE 5 和 6)对于兼容的应用服务器来说是可选的实现。

我个人建议在升级这些应用程序/应用服务器时将客户端更新为 JAX-WS。我认为他们应该与升级后的 Web 服务提供者一起使用而无需更改——只要在升级该应用程序时服务提供者 WSDL 不会改变(尽管如果重新生成的 WSDL 存在细微差异,您可能必须重新生成它们—— JAX-RPC 中的 marshal/unmarshal 技术是出了名的脆弱)。

-SH

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多