为什么JAX-WS是JDK的一部分,而JAX-RS不是呢?

Aam*_*han 4 web-services jax-rs jax-ws java-ee

使用Eclipse时,我可以使用JAX-WS批注(例如@WebService),而无需包含任何外部依赖项,但是我不能对JAX-RS批注(例如@Path)进行相同的操作。我看了一下这个答案,我知道这javax.ws.rs不是JDK的一部分。为什么JAX-WS是JDK的一部分而JAX-RS不是呢?其次,如果我在GlassFish或WildFly服务器上部署带有JAX-WS注释的应用程序,该服务器是否使用众所周知的WebService堆栈来运行该应用程序(例如Metro)或它自己的实现?

cas*_*lin 5

JAX-WS:用于XML Web Services的Java API

让我们回到2006年。Java SE 6已发布,引入了许多新功能。

引用Java SE 6规范(JSR 270),以了解Java SE 6中引入的功能:

Java SE 6的功能集在很大程度上由一组主题驱动。

主题描述了发行的主要重点。有些主题是相当抽象的指导原则。其他的则更为具体,因为它们可以确定特定的问题区域,重要的新功能集或特定的目标市场领域。

[...]

  • XML和Web服务:最初提出的Java SE 5版本旨在包含完整的Web服务客户端堆栈。不幸的是,该工作未能在该发行版中及时完成,与此同时,XML和Web服务对社区中许多成员的重要性才有所提高。

[...]

JAX-WS 2.0规范的目标之一是准备将JAX-WS包含在将来的J2SE版本中(此版本后来更名为Java SE)。引用JSR 224

  • 包含在J2SE中: JAX-WS 2.0将准备将JAX-WS包含在将来的J2SE版本中。应用程序的可移植性是一个关键要求,JAX-WS 2.0将定义产生完全可移植客户端的机制。

Java SE 6包含JAX-WS 2.0组件,从而引入了在Java SE中创建基于SOAP的Web服务的可能性。引用Oracle的这篇文章

Java平台标准版6(Java SE 6)最令人兴奋的新功能之一就是支持2.0版的XML Web服务Java API(JAX-WS)。JAX-WS 2.0是新重组的Web服务API堆栈的中心。

尽管JAX-WS在Java平台的企业版5(Java EE 5)的开源世界中找到了自己的主要住所,并被设计为在这样的环境中代替基于XML的RPC的Java API(JAX-RPC)。在环境中,您可以重用许多功能,而无需接触企业服务器[...]

您可以使用JAX-WS来构建Web应用程序和Web服务,并结合新的基于XML的Web服务功能。[...]

运行该应用程序时,Java SE 6平台具有一个小型Web应用程序服务器,它将发布Web服务。[...]

JAX-RS:RESTful Web服务的Java API

JAX-RS于2008年问世。它最初是由JSR 311定义的,并已包含在Java EE 6总体规范(JSR 316)中。

JAX-RS的第二个版本于2013年发布,由JSR 339定义,并已包含在Java EE 7总体规范(JSR 342)中。

JAX-RS以HTTP为中心,并且JAX-RS应用程序经常部署在servlet容器上。

Java SE 7(JSR 336)和Java SE 8(JSR 337)规范不包含JAX-RS组件。但是,JAX-RS应用程序可以在Java SE环境中发布(使用RuntimeDelegate),并且JAX-RS实现也可以支持通过JAX-WS进行发布。

在Java SE中包括JAX-RS也意味着包括该规范的实现。它使Java SE环境中的事情变得更加复杂,但是在容器将为您提供实现的Java EE环境中完全可以接受。例如,GlassFish为您提供Jersey(参考实现),而JBoss / WildFly为您提供RESTEasy。