文章目录

《主流Web Service框架介绍:CXF和Axis2》


CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长。

CXF:http://cxf.apache.org/
是由过去的Celtix和XFire两个框架合并而来,CXF在java社区有广泛的接受度是得益于它能很好的集成Spring。我认为CXF最突出的两个优势是:
1.对JAX-WS规范的完整实现。 作为java平台上的WebService标准,过去既有的WebService产品必然会向这一标准靠拢,而JAX-WS标准本身大大地降低了开发WebService的工作量,对于开发人员来说,是非常受欢迎的。
2.对Spring的友好支持。 CXF从Xfire继承而来,对Spring有着非常友好的支持。鉴于Spring的广泛应用,对很多团队来说这是非常有吸引力的一点。

Axis2: http://axis.apache.org/axis2/java/core/
与CXF这类嵌入式的框架相比,Axis2更像是一种是WS容器,它要求应用程序以aar包的形式部署到自己里面,这对于既有系统,特别是那些基于servlet容器的web应用来说,改造的代价可能会很大。Axis2的优势在于一方面它对WS-*协议族的支持比较全面,另一方面是它还支持C平台,这是一个值得我们关注的优势。

总得来说,如果是新生项目,选择CXF或Axis2在工作量上不会有太大的差别,对于那些使用了Spring的既有项目来说,CXF应该是首选,因为CXF是基于注解的。因此对于那些基于jvm1.4构建陈旧系统可能并不适用。Axis2的优势是支持C平台和比较全的WS-*协议族。(以上的考量都还没有考虑ESB的因素。)

参考的一些教程


《myeclipse下用axis2开发web service的第一个程序(SayHello)》http://blog.csdn.net/moonsheep_liu/article/details/6334854该教程版本较老。

《Myeclipse+Axis2+Tomcat开发webService》
http://www.cnblogs.com/hexinlin/p/3358558.html
比较详细准确的教程,主要根据该文档。若要生成wsdl文件,要先生成项目的class文件。

《MyEclipse学习axis2 WebService学习笔记》一份比较详细的笔记。http://blog.csdn.net/brianyeye/article/details/7551741

http://my.oschina.net/zichen/blog/101485

开源中国社区:《Web服务框架 Apache Axis2》
http://www.oschina.net/p/axis2

《AXIS2:如何发布webservice》
http://blog.csdn.net/zzq560/article/details/5627993

《Web工程集成Axis2发布WebService》
http://wenku.baidu.com/link?url=_RZoizHnGKcPzjso50JKkg3Ar77KzTae9__V25nB_Zf1Z3tGZm5XrtFmuy1WL1VBuqQMjxXsEM5aZW9fxRd8npEqes5QUIMrb5u_SLLK0ti

《MyEclipse+Axis2插件开发Web服务》


官网下载地址:http://axis.apache.org/axis2/java/core/download.cgi。

下载四个文件 :Binary Distribution ,Source Distribution ,WAR Distribution ,Documents Distribution。关于axis2,官方提供了四种类型的包,分别为二进制包、war包、文档包和源文件包。其中的二进制包包含了示例程序和一些jar包;war包是可以作为web应用部署到servlet container中的axis2服务包,它是apache axis2提供的服务管理的工具类web应用,所谓的axis2的安装即指的是在servlet container中安装此包;文档包不再多说;源码包也不再多说。

Axis2插件地址: http://axis.apache.org/axis2/java/core/tools/index.html。
axis2-eclipse-codegen-plugin-1.6.2,axis2-eclipse-service-plugin-1.6.2。

安装axis2比较简单,把/axis2-1.5.4-war下axis2.war拷贝到tomcat的webapps下。启动tomcat,浏览器中键入http://localhost:8080/axis2/。《MyEclipse下axis2插件的安装》 http://blog.csdn.net/hao495430759/article/details/9142363。

插件发布Web Service:项目工程地址:D:\Workspaces\MyEclipse。
生成Hello_Service.aar。可以把这个aar文件放入tomcat中发布,首先把生成的aar文件拷贝到tomcat目录中的axis2项目的service目录中位置

服务发布的地址:http://localhost:8080/axis2/services/HelloService?wsdl。

编写测试服务的类:MyCallBack.java,TestHelloDemo.java
新建stub本地操作对象:HelloServiceStub stub = new HelloServiceStub();
新建代理对象:GetResp和SayHello,封装了一些参数的细节和设置方法,获取方法等。类似于Spring中Bean的作用。
然后通过stub的函数操作该代理对象。

1
GetResp rsp = new GetResp();
GetRespResponse rspResponse = new GetRespResponse();
System.out.println(stub.getResp(rsp).get_return());//请求被响应
 
SayHello hellolsx = new SayHello();
hellolsx.setName("lisuxuan");
System.out.println(stub.sayHello(hellolsx).get_return());//Hellolisuxuan

http://damiao-cn.iteye.com/blog/260914
在生成的服务调用类中,最重要的是*Stub.java类,其他生成的类都是对应与这个类中的各个方法的,将生成的所有服务调用类放于client端的项目中,Stub就相当于一个存根。
当client端调用webservice端的方法时,首先会调用client端本地项目的Stub.java中的对应方法,然后Stub在通过soap以信封xml的方式通过网络发到服务器即server端。

XML方式使用Axis2将人流量分析系统中功能发布为Web Service


修改web.xml
在web.xml中添加如下配置:

1
<!-- lisuxuan @ 2014-10-15 -->
<servlet>
<display-name>Apache-Axis Servlet</display-name>
	<servlet-name>AxisServlet</servlet-name>
	<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>AxisServlet</servlet-name>
	<url-pattern>/services/*</url-pattern>
</servlet-mapping>

建立WebService配置文件的目录结构

把WAR包中WEB-INF下面的conf、lib、modules 三个文件夹复制到Web项目的WEB-INF目录中。 到Web项目的WEB-INF目录中新建一个services文件夹,在services文件夹下新建一个webservice的根目录(目录名即你所提供的webservice名),再在下面新建META-INF文件夹,并存放services.xml文件。

SelectDataActionService服务的xml配置文件如下,其他类似:

1
<service name="SelectDataActionService">  
<!-- 注意:服务名称需与目录名称对应 -->
    <description>  SelectDataAction Service </description>
    
    
    <parameter name="ServiceClass">  
        com.heatmap.action.SelectDataAction    
    </parameter>
    
    
    <operation name="gettable">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>
    
    <operation name="taocanAnalysis">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>  

    <operation name="taocanAnalysis_ws">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation> 
    
	<operation name="terminaAnalysis">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation> 
    
    <operation name="chargeAnalysis">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>  
    
    <operation name="complaintAnalysis">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>
    
    <operation name="priceAnalysis">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>  
    
    <operation name="methodForTest">  
        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
    </operation>  

</service>

调用服务测试:
1.服务发布地址:
(其中ip为服务所在IP)
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService?wsdl
http://10.1.15.190:8080/ZSHeatmap/services/QueryDataActionService?wsdl
http://10.1.15.190:8080/ZSHeatmap/services/DataLoadActionService?wsdl

2.服务测试:数据库表获取服务
简单方法采用WSDL地址+方法名+参数名:

http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/gettable?str=1
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/gettable?str=0

获取数据库的套餐服务:
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/priceAnalysis_ws?radio=1
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/complaintAnalysis_ws?radio=1
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/chargeAnalysis_ws?radio=1
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/terminaAnalysis_ws?radio=1
http://10.1.15.190:8080/ZSHeatmap/services/SelectDataActionService/taocanAnalysis_ws?radio=1

可采用其他Web Service浏览工具(可视化工具)进行测试,或者编写代码对Web Service进行测试。测试时需要根据方法具体参数进行调用。部分方法需要进行封装,形成便于提供给外界调用的“接口”形式。

文章目录