Metro与Java的JAX-WS相比有何优劣?

30

Java的JAX-WS和Metro有什么区别?它们是相同的还是两个不同的JAX-WS实现?

根据我的研究,JAX-WS已经成为JDK 6的一部分。然而,JAX-WS并不随JDK的标准捆绑包一起提供,因此我寻找了一个Java EE jar文件。然而,Oracle没有提供编译后的Java EE jar文件,而是提供了一个Java EE服务器Glassfish。

我能够在Glassfish上运行我的Web服务。Glassfish使用哪个JAX-WS实现?由于它托管在Oracle上,我认为它使用的是Java的JAX-WS实现,该实现据说是JDK 1.6的一部分?我的假设是否正确?另外,为了运行基于JAX-WS的Web服务,我需要下载JAX-WS jars。我找到了Metro。但是在它的页面上,我看到Metro的链接是Glassfish的子链接。所以我现在感到困惑。Glassfish是否使用Metro?还是Glassfish使用Java的JAX-WS?

Metro和Java的JAX-WS是相同的吗?


这个问题已经被浏览了400多次,但没有一个赞!大大的加一!! - Muhammad Gelbana
2个回答

32

JAX-WS 是一个 API,而 Metro 是 JAX-WS API 的参考实现;它们都来自 Sun/Oracle,因此是标准的。你可以把它们看作是一个接口(JAX-WS)和一个实现该接口的类(Metro),只不过在更高的层次上。Glassfish 也使用 Metro 作为 JAX-WS 的实现。

需要注意的是,Metro 还包含了 JAXB 和其他 API 的实现。

另外,SOAP Web Service 已经有点过时了;新的趋势是使用 REST Web Service;JAX-RS(标准的实现有 Jersey、Restlet 或 CXF 等多种实现方式)。


2
@Arci JDK 包括 JAX-WS API 和 JAX-WS API 的 Metro 实现。 - Random42
4
哦……谢谢!我现在明白了。我知道这不是我问题的一部分,但是当你说 JDK 时,它并不意味着它包含了所包含类的实现,对吗?因为我在 JDK 1.6 下在 Eclipse 上运行我的 Tomcat,但我仍然需要在 Tomcat 上包含 JAX-WS jars 才能运行基于 JAX-WS 的 Web 服务。如果 JAX-WS API 和 Metro 实现都已经包含在 JDK 1.6 中,那么为什么我仍然需要添加 JAX-WS jars?如果我不在 Tomcat 上添加来自 Metro 的 jars,我会得到一个错误。 - Arci
1
@Arci,这是因为Tomcat没有JAX-WS的实现(就像Glassfish一样);您需要将这些库包含在Tomcat库文件夹中,以便Tomcat可以直接使用它们。 - Random42
@MuhammadGelbana:感谢关心!是的,JAX-WS在JDK中,但不在JRE中。Tomcat使用JRE而不是JDK。因此,为了在Tomcat上运行JAX-WS,必须将所需的jar文件与项目捆绑在一起(位于lib文件夹中)。 :) 我理解得对吗? - Arci
4
@m3th0dman关于SOAP vs. REST的评论是主观的。很多企业仍然使用SOAP。SOAP vs. REST vs. REST/JSON的使用在很大程度上取决于你所处的环境。这里没有好与坏之分。 - David Brossard
显示剩余5条评论

2
根据Metro主页的介绍,"Metro由JAX-WS参考实现项目和Web服务互操作技术项目组成。"
Web服务互操作技术(WSIT)(以前称为Tango项目)包括以下实现:
  • TCP上的SOAP
  • WS-AtomicTransactions/Coordination
  • WS-MetadataExchange
  • WS-Policy (https://github.com/javaee/metro-policy)
  • WS-ReliableMessaging
  • WS-SecureConversation
  • WS-Security
  • WS-SecurityPolicy
  • WS-Trust
请查看此答案以获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接