一、Axis2简介
1.1 介绍Axis2
Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP withAttachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本可以从 http://ws.apache.org/axis/index.html下载。
下载下来后直接解压即可用了。下图是AXIS核心引擎的体系结构图:
整个AXIS项目包括以下几个部分:
- 消息流子系统
消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。处理程序是一个处理请求、响应和故障流的对象。处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
- 传输框架子系统
提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
- 数据编码子系统
AXIS完全按照 XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
- 其他
AXIS完全支持 WSDL 以及日志记录、出错以及故障处理机制。它同时提供一些工具用来讲WSDL文档转换成客户端的调用框架以及根据类来产生WSDL定义文档。
AXIS目前版本支持的标准是:W3C SOAP1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java APIfor XML-Based RPC)1.0。
1.2 开发项目中如何选择使用Axis2和其它的WebService
² 如果你的应用程序需要支持多语言即有C++, .net, Java,你应该选择Axis2。
² 如果应用程序是遵循 Spring 哲学路线的话,ApacheCXF 或者Spring WS是一种更好的选择,特别对嵌入式的 Web Services 来说。
二、搭建环境
第一步:
打开Eclipse,建立一个标准的Dynamic Web Project
第二步:
建完工程后,把Axis2-1.4/Axis2-1.4.1解压开来的目录下的axis2-web(如下图),整个拷入你工程的WebContent目录下:
第三步:
把Axis2-1.4/Axis2-1.4.1解压开来的目录下的lib目录里的所有jar导入你工程的WEB-INF/lib目录下,并加载入工程的classpath,如下图
第四步:
在工程和src平级处新建一个目录叫external-lib
第五步:
把tomcat里的用于jsp, servlet解析的两个lib拷入此external-lib目录,并且以“加载外部jar”的方式加入工程的classpath中去
第六步:
在工程的WEB-INF目录下新建一个目录叫services目录。
第七步:
把Axis2-1.4/Axis2-1.4.1解压开来的目录下的repository\modules,modules这个目录,整个拷贝到你工程的WEB-INF目录下。
整个配完的工程结构应如下图所示:
三、 第一个Axis2Webservice之HelloWorld
3.1Service端代码
package org.sky.axis2.helloworld; import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; import javax.xml.stream.XMLStreamException; public class HelloWorld { public OMElement sayHello(OMElement element) throws XMLStreamException { element.build(); // Secondly the OMElement should be detached from the current OMTree so // that it can be attached // some other OM Tree. Once detached the OmTree will remove its // connections to this OMElement. element.detach(); return element; } }
3.2 Service端的Web Service布署文件
然后我们在工程的WebContent\WEB-INF\services\目录下新建一个目录叫HelloWorld的目录,与我们的类同名,在此目录下再建立一个META-INF的目录(大小写必须完全一致),然后在META-INF目录下新建一个services.xml,具体目录结构如下图所示:
Services.xml文件的内容如下:
<service name="HelloWorld"> <parameter name="ServiceClass">org.sky.axis2.helloworld.HelloWorld</parameter> <operation name="sayHello"> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> <actionMapping>urn:sayHello</actionMapping> </operation> </service>
该布署文件很容易阅读:
1) 它声明了一个WebService的主类叫” org.sky.axis2.helloworld.HelloWorld”;
2) 该WebService有一个Web Service Method,在类中该方法名叫sayHello,它返回一个OMElement为类型的值,接受一个OMElement为类型的参数;(RawXMLINOutMessageReceiver)
3) sayHello这个对外暴露的WebService方法名为: urn:sayHello
修改web.xml,在里面加入这些东东:
<servlet> <display-name>Apache-Axis Se