jax-ws 2.0 是 jax-rpc 1.1 的后续版本。本文将引出对这两个 java™ web 服务编程模型进行比较的一系列文章。
jax-ws 2.0 是 jax-rpc 1.1 的后续版本。本文将引出对这两个 java™ web服务编程模型进行比较的一系列文章。
引言
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
从编程模型的角度而言,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 绑定。
- 如果您喜欢使用领先的尖端技术。
闽公网安备 35060202000074号