建立服务端
最近项目需要开发web service,找了一下资料,打算用axis2开发,但是网上很难找到一个完整demo。
所以整理总结一下,希望多大家有帮助!
有一个最简单的方法就是把axis2.war中的内容作为Web Project的基础, 来进行开发.
不过为了更清楚的了解如何在一个已有的Web Project中嵌入axis2,那就手动来配置。大致分如下几个步骤:
一、新建Web Project,名为“WebServiceDemo”
二、下载axis2-1.5-war.zip包(本来想发附件也发出来,发现csdn无法挂附件,只有麻烦各位再到其他地方下载了,当然也可以问我要,加QQ470312712),
解压缩
将axis2/WEB-INF/lib里的jar包拷贝到WebServiceDemo/WebRoot/WEB-INF/lib/
将axis2.war/axis2-web拷贝至WebServiceDemo/WebRoot/axis2-web/(这一步如果不想集成axis2的控制信息,可不需要)
三、配置axis2 servlet
打开WebServiceDemo/WebRoot/WEB-INF/web.xml,增加如下配置:
<servlet>
<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>
四、写一个简单的web服务类
package com.ws;
public class MyService {
public String getName(String id){
System.out.println("-------------"+id+"--------");
return "pj";
}
}
五、配置Web Service.
由于axis2已嵌入到WebServiceDemo项目中,所以web service就不用打包成aar,而是直接在/WEB-INF目录下创建相应的文件夹和services.xml,
六、services.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 接口服务类 -->
<serviceGroup>
<service name="SampleService">
<description>
This service is common webService.
</description>
<!-- 这里需要配置提供的服务类名包括类的路径-->
<parameter name="ServiceClass">com.ws.MyService
</parameter>
<!--以下标签的配置功能是说明此服务是有输入和输出功能-->
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
到这里服务端已经配置完成!很简单吧!然后启动tomcat,访问地址粗线wsdl文件,说明配置成功!
在浏览器中访问http://localhost:8080/ws/services/SampleService?wsdl可以查看到该Web服务的描述文件说明发布成功!
建立客户端
我查看了网上总结的,有多种方式生成客户端,我采用的是axis2对myeclipse的插件生成,个人觉得比较简单!无需配置环境变量!
一、先下载axis2-eclipse-codegen-wizard.jar和axis2-eclipse-service-archiver-wizard.jar
然后把上述两个文件解压出来,然后再复制backport-util-concurrent-3.1.jar(需要在单独网上下载,axis2没自带)和geronimo-stax-api_1.0_spec-1.0.1.jar
到axis2-eclipse-codegen-wizard(解压出来的文件)里面的lib里面!
然后修改axis2-eclipse-codegen-wizard里面的plugin.xml文件,在节点runtime下添加如下内容
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
二、把刚才axis2-eclipse-codegen-wizard和axis2-eclipse-service-archiver-wizard复制到myeclipse(我用的是myeclipse8.6)根目录下的dropins文件夹下
(特别要注意,最后修改后在复制到myeclipse的dropins文件夹下,要是已经是复制进去才修改,请剪切出来,然后启动myeclipse关掉,在复制进去)
三、 打开myeclipse,新建一个项目,在窗体中看到如下:
看到axis2下的连个选项,说明安装插件成功!
四、生成客户端,新建醒目,选择以上两个选项中的axis2 code generator,然后下一步出现
选第一个,代表的意思是用wsdl文件生成客户端!点击下一步出现
五、 输入wsdl文件路径,该文件路径可以是本地的文件,也可以是网络上的地址(如果是网络行的,必须要联网哦)点击下一步
六、如果上一步的wsdl没错,那么这一步默认就行了
七、选要输出到的项目,你可以先建好一个web project项目,然后选择该项目,(注意,选择到项目名称即可)然后点击完成。(记得要打上add the axis2 codeger...这个复选框)
八、生成的项目是不是好多小红叉啊,没关系,先把axis2的包添加到claspath下,添加jar都懂吧,这里就不啰嗦!
添加完后是不是还有小红叉啊,不要紧张,这个是这个插件的一个小bug,解决方案如下:
点击小红叉的地方,出现add unimplemented methods 实现方法就可以,是不是发现还有红叉啊,别那么紧张嘛,下载axis2-adb-1.4.1.jar添加到classpath即可
编写客户端如下
SayHelloStub sayHelloStub=new SayHelloStub();
SayHelloStub.SayHelloMethod sayHelloMethod=new SayHelloStub.SayHelloMethod();
//传递的参数
sayHelloMethod.setName("pjn");
//调用sayHelloMethod方法
System.out.println(sayHelloStub.sayHelloMethod(sayHelloMethod).get_return());
SayHelloStub.AddStudnet addStudnet=new SayHelloStub.AddStudnet();
Student student=new Student();
student.setName("pangjian");
addStudnet.setStudent(student);
System.out.println(sayHelloStub.addStudnet(addStudnet).get_return());
完成!如有问题可以联系我!