5

当使用Eclipse时,我能够使用JAX-WS注释(例如。@Web服务)不包括任何外部依赖项,但我不能对JAX-RS注释(例如。@路径). 我看了看我明白了javax.ws.rs文件不是JDK的一部分。为什么JAX-WS是JDK的一部分而JAX-RS不是?其次,如果我在GlassFish或WildFly服务器上部署一个带JAX-WS注释的应用程序,服务器是使用一个众所周知的WebService堆栈来运行应用程序(例如Metro)还是使用它自己的实现?

2个答案2

重置为默认值
5

JAX-WS:XML Web服务的Java API

让我们回到2006年。JavaSE6发布时引入了许多新功能。

引用Java SE 6规范(JSR 270型),关于Java SE 6中引入的功能:

JavaSE6的功能集在很大程度上是由一组主题驱动的。

主题描述了发布的主要焦点。有些主题是相当抽象的指导原则;其他更具体的是,它们确定了特定的问题领域、重要的新功能集或特定的目标市场细分。

[...]

  • XML和Web服务:最初提出的JavaSE5版本旨在包括一个完整的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.将定义生成完全可移植客户端的机制。

JavaSE6包含JAX-WS 2.0组件,引入了在JavaSE.Quoting中创建基于SOAP的web服务的可能性这篇文章来自Oracle:

Java平台Standard Edition 6(Java SE 6)最令人兴奋的新特性之一是支持Java API for XML Web Services(JAX-WS)2.0版。JAX-WS 2.0是新重组的web服务API堆栈的中心[…]。

尽管JAX-WS在Java平台企业版5(Java EE 5)的开放源码世界中找到了它的主阵地,并被设计用于在这种环境中取代基于XML的RPC(JAX-RPC)的Java API,但您甚至可以在不接触企业服务器的情况下重用大部分功能[…]

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

当您运行应用程序时,JavaSE6平台有一个小型web应用程序服务器,它将发布web服务。[...]

JAX-RS:RESTful Web服务的Java API

JAX-RS随后于2008年问世。它最初由JSR 311号文件它包含在Java EE 6伞形规范中(JSR 316钢).

JAX-RS的第二个版本于2013年推出,由JSR 339号文件它包含在JavaEE7总括规范中(JSR 342号文件).

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

Java SE 7(JSR 336号文件)和Java SE 8(JSR 337号文件)规范中没有包含JAX-RS组件。然而,JAX-RS应用程序可以在JavaSE环境中发布(使用RuntimeDelegate(运行时间委派))JAX-RS实现也可以支持通过JAX-WS发布。

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

2

JAX-RS(RESTfulWeb服务的Java API)实际上是一个定义REST支持的规范。规范是通过Java规范请求(JSR)311定义的。

简而言之,该规范定义了所有兼容JAX-RS实现都应该使用的API和一些注释。因此,规范本身被创建JAX-RS实现的JAX-RS实施者(如Jersey)使用,也被程序员(最终用户)使用,他们可以以相同的方式使用任何兼容的JAX-SS实现。

为了使用JAX-RS,您需要JAX-RS的实现。因此,如果JDK中没有包含JAX-RS实现,则可以使用外部实现。JDK中应该包含或不包含哪些实现的实际决定是复杂的,一些有趣的标准可能是实现的成熟度和可接受性,以及使用频率。(一个很少使用的功能可以额外下载。)

此答案使用此处提供的信息:

http://www.vogella.com/tutorials/REST/article.html#restjersey网站

对于问题的第二部分:服务器使用捆绑的实现。例如,Glassfish将Metro用于JAX-WS,但这取决于服务器。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.