用AXIS2开发WebService目录1.AXIS2简介.......................................................................................................................32.下载AXIS2.......................................................................................................................62.1AXIS2发行包.......................................................62.1.1标准二进制发行包................................................................................................62.1.2WAR发行包..........................................................................................................72.1.3源码发行包............................................................................................................82.1.4文档发行包............................................................................................................82.2下载AXIS2.........................................................82.3下载AXIS2的ECLIPSE插件............................................93.安装部署AXIS2.............................................................................................................123.1部署AXIS2到TOMCAT................................................123.2安装AXIS2的ECLIPSE插件...........................................144.编写WEBSERVICE程序...........................................................................................154.1创建服务程序.....................................................154.2打包服务.........................................................204.3部署服务.........................................................264.4创建C#的访问测试程序.............................................294.5在ECLIPSE中调试AXIS2服务程序.....................................335.遇到的其他问题.............................................................................................................375.1使用ORG.APACHE.COMMONS.LOGGING后不能正常打包AAR包....................375.2在使用AXIS2CODEGENERATOR时报JAVA.LANG.REFLECT.INVOCATIONTARGETEXCEPTION异常。375.3使用AXIS2CODEGENWIZARD1.2版的插件可由WSDL生成代码,但不能在C#客户程序中访问................................................................39本文介绍如何在eclipse3.2下用Axis2开发webservice,并将Axis2与自己的webservice部署在Tomcat6.0.18下,再通过在C#下写测试程序,来访问Tomcat下的webservice。1.AXIS2简介webservice是可以解决异构系统异构语言之间互通信问题,还可以做不同系统之间的数据交换。传统的异构系统异构语言之间互通方案有:Corba、DCOM、webservice。Corba太复杂,DCOM使用于微软平台,而webservice可跨平台实现非常简单。webservice通常使用SOAP(简单对象传输协议)作为实现机制,也就是XML-RPC的升级,也就是用XML来描述一个远程调用(RPC)的过程,用XML作为异构系统之间通信和数据交换语言。因为XML是跨平台的标准数据交换格式,所以在webservice中可以用XML来描述编程语言中的函数调用过程。webservice的实现有很多,如微软的DNA解决方案,IBM的SOA解决方案。在Java语言的实现工具有:apache-AXIS;C++的工具有:gsoap;C的工具有:AXIS2C;python的工具有:soappy等。ApacheAxis2项目是一个基于Java语言的Webservices系统服务和客户端的实现。为了从ApacheAxis1.0中获取教训,ApacheAxis2提供了一个完整的对象模型和模块化体系结构,这样可以很容易的添加功能以及支持一个新的与Webservices相关的说明和建议。Axis2可以让你很容易的执行以下任务:发送SOAP消息接收和处理SOAP消息从一个普通的Java类建立Webservice用WSDL来建立实现服务和客户端的实现类很容易的从一个服务来获取WSDL发送和接收带有附件的SOAP消息建立或者使用基于REST的Webservice建立或者使用从WS-Security,WS-ReliableMessaging,WS-Addressing,WS-Coordination和WS-AtomicTransaction获取优势的服务当新建议出现时,使用Axis2的模块化结构来很容易的加入对它的支持内部流程要理解Axis2并且知道它做了些什么,你必须对Webservices消息的生命周期有一个很好的认识。通常,它看起来如下图所示:发送应用程序建立原始SOAP消息,这是一个包含消息头和消息体的XML消息。如果系统需要使用例如WS-Addressing或者WS-Security之类的WS*建议,这个消息就会在离开发送者之前经过额外的处理。一旦消息准备好了,他就会借助一个特别的传输器发送出去,例如HTTP,JMS等等。消息沿着它的路径发送到接收者,接收者是借助传输监听器接收消息的。(换句话说,如果应用程序没有运行HTTP监听器,那么它就将不会接收HTTP消息)再者,如果消息是需要使用WS-Security或者其它建议的系统的一部分,那么为了检查凭证或者解密敏感信息,它需要一些额外的处理。最后,一个派发者决定这个消息发送到的指定应用程序(或者其它组件,例如Java方法),并且把它发送给这个组件。这个组件是一个完整的应用程序的一部分,这个应用程序是设计用来与这些来回发送的数据一起工作的。Axis2如何处理SOAP消息Axis2可以处理一次事务中的发送者和接收者双方的过程。从Axis2的角度看,结构如下:在一端,你有一个处理(发送或接收)消息的应用程序。在中间,你有Axis2,或者,你可以有Axis2。Webservices的价值在于收发双方(任何一方都可以是服务段或者客户端)甚至不需要在同一个平台上,更不需要运行同一个应用程序。假设Axis2在两边同时运行,过程如下:发送者建立SOAP消息。Axishandlers执行必要的操作,例如对相关消息进行WS-Security加密。传输器发送者发送消息。在接收端,传输监听者检测消息。传输监听者将消息传递给接收端的所有handler。一旦消息在“pre-dispatch”阶段处理完,它会被传递给派发者,然后被传给合适的应用程序。在Axis2中,这些行动被分解成“阶段”,以及几个预定义阶段,例如“pre-dispatch”,“dispatch”和“messageprocessing”,集成在Axis2中。每一个阶段是一组“handler”。Axis2可以让你来控制每个handler归属于哪个阶段,以及在一个阶段中各个handler的执行顺序。你也可以添加你自己的阶段和handler。Handler来自于可以被插入一个运行着的Axis2系统的模块。这些模块,例如提供WS-Security实现的Rampart,提供WS-ReliableMessaging实现的Sandesha,都是Axis2中的主要扩展机能。2.下载AXIS22.1Axis2发行包Axis2以多个发行包发行。你需要哪个视你所需决定。2.1.1标准二进制发行包如果你正在开发服务和应用程序,你需要Axis2标准二进制发行包。这个发行包包括所有必要的*.jar文件,以及很多便于开发用的脚本。它具有以下结构。Axis2标准二进制发行包目录的结构binaxis2.bataxis2.shaxis2server.bataxis2server.shjava2wsdl.batjava2wsdl.shwsdl2java.batwsdl2java.shsetenv.shlibactivation-1.1.jar...XmlSchema.jarrepositorymodulesmodules.listaddressing-1.1.mar...servicesservices.listversion.aar...samples...webapp...confaxis2.xmlLICENSE.txtREADME.txtNOTICE.txtINSTALL.txtrelease-notes.htmlbin目录包括一些有用的脚本。它们包括axis2.bat(或者axis2.sh),这个文件可以让你在不手工添加Axis2jar文件到类路径的情况下方便的执行Java命令;java2wsdl.bat(和.sh)和wsdl2java.bat(和.sh),它可以让你轻易的从一个WSDL文件生成Java代码,反之亦然;axis2server.bat(和sh),一个简易Web服务器,它可以让你早自己的应用程序中搭建Axis2的功能来发送接收消息。如所希望的,lib目录包含了所有必需的.jar文件。服务和模块放在repository目录。Axis2提供了一个WS-Addrssing的标准模块实现,你可以添加任何其它必要的模块到repository/modules目录,例如Rampart。Conf目录包括axis2.xml文件,它是全局部署描述。最后,示例目录包括了所有随Axis2一起发行的示例代码。2.1.2WAR发行包Axis2的WAR发行包中包含了axis2.war文件。这是个Axis2服务端按照一个J2EE应用程序的发布。它具有代码列表2所示结构。Axis2的WAR的目录结构axis