WebService学习手册Christian2010-11-11第2页共46页第3页共46页目录目录文档说明...........................................................................................................................................41WebService简介.........................................................................................................................41.1什么是WebService?..............................................................................................41.2WebService用到的技术..........................................................................................41.3主流WebService框架.............................................................................................51.3.1Axis...................................................................................................................51.3.2Xfire..................................................................................................................61.3.3CXF...................................................................................................................61.3.4主流WebService的比较.................................................................................72开发篇.......................................................................................................................................82.1Xfire..........................................................................................................................82.1.1下载Xfire.........................................................................................................82.1.2使用Xfire开发WebService的基本步骤......................................................92.1.3具体应用.........................................................................................................132.1.4Xfire与spring集成.......................................................................................42第4页共46页文档说明本文详细介绍了如何用Xfire,CXF,Axis开发Web服务.Webservice的底层原理并不在本文研究的范围内。所有示例都在sample目录里。这个学习手册的目的是只要仔细阅读本文档以及示例代码,任何对webservice没有基础的程序员都可以用这三个框架编写webservice接口。但前提是需要动手做每一个示例。1WebService简介1.1什么是WebService?从表面上看,Webservice就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。我们把调用这个Webservice的应用程序叫做客户。另一种更精确的解释:Webservices是建立可互操作的分布式应用程序的新平台。Webservice平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Webservice,只要我们可以通过Webservice标准对这些服务进行查询和访问。Webservice平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Webservice平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。在传统的分布式系统中,基于界面(interface)的平台提供了一些方法来描述界面、方法和参数(译注:如COM和COBAR中的IDL语言)。同样的,Webservice平台也必须提供一种标准来描述Webservice,让客户可以得到足够的信息来调用这个Webservice。最后,我们还必须有一种方法来对这个Webservice进行远程调用。这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。1.2WebService用到的技术为了实现平台无关,实现独立的访问Web服务,业界制定了一系列技术标准,下面是一些重要的技术:第5页共46页1.XML可扩展的标记语言(XML)是Webservice平台中表示数据的基本格式。它的内容与表示的分离十分理想,除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。2.SOAPWebservice建好以后,你或者其他人就会去调用它,简单对象访问协议(SOAP)提供了标准的RPC方法来调用Webservice,SOAP规范定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP,SOAP也是基于XML,XML是SOAP的数据编码方式。3.WSDL你会怎样向别人介绍你的Webservice有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Webservice的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的Webservice的时候,他们的工具(如VisualStudio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Webservice。解决方法是:用机器能阅读的方式提供一个正式的描述文档。Webservice描述语言(WSDL)就是这样一个基于XML的语言,用于描述Webservice及其函数、参数和返回值。因为是基于XML的,所以WS是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Webservice生成WSDL文档,又能导入WSDL文档,生成调用相应Webservice的代码。1.3主流WebService框架1.3.1AxisAxis(ApacheExtensibleInteractionSystem)是一款开源的WebService运行引擎,它是SOAP协议的一个实现,其本身来源于Apache的另一个项目ApacheSOAP。Axis分为1.x系列和2系列,两个系列体系结构和使用上有较大的区别,相对而言,Axis1.x更加稳定,文档也比较齐全.第6页共46页1.3.2XfireXFire是下一代的javaSOAP框架。XFire提供了非常方便的API,使用这些API可以开发面向服务(SOA)的程序。它支持各种标准,性能优良(基于低内存的STAX模型)。支持多个重要的WebService标准,包括SOAP、WSDL、WS-IBasicProfileWSAddressing、WS-Security等。高性能的SOAP栈。可选的绑定(binding)方式,如POJO、XMLBeansJAXB1.1、JAXB2.0、Castor和JiBX等。支持JSR181API。多种传输方式,如HTTP、JMS、XMPP、In-JVM等。灵活的接口。支持多个容器,如Spring、Pico、Plexus、Loom。支持JBI,参看servicemix项目()。客户端和服务器代码生成。1.3.3CXF1.3.3.1CXF的由来ApacheCXF项目是由ObjectwebCeltix和CodehausXFire合并成立的。ObjectwebCeltix是由IONA公司赞助、于2005年成立的开源JavaESB产品,XFire则是业界知名的SOAP堆栈。合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架,包括SOA服务创建,服务路由,及一系列企业级QoS功能。此次发布代表了ApacheCXF开发人员及社区用户一年的努力结果,并标志ApacheCXF软件的进一步成熟,成为实现SOA的优秀技术解决方案之一。2.1版本的CXF,已经是一个正式的Apache顶级项目。1.3.3.2CXF的功能CXF提供了一套创建SOA服务的基础设施框架,用户由此可以按照自己喜欢的编程模式,利用ApacheCXF提供的简单易用工具(包括Maven插件),创建适合SOA环境的任何WEB服务,包括SOAP/HTTP服务及REST/HTTP服务。ApacheCXF可扩展的插拔式架构不但支持XML消息格式和HTTP通信协议,而且还支持基于其他通信协议如IIOP和非XML消息格式如CORBACDL或JSON。主要功能列表如下:支持JAX-WS2.1,部署JAX-WS已经更新至JAX-WS2.1规范。JAX-RS0.6REST的初期部署基于服务框架。Javascript客户端生成和支持,SOAP基于于端点的可以有Javascript带着JSURL自动第7页共46页创建。CORBA的约束力来自Yoko,JAX-WS客户端/服务器能使IIOP与CORBA进程进行交互。支持JavatoWSDL、WSDLtoJava、XSDtoWSDL、WSDLtoXML、WSDLtoSOAP、WSDLtoService。支持XmlBeans运行库,允许数据模型使用XmlBeans。支持SOAP1.1&1.2、WSDL1&2、WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-IBasicProfile。支持JAX-WS、JAX-WSA、JSR-181、SAAJ。ApacheCXF提供方便的Spring整合方法,可以通过注解、Spring标签式配置来暴露WebServices和消费WebServices。1.3.4主流WebService的比较主流WebService框架.doc第8页共46页2开