基于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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值