基于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>
基于axis2的WebService服务开发与客户端调用
猜你喜欢
转载自firethemax.iteye.com/blog/1350898
今日推荐
周排行