加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService学习之Axis2

发布时间:2020-12-17 00:06:18 所属栏目:安全 来源:网络整理
导读:参考自:http://hi.baidu.com/niuhea/item/93cc23cd0de746dbef183b65 源代码见:http://pan.baidu.com/share/link?shareid=1539706899uk=1763236251 一、直接使用Axis.war发布WebService ????????????? 1、Axis2(axis2-1.5.5-war.zip)下载:http://ws.apac

参考自:http://hi.baidu.com/niuhea/item/93cc23cd0de746dbef183b65

源代码见:http://pan.baidu.com/share/link?shareid=1539706899&uk=1763236251

一、直接使用Axis.war发布WebService

????????????? 1、Axis2(axis2-1.5.5-war.zip)下载:http://ws.apache.org/axis2/将解压缩后的axis2.war拷贝到tomcat的webapps目录,部署Axis2项目。

????????????? 2、访问如下地址,查看已发布服务:http://localhost:8080/axis2/services/listServices

????????????? 3、编写发布自己的WebService(一个简单的POJO,其中所有public方法都将发布成WebService方法):

???????????????????
packagezxn.webservice.shengxiao.impl;

 /**

 * 根据出生日期,计算属相

 */

publicclass ShengxiaoService {

    public StringgetShengxiao(int age) {

       // 计算生肖

       String str[]= { "猴","鸡","狗","猪","鼠","牛","虎","兔","龙","蛇","马","羊" };

       String res = "您属" + str[(age) % 12];

       return res;

    }
}

???????????

??????????? 4、通过javac编译上述文件(包名要不要无所谓),生成字节码文件。

? ? ? ? ? ?

将class文件复制到部署的项目Axis2的WEB-INF/POJO(必须叫POJO,大小写无所谓)目录中。

?


???????????? 5、访问地址:http://localhost:8080/axis2/services/listServices,查看服务发布情况


??????????? 可能有错误,则 点击错误链接,查看错误内容:

???????????


?????????? 该错误主要是Axis2 1.5.5版本使用jdk1.5(其meta-inf/MANIFEST.MF中可看到),而我编译类使用的是JDK1.7,高版本应用发布到低版本的项目中,导致版本出错。

?????????? 解决:下载最新Axis2,或者跟换本地jdk版本。

???????? 6、重新刷新http://localhost:8080/axis2/services/listServices ,即可看到成功发布的服务:

?????? ? ?


??????? 访问:http://localhost:8080/axis2/services/ShengxiaoService/getAge?args0=1990,看有无返回结果:

????? ??


二、客户端动态调用方式访问WebService服务

????????????? 1、建立Java或者Java Web Project:MyFirstAxis2WebServiceClient

????????????? 2、将D:programfilesapache-tomcat-6.0.35webappsaxis2WEB-INFlib(Axis2项目lib目录)下所有的jar包拷贝到项目中,并build to path

????????????? 3、建立测试类:

? ? ? ? ? ? ? ? ? ??

packagezxn.webservice.shengxiao.test;

importjavax.xml.namespace.QName;

importorg.apache.axis2.AxisFault;

importorg.apache.axis2.addressing.EndpointReference;

importorg.apache.axis2.client.Options;

importorg.apache.axis2.rpc.client.RPCServiceClient;

publicclass TestFirstAxis2WebService{

   

    @SuppressWarnings("unchecked")

    publicstaticvoid main(String[] args) throws AxisFault {

       // 使用RPC 方式调用WebService

       RPCServiceClientserviceClient = new RPCServiceClient();

       Optionsoptions = serviceClient.getOptions();

       // 指定调用WebService 的URL

       EndpointReferenceendpointReference = new EndpointReference("http://localhost:8080/axis2/services/ShengxiaoService");

       options.setTo(endpointReference);

       // 指定getShengxiao、getAge 方法的参数值

       Object[]inArgs = new Object[] { 1990 };

       // 指定getShengxiao、getAge 方法返回值的数据类型的Class 对象

       Class[]outArgsTypeClasses = new Class[] { String.class };

       // 指定要调用的getShengxiao 方法及WSDL 文件的命名空间

       QName qName =new QName("http://ws.apache.org/axis2","getShengxiao");

       // 调用getGreeting 方法并输出该方法的返回值

       System.out.println(serviceClient.invokeBlocking(qName,inArgs,outArgsTypeClasses)[0]);

       // 下面是调用getAge 方法的代码,这些代码与调用getAge 方法的代码类似

       outArgsTypeClasses= new Class[] { String.class };

       qName = new QName("http://ws.apache.org/axis2","getAge");

       System.out.println(serviceClient.invokeBlocking(qName,new Object[] {inArgs},outArgsTypeClasses)[0]);

    }

}

??????????????????

?????????????? 执行结果:

?????????????



三、根据WSDL生成本地客户端方式访问WebService服务

????????????? 1、下载axis2-1.6.2-bin.zip,将其解压,如下(位置随意放)

?????????????


???????????? 2、新建脚本文件genClientFiles.bat,放在src位置下:

?????????????
:axis2-1.6.2-bin的解压缩目录

set AXIS2_HOME=D:programfilesaxis2-1.6.2-binaxis2-1.6.2

set JAVA_HOME=D:programfilesjdk1.6.0.24

:WSDL的路径地址,可以事先下载到本地

setSERVICE_WSDL_URI=http://localhost:8080/axis2/services/ShengxiaoService?wsdl

:设置输出路径

setOutput_Path=D:ProBagChuanZhiRuanjianMyEclipese10projectsMyFirstAxis2WebServiceClient

:设置包名

set Package=zxn.webservice.shengxiao.test

:不能换行

%AXIS2_HOME%binwsdl2java -uri %SERVICE_WSDL_URI% -p %Package% -s -o%Output_Path%

pause


????????????????? 执行界面:

????????????????

?????????????? 生成文件如下:

??????????????



????????????? 3、在测试类TestFirstAxis2WebService中写测试方法,用Junit测试:

?????????? ??

 @Test
?publicvoid TestClient() throws RemoteException{

       ShengxiaoServiceStubservice = new ShengxiaoServiceStub();

       GetAge getAge= new GetAge();

       getAge.setArgs0(1990);

       GetAgeResponsegetAgeResponse = service.getAge(getAge);

        System.out.println(getAgeResponse.get_return());

    }
?????????????? 结果如下:
??????????????

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读