TL;DR
JAX-WS 适用于基于 XML 的 Web 服务,例如 SOAP。 JAX-RS 没有相同的限制。
JAX-WS 通常适用于通过明确定义的合同 (WSDL) 进行服务器到服务器的交互,并且通常当服务和客户端来自不同的组时。这是非常耗费资源的,因此对于网络或客户端设备功能不是最佳的客户端到服务器交互来说是不可行的。
JAX-RS 面向客户端到服务器的交互,尽管服务器到服务器是可以的。由于它几乎没有服务义务,因此可以根据客户的需求进行调整。
更多信息
JAX-RS API 仅提供代码优先方法,而 JAX-WS 允许代码优先(通常不推荐)和使用 WSDL 文件的合同优先(更普遍推荐)。
JAX-RS 2.0 引入了客户端 API,它是 HttpUrlConnection 的智能包装器,具有更多映射能力,JAX-WS 也是一个包装器,但它在参考实现中处理的数据只是 XML。
JAX-RS 的优势在于创建的 API 更易于在不同的浏览器和移动设备中创建和消化消息,即 JSON 结构。它没有引入信封的概念,而是使用 HTTP。它没有引入密码学或安全性,它使用 HTTPS。
JAX-WS 虽然它在 HTTPS 上运行以进行加密,但它使用 WS-SecurityPolicy 等提供安全性附加功能。此外,使用 WSDL 牢固地建立合同,并且可以使用 ESB(如 DataPower)在应用程序外部进行验证。
那么选择什么
JAX-WS 通常适用于通过明确定义的合同 (WSDL) 进行服务器到服务器的交互,并且通常当服务和客户端来自不同的组时。这是非常耗费资源的,因此对于网络或客户端设备功能不是最佳的客户端到服务器交互来说是不可行的。
JAX-RS 面向客户端到服务器的交互,尽管服务器到服务器是可以的。客户端和服务器之间唯一的合同义务是消息和请求标头。由于它几乎没有服务义务,因此可以根据客户的需求进行调整。
但是,使用 RESTful 服务 API 类似于进行 Ruby 和 Python 之类的元编程,这会将问题延迟到运行时,因为双方没有达成一致并在技术上强制执行的定义模式。因此,我不建议到处使用 RESTful 服务,但如果我能够控制这两个方面,我会推荐它,这通常发生在您构建使用静态 HTML/CSS/JS 的 Web 应用程序并与 RESTful 服务器进行对话时数据。