`

Web 服务提示与技巧: JAX-RPC 与 JAX-WS 的比较

 
阅读更多
JAX-WS 2.0 是 JAX-RPC 1.1 的后续版本。本文将引出对这两个 Java™ Web 服务编程模型进行比较的一系列文章。
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->

引言

Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java™ 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规范的 Java Community Process (JCP) 人员认识到需要对其进行一些调整,调整的结果就是 JAX-RPC 1.1。该规范使用大约一年之后,JCP 人员希望构建一个更好的版本:JAX-RPC 2.0。其主要目标是与行业方向保持一致,但行业中不仅只使用 RPC Web 服务,还使用面向消息的 Web 服务。因此从名称中去掉了“RPC”,取而代之的是“WS”(当然表示的是 Web 服务)。因此 JAX-RPC 1.1 的后续版本是 JAX-WS 2.0——Java API for XML-based Web services。

哪些内容保持不变?

在列出 JAX-RPC 1.1 和 JAX-WS 2.0 的差异前,我们应该首先讨论一下二者的相同之处。

  • JAX-WS 仍然支持 SOAP 1.1 over HTTP 1.1,因此互操作性将不会受到影响,仍然可以在网上传递相同的消息。
  • JAX-WS 仍然支持 WSDL 1.1,因此您所学到的有关该规范的知识仍然有用。WSDL 2.0 规范已经接近完成,但在 JAX-WS 2.0 相关工作结束时其工作仍在进行中。

区别何在?

  • SOAP 1.2

    JAX-RPC 和 JAX-WS 都支持 SOAP 1.1。JAX-WS 还支持 SOAP 1.2。

  • XML/HTTP

    WSDL 1.1 规范在 HTTP 绑定中定义,这意味着利用此规范可以在不使用 SOAP 的情况下通过 HTTP 发送 XML 消息。JAX-RPC 忽略了 HTTP 绑定。而 JAX-WS 添加了对其的支持。

  • WS-I Basic Profile

    JAX-RPC 支持 WS-I Basic Profile (BP) V1.0。JAX-WS 支持 BP 1.1。(WS-I 即 Web 服务互操作性组织。)

  • 新 Java 功能
    • JAX-RPC 映射到 Java 1.4。JAX-WS 映射到 Java 5.0。JAX-WS 依赖于 Java 5.0 中的很多新功能。
    • Java EE 5 是 J2EE 1.4 的后续版本,添加了对 JAX-WS 的支持,但仍然支持 JAX-RPC,这可能会对 Web 服务新手造成混淆。
  • 数据映射模型
    • JAX-RPC 具有自己的映射模型,此模型大约涵盖了所有模式类型中的 90%。它没有涵盖的部分映射到了 javax.xml.soap.SOAPElement
    • JAX-WS 的数据映射模型是 JAXB。JAXB 可保证所有 XML 模式的映射。
  • 接口映射模型

    JAX-WS 的基本接口映射模型与 JAX-RPC 的区别并不大,不过二者之间存在以下差异:

    • JAX-WS 的模型使用新的 Java 5.0 功能。
    • JAX-WS 的模型引入了异步功能。
  • 动态编程模型
    • JAX-WS 的动态客户机模型与 JAX-RPC 的对应模型差别很大。很多更改都是为了认可行业需求:
      • 引入了面向消息的功能。
      • 引入了动态异步功能。
    • JAX-WS 还添加了动态服务器模型,而 JAX-RPC 则没有此模型。
  • 消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)

    JAX-WS 通过 JAXB 添加了对新附件规范 MTOM 的支持。Microsoft 从来没有给 SOAP 添加附件规范;但似乎大家都支持 MTOM,因此应该能够实现附件互操作性。

  • 处理程序模型
    • 从 JAX-RPC 到 JAX-WS 的过程中,处理程序模型发生了很大的变化。
    • JAX-RPC 处理程序依赖于 SAAJ 1.2。JAX-WS 处理程序依赖于新的 SAAJ 1.3 规范。

在本文剩下的篇幅中,我们将讨论 SOAP 1.2、XML/HTTP、WS-I Basic Profiles 和 Java 5。上面的其余五个部分将分别在本系列技巧文章中单独讨论。

SOAP 编码
SOAP 编码已经在 Web 服务社区失宠了。WS-I Basic Profile 不支持它。因此,作为 Java Web 服务的最新版本的 JAX-WS 已不允许使用 SOAP 编码。JAX-RPC 支持 SOAP 编码,因此,如果真的必须使用采用 SOAP 编码的消息,则请仍然使用 JAX-RPC。

SOAP 1.2

从编程模型的角度而言,SOAP 1.1 和 SOAP 1.2 之间并没有太多的差异。作为 Java 程序员,您只会在使用处理程序时遇到这些差异,我们将在以后的技巧文章中对如何处理这种情况进行讨论。SAAJ 1.3 已更新以支持 SOAP 1.2。

XML/HTTP

与 SOAP 1.2 的更改类似,从编程模型的角度而言,SOAP/HTTP 和 XML/HTTP 消息之间并没有太多的差异。作为 Java 程序员,您只会在使用处理程序时遇到这些差异,我们将在以后的技巧文章中对如何处理这种情况进行讨论。HTTP 绑定具有自己的处理程序链和自己的一组消息上下文属性。

WS-I Basic Profiles

JAX-RPC 1.1 支持 WS-I Basic Profile (BP) 1.0。从那时起,WS-I 人员就完成了 BP 1.1(以及关联的 AP 1.0 和 SSBP 1.0)的开发。这些新概要阐明了一些小要点,更明确地定义了附件。JAX-WS 2.0 支持这些较新的概要。在大部分情况下,其间的差异并不会影响 Java 编程模型。不过附件除外。WS-I 不仅处理了有关附件的一些问题,而且还定义了自己的 XML 附件类型:wsi:swaRef。

很多人都被这些概要搞糊涂了。为了弄清楚其间的问题,将需要了解一下其相关历史。

WS-I 的第一个基本概要 (BP 1.0) 在阐明各个规范方面做得非常不错,但它并不完美。尤其对 SOAP with Attachments (Sw/A) 的支持仍然相当不明确。在第二个工作循环中,WS-I 人员将附件从基本概要 (BP 1.1) 中分离出来,并对第一版中一些没有讨论的内容进行了补充。当时他们还添加了两个互不包括的基本概要补充文档:AP 1.0 和 SSBP 1.0。AP 1.0 是附件概要 (Attachment Profile),描述如何使用 Sw/A。SSBP 1.0 是简单 SOAP 绑定概要 (Simple SOAP Binding Profile),描述并不支持 Sw/A 的 Web 服务引擎(如 Microsoft 的 .NET)。WS-I 所提供的其他概要文件都是以这些基本概要文件为基础构建的。

Java 5

对 Java 语言进行了一系列更改。JAX-WS 依赖于:Annotation、通用函数和执行程序。我们将在后续的技巧文章中具体讨论 JAX-WS 如何依赖于这个新功能。有关 Java 的这些新功能的信息,请参见参考资料 中的 Java 5 链接。

总结

JAX-WS 2.0 是 JAX-RPC 1.1 的后续版本。其中有些内容保持不变,但大部分编程模型都或多或少有些不同。本技巧文章中介绍的主题将在一系列技巧文章中展开讨论,这个系列的文章对 JAX-WS 和 JAX-RPC 间的区别进行了详细的讨论,我们将在随后的数月中陆续发布。大致看来,可能会因为以下这些原因而决定从 JAX-RPC 迁移到 JAX-WS,或保持不变。

希望继续使用 JAX-RPC 1.1 的原因:

  • 如果您希望继续使用现有的东西,JAX-RPC 将在今后一段时间内继续得到支持。
  • 如果您不希望升级到 Java 5。
  • 如果您希望发送采用 SOAP 编码的消息或创建 RPC/encoded 样式的 WSDL。

升级到 JAX-WS 2.0 的原因:

  • 如果您希望使用新的面向消息的 API。
  • 如果您希望使用 MTOM 发送附件数据。
  • 如果您希望通过 JAXB 更好地支持 XML 模式。
  • 如果您希望在 Web 服务客户机中采用异步编程模型。
  • 如果您需要使用能够处理 SOAP 1.2 消息的客户机或服务。
  • 如果您希望在 Web 服务中消除对 SOAP 的需求,而直接使用 XML/HTTP 绑定。
  • 如果您喜欢使用领先的尖端技术。


参考资料

学习


获得产品和技术

  • 使用 IBM 试用软件 开发您的下一个项目,可直接从 developerWorks 下载这些试用软件。


作者简介

Russell Butek 是 IBM 的一名 SOA 和 Web 服务顾问。他曾是 IBM WebSphere Web 服务引擎的开发人员之一。他也是 JAX-RPC Java Specification Request (JSR) 专家组的成员。他参与了 Apache 的 AXIS SOAP 引擎的实现,并推动 AXIS 1.0 遵守 JAX-RPC。

Nick Gallardo 担任 IBM WebSphere 平台软件工程师,主要负责 Web 服务支持的各个方面。在此之前,他从事 IBM WebSphere 和 Tivoli 平台中其他方面的工作。Nick 于 2001 加入 IBM,此前他曾在德克萨斯州奥斯汀市两家不同的初创技术型公司从事开发工作。

分享到:
评论

相关推荐

    J2EE Web Services: XML SOAP WSDL UDDI WS-I JAX-RPC JAXR SAAJ JAXP

    J2EE Web Services: XML SOAP WSDL UDDI WS-I JAX-RPC JAXR SAAJ JAXP

    使用JAX-WS(JWS)发布WebService

    使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...

    jax-rpc soap头扩展 客户端,服务端例子

    jax-rpc soap头扩展 客户端,服务端例子 ws-tipjax2SOAPHandler.ear,ws-tip-extend.zip 官方也有下载的

    JavaWeb服务:Axis2中的JAXB和JAX-WS

    Axis2还支持针对Web服务配置的Java标准JAX-WS2.x,作为其自有的配置技术的替代选择。DennisSosnoski将继续他的JavaWeb服务系列,向您演示如何将这两种Java标准用于Axis2,并讨论Axis2对这些标准的当前支持存在哪些...

    java webservice 详细开发示例介绍

    早期的基于 SOAP 的 JAVA 的 Web 服务规范 JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS规范取代,JAX-WS 是JAX-RPC 的演进 版本,但 JAX-WS 并不完全向后兼容 JAX-RPC,二者最大的区别就是...

    Spring 实现远程访问详解——rmi

    6. JAX-WS:Spring通过JAX-WS为远程Web服务提供支持(the successor of JAX-RPC, as introduced in Java EE 5 and Java 6)。 7. JMS:远程访问通过类JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS的...

    Java EE 6 规范

    •JAX-RPC 1.1 •JAX-WS 2.2 •JAX-RS 1.1 •JAXB 2.2 •JAXR 1.0 •Java EE Management 1.1 •Java EE Deployment 1.2 •JACC 1.4 •JASPIC 1.0 •JSP Debugging 1.0 •JSTL 1.2 •Web Services Metadata 2.1 •JSF...

    wsdl和uddi的资料

    介绍wsdl和uddi的例子 快下呀,我没积分了

    JAVA的WebService支持CXF与SAAJ第三版

    包括JAX-WS、JAX-RS规范、数字证书、MTOM附件传输、异步调用、异常处理、使用Axis+Spring解决RPC/Encode的问题向旧规范JAX-RPC的兼容,第三版版教程在最一开始分别介绍了JAVA中的三个Web服务规范,中间的附件处理...

    javaee7-samples:JAVA EE 7 课程演示

    (删减)JAX-RPC 1.1 - - JAX-WS 2.2a - -项目-邮件列表 JAXB 2.2 - JSR 222 -项目-邮件列表 Web 服务 1.4 - JSR 109 Web 服务元数据 2.1 - JSR 181 JAX-RS 2.0 - JSR 339 -项目-邮件列表- Jersey - @gf_jersey - ...

    WebService大讲堂之Axis2系列教程

    Axis2是目前比较流行的WebService引擎。...本课程站在初学者角度介绍了Axis2的大多数常用的功能,例如,以多种方式编写和发布WebService、JAX-RPC、JAX-WS、复杂类型传输、WebService会话管理、Axis2模块等

    java11新特性.zip

    JAX-WS(也就是基于XML的Web服务的JavaAPI,JAXBXML绑定,JAX-WS允许开发者可以选择RPC- oriented或者message-oriented来实现自己的webservice) 2. JAF(也就是JavaBeans激活框架,一个专用的数据处理框架,它...

    Java_EE_6规范中文版

    6.10 Java 连接器体系结构标准 6.11 Java EE Web服务1.3标准 6.12 JAX-RPC 1.1标准 6.13 JAX-WS 2.2 标准 6.14 JAX-RS 1.1标准 6.15 JAXB 2.2 标准 6.16 JAXR 1.0 标准 6.17 API 1.1标准 6.18 API 1.2 标准 6.19 ...

    Spring中文帮助文档

    2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到...

    Spring API

    2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到...

    webservice Axis2教程

    本课程站在初学者角度介绍了Axis2的大多数常用的功能,例如,以多种方式编写和发布WebService、JAX-RPC、JAX-WS、复杂类型传输、WebService会话管理、Axis2模块等。本课程共分为两部分,其中第一部分为Axis2基础知识...

    XML与Webservice实用参考

    发现介绍开源的资料太多了,基础知识反而少有关注,最近闲来无事,将多年工作中用到的比较实际的xml与webservice基础东西讲一些,基本的都有谈到,但ppt中分类不方便,因此流水账似地覆盖知识点。有空再写别的部分,...

    Manning.Spring.in.Action.4th.Edition.2014.11.epub

    15.5.2. Proxying JAX-WS services on the client side 15.6. Summary Chapter 16. Creating REST APIs with Spring MVC 16.1. Getting REST 16.1.1. The fundamentals of REST 16.1.2. How Spring supports REST ...

Global site tag (gtag.js) - Google Analytics