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,这些 API 更易于在不同的浏览器和移动设备中创建和消化消息,即 JSON 结构。它没有引入信封的概念,而是使用HTTP。它没有引入加密或安全性,而是使用HTTPS。
JAX-WS虽然它在HTTPS上运行以进行加密,但使用WS-SecurityPolicy等为安全性提供了补充。此外,使用 WSDL 牢固地建立了合同,并且可以使用 DataPower 等 ESB 在应用程序外部进行验证。
那么选择什么
JAX-WS 通常面向服务器到服务器与明确定义的协定 (WSDL) 的交互,通常是当服务和客户端来自不同的组时。它非常耗费资源,因此对于网络或客户端设备功能欠佳的客户端到服务器交互是不可行的。
JAX-RS 面向客户端到服务器交互,尽管服务器到服务器是可以的。客户端和服务器之间唯一的合同义务是消息和请求标头。由于它几乎没有服务义务,因此可以根据客户的需求进行调整。
然而,使用RESTful服务API类似于做像Ruby和Python这样的元编程,这会将问题延迟到运行时,因为双方没有商定的定义模式,并且在技术上强制执行。因此,我不推荐RESTful服务无处不在,但是如果我能够控制双方,我会推荐它,这通常发生在您构建一个使用静态HTML / CSS / JS并与RESTful服务器进行数据通信的Web应用程序时。