基于axis2的WebService服务开发与客户端调用

基于axis2的WebService服务开发与客户端调用
目录
一、环境搭建	2
1.1.eclipse集成axis	2
1.2.下载axis2工程包	2
1.3.发布第2步下载的war	2
二、WebService服务开发	3
2.1 服务端程序开发	3
2.2 服务部署	3
三、基于Axis2的WebService客户端调用	4
 
	今天花了一天的时间来研究如何利用axis2来开发webservice服务以及如何调用webservice服务。虽然期间碰到过很多莫名其妙的问题,但终归是调用成功了,也算是差强人意吧,虽然毕业半年了,但是一直都没有接触过webservice,也没有牵涉到这一块的实际开发任务,所以到现在,对webservice我还是一个门外汉。
	本文比较详细和肤浅地阐述了如何开发webservice服务和调用webservice服务。
一、环境搭建
由于我是基于axis2来开发的,所以,首先要搭建运行webservice服务环境。
1.1.eclipse集成axis
下载axis2-eclipse-service-archiver-wizard.zip和axis2-eclipse-codegen-wizard.zip两个压缩包,将其解压后,把Axis2_Service_Archiver_xxx和Axis2_Codegen_Wizard_xxx两个文件夹复制到eclipse下的plugin目录下。重新启动eclipse,点击File->New->Other查看列表中是否有Axis2 Wizards项。如果出现类似下图所示,则表明集成成功。
 
图1.1 eclipse集成axis2插件
1.2.下载axis2工程包
可以直接到axis2官网上去下载war工程。如下图(注意,下载WAR Dis…)
 图1.2 axis2 war发布包下载
1.3.发布第2步下载的war
具体是将下载后的axis2-1.6.1-war.zip解压缩,将里面的axis2.war复制到tomcat的webapp目录下,启动tomcat服务,浏览器输入http://localhost:8088/axis2/访问axis2服务,如果出现下图所示界面,则说明axis2服务包安装成功。
 
图1.3 访问axis2服务
二、WebService服务开发
2.1 服务端程序开发
	在这里为了测试方便,我写了一个简单的java类,如下所示:
 
2.1 服务端程序开发
这里是一个简单的类,只提供了模拟操作用户的两个方法findUser和editUser。
2.2 服务部署
	有两种部署方式,在这里先说第一种,也是最简单的并且是我测试成功的一种将上面的类编译后的class文件拷贝到tomcat下的webapps\axis2\WEB-INF\pojo里面,如果pojo文件夹不存在,则新建一个。完成后,在tomcat服务已启动的前提下,打开浏览器访问地址:
http://localhost:8088/axis2/services/listServices,发现多了一个服务
 
图2.2 成功部署服务
则说明webservice服务部署成功,可以看到两个可调用的函数对应刚才类中的两个函数。
	这种部署方式优点是比较简单,缺点是类不能有包名存在,例如package com.fpi.test之类的,如果有则测试失败,具体原因我没去查,网上也说不能有包名。
	第二种部署方式是通过axis2插件来半自动部署。具体操作流程网上很多,也很详细。但是我一直都没有测试成功,主要是卡在第五步,无法显示可用的类名称。
三、基于Axis2的WebService客户端调用
	同样,在这里我沿用前面的webservice服务类,写了一个简单的调用类,当然也可以通过Axis2插件自动完成,调用方法、原理等网上很多。
	随便新建一个类,编写代码如下:
package us;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;


/**
 * <p>调用webservice的客户端程序,依赖的包列表</p>
 * <ul>
 * 	<li>activation-xx.jar</li>
 * 	<li>axiom-api-xx.jar</li>
 * 	<li>axis2-adb-xx.jar</li>
 * 	<li>axis2-adb-codegen-xx.jar</li>
 * 	<li>axis2-java2wsdl-xx.jar</li>
 * 	<li>axis2-kernel-xx.jar</li>
 * 	<li>axis2-transport-http-xx.jar</li>
 *  <li>axis2-transport-local-xx.jar</li>
 * 	<li>commons-codec-xx.jar</li>
 * 	<li>commons-httpclient-xx.jar</li>
 * 	<li>commons-logging-xx.jar</li>
 * 	<li>httpcore-xx.jar</li>
 * 	<li>wsdl4j-xx.jar</li>
 * 	<li>xmlschema-xx.jar</li>
 * 	<li>mail-xx.jar</li>
 * 	<li>neethi-xx.jar</li>
 * 	<li>axis2-transport-local-xx.jar</li>
 * 	<li>axiom-impl-xx.jar</li>
 * </ul>
 * @author meiquan_yang
 * @created 2012-01-16
 */
public class UserServiceClient {

	public static void main(String[] args) throws Exception {
		

		String url = "http://localhost:8088/axis2/services/UserService";

		String namespace = "http://ws.apache.org/axis2";
		
		EndpointReference epr = new EndpointReference(url);

		OMFactory factory = OMAbstractFactory.getOMFactory();
		
		OMNamespace ns = factory.createOMNamespace(namespace,"xsd");
		
		OMElement ne = factory.createOMElement("id",null);
		
		ne.addChild(factory.createOMText(ne,"1"));
		
		OMElement method = factory.createOMElement("findUser",ns);
		
		method.addChild(ne);
		
		ServiceClient sender = new ServiceClient();
		
		Options options = new Options();
        options.setAction("findUser");
        options.setTo(epr);
        
        sender.setOptions(options);
        
		OMElement result = sender.sendReceive(method);
		
		System.out.println(result.toString());
	}
}

运行结果:
<ns:findUserResponse xmlns:ns="http://ws.apache.org/axis2">
<return>{username:yangmeiquan,password:123456}</return>
</ns:findUserResponse>

你可能感兴趣的:(webservice)