Introduction
原文链接:http://www-128.ibm.com/developerworks/webservices/library/ws-tip-jaxwsrpc.html
JAX-WS 2.0是JAX-RPC 1.1的后续版本。这篇文章介绍一系列这两种编程模型的对比:
介绍
Web服务已经出现了好长一段时间了。首先有的是SOAP。但是SOAP只是用来描述消息(message)是什么样的。然后就有了WSDL.但是WSDL没有告诉你怎么基于Java平台,来写web服务。然后紧跟着出现了JAX-RPC 1.0。使用了几个月后,国际开放组织JCP(Java Community Process(JCP( Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新Java技术规范、参考实现(RI)、技术兼容包(TCK)。Java技术和JCP两者的原创者都是SUN计算机公司。然而,JCP已经由SUN于1995年创造Java的非正式过程,演进到如今有数百名来自世界各地Java代表成员一同监督Java发展的正式程序。)写这个规范的人们意识到规范必须做些调整,所以就出来了JAX-RPC 1.1。差不多使用这个规范一年后,JCP的JAX-RPC规范制订者想要重新构建一个更好的版本:JAX-RPC 2.0。一个基本的目标就是跟行业的发展方向保持一致,但是行业又不是仅仅在做基于RPC的Web服务,他们也在做面向消息的web服务。所以说“RPC”从名称JAX-RPC中被删去了,取而代之的是“WS”(它当然是代表Web Service的意思)。因此,JAX-RPC 1.1的后续版本就是JAX-WS 2.0-基于XML的Web 服务的Java API。
什么保持不变
在我们详细说明JAX-RPC 1.1 跟JAX-WS 2.0之间的不同点之前,我们应该首先讨论下他们两者有哪些方面是相同的:
l JAX-WS仍然支持基于 HTTPSOAP1.1,所以说互操作性将不会受到影响。同样的消息仍然能够横跨传输线路流动。
l JAX-WS仍然支持WSDL1.1,所以说你之前学习的那个规范仍然是有用的。WSDL2.0规范就要接近完成了,但是在JAX-WS 2.0最终发布后WSDL1.1仍然能够正常使用。
有什么不一样
l SOAP 1.2
JAX-RPC 和JAX-WS都支持SOAP1.1,而JAX-WS也支持SOAP 1.2
l XML/HTTP
WSDL 1.1规范定义了一个HTTP绑定,通过这种方式你可以在不用SOAP时基于HTTP来发送XML消息。JAX-RPC忽略了HTTP绑定。JAX-WS增加了对它的支持。
l WS-I的Basic Profiles
JAX-RPC支持WS-I’s Basic Profile(BP)1.0,而JAX-WS支持BP1.1(WS-I是web服务互操作组织。)
l 新的Java特性
Ø JAX-RPC 映射到Java 1.4,JAX-WS映射到Java 5.0。JAX-WS依赖于许多在Java5.0中的新特性。
Ø Java EE 5,J2 EE 1.4的后续版本,增加了对JAX-WS的支持,但是它同样也保留了对JAX-RPC的支持,这样可能会把现在的Web服务的初学者弄糊涂。
l 数据映射模型
Ø JAX-RPC有它自己的数据映射模型,它大概涵盖了所有schema类型的90%。
那些它没有汲及到的都映射到了javax.xml.soap.SOAPElement。
Ø JAX-WS的数据映射模型是JAXB.JAXB承诺映射所有的XML schema。
l 接口映射模型
JAX-WS的基本接口映射模型跟JAX-RPC的有很大的不同;但是:
Ø JAX-WS的模型利用了Java 5.0的新特性。
Ø JAX-WS的模型进了异步功能。
l 动态的编程模型
Ø JAX-WS的动态客户端模型跟JAX-RPC的有很大的不同。许多的改变表明了行业需要:
ü 它引进了面向消息的功能。
ü 它引进了动态的异步功能。
Ø JAX-WS 也增加了动态的服务器模型,这个JAX-RPC是没有的。
l MTOM (Message Transmission Optimization Mechanism)
JAX-WS,通过JAXB,增加了对MTOM的支持,新的附件规范。微软从不买进带有附件的SOAP规范;但是可以看出来越来越多的MTOM支持,所以附件的互操作性应该会成为现实的。
l 处理器模型
Ø 从JAX-RPC到JAX-WS处理器模型有了相当多的改变
Ø JAX-RPC处理器依赖于SAAJ 1.2。JAX-WS处理器依赖于新的SAAJ(SOAP with Attachments API for Java)1.3规范。
在本文以下的内容里,我们将要讨论SOAP 1.2,XML/HTTP,WS-I Basic Profiles,还有Java 5.0.
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制定者就已经开发出来了BP 1.1(而且相关的AP 1.0跟SSBP 1.0).这些新的profiles阐明了一些小的观点,并且更加明显地定义了附件。JAX-WS2.0支持这些更新的profiles。对于大部分来说,它们存在的不同之处不影响Java编程模型。有个例外就是附件。WS-I还没有消除对附件存在的一些疑问,但是他们也定义了他们自己的XML附件类型:wsi:swaRef。
很多人被所有这些profiles搞得很困惑。你将需要一段时间来消除这些困惑。
WS-I的第一个basic profile(BP1.0)做了很好的工作来阐明不同的规范。但它不是完美的。而且特别是支持SOAP附件也仍然是不明确的。在他们的第二个迭代中,WS-I的BP制定者制定出来了baisic profile附件-BP 1.1-而且修正了一些在第一版本所遗漏的东西。在这点他们也增加了两个互斥的补充到basic profile:AP 1.0和SSBP 1.0。AP 1.0是附件框架(Attachment Profile),它描述了怎样使用Sw/A.SSBP 1.0是简单的SOAP绑定框架,它描述了一个不支持Sw/A(比如说微软的.net)的Web服务引擎。The remaining profiles that WS-I has and is working on build on top of those basic profiles.
Java 5
Java语言有很大的变化。JAX-WS依赖于:annotations,generics, 和 executors
总结
JAX-WS2.0是JAX-RPC 1.1的后续版本。有一些东西没有变化,但是在某种程度上这两种编程模型是不同的。总的看来,对于你为什么将要或者是将不会从JAX-RPC转移 到JAX-WS有一些原因。
想继续使用JAX-RPC 1.1的原因:
l If you want to stay with something that's been around a while, JAX-RPC will continue to be supported for some time to come.
l If you don't want to step up to Java 5.
l If you want to send SOAP encoded messages or create RPC/encoded style WSDL.
从JAX-RPC走进JAX-WS的原因:
l If you want to use the new message-oriented APIs.
l If you want to use MTOM to send attachment data.
l If you want better support for XML schema through JAXB.
l If you want to use an asynchronous programming model in your Web service clients.
l If you need to have clients or services that can handle SOAP 1.2 messages.
l If you want to eliminate the need for SOAP in your Web services and just use the XML/HTTP binding.
l If you like playing with leading edge technology.