调用webservice

用Axis2创建调用webservice的客户端,创建java工程,引入以下axis2相关的jar包

axiom-api-1.2.11.jar
axiom-impl-1.2.11.jar
axis2-adb-1.5.5.jar
axis2-kernel-1.5.5.jar
axis2-transport-http-1.5.5.jar
axis2-transport-local-1.5.5.jar

commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-io.jar
commons-logging-1.1.1.jar
httpcore-4.0.jar
mail-1.4.jar
neethi-2.0.5.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.3.jar

 

创建调用服务类,应用axis2提供的类实现调用服务,代码如下:

package com.test;
 
importjava.util.Iterator;
importjavax.xml.namespace.QName;
importorg.apache.axiom.om.OMAttribute;
importorg.apache.axiom.om.OMElement;
importorg.apache.axis2.AxisFault;
importorg.apache.axis2.addressing.EndpointReference;
importorg.apache.axis2.client.Options;
importorg.apache.axis2.rpc.client.RPCServiceClient;
 
public classCallWebservice {
 
public StringgetData(String id,String name) {
        String result=null;
              
        //webService的调用地址       
        String srvcUrl ="http://localhost:8082/axis2/services/MyService";
        //操作的命名空间+“:”+操作名
        QName qname = new QName("http://test.jax.com", "getData");
        //传递的参数对象集
        Object param[] = new Object[] { id,name};
        try {
               //实例化远程服务调用客户端对象
               RPCServiceClient client = new RPCServiceClient();
               //实例化Options对象
               Options options = new Options();
               //设置Options对象的连接终端地址
               options.setTo(newEndpointReference(srvcUrl));
               //设置Options对象的操作事件对象
               options.setAction("urn:getData");
               //为远程服务调用客户端对象设置Options子对象
               client.setOptions(options);
               //传递参数,调用服务
                OMElement element =client.invokeBlocking(qname, param);
              
               result=element.getFirstElement().getText();
       
        }
        catch (AxisFault e) {
               e.printStackTrace();
        }
        return result;
}
 
//测试
public static voidmain(String[] args) {
 
        CallWebservice client=new CallWebservice();
       
        String rs =client.getData("1","张三");
         System.out.println(rs);
}
}



代码说明请看注释。

 

还有一种调用方式是通过axis2工具生成stub类,然后调用webservice,

 

打开cmd命令窗口,进入axis2的bin目录,输入命令:wsdl2java -uri http://localhost:8082/axis2/services/MyService?wsdl-p client -s -o stub

如图


 其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个MyServiceStub.java文件,该文件复杂调用WebService,然后可以在程序中直接使用这个类,通过stub调用webservice代码如下:

package client;
 
import java.rmi.RemoteException;
 
importorg.apache.axis2.AxisFault;
 
importclient.MyServiceStub.GetDataResponse;
 
public class CallService {
 
        publicstatic void main(String[] args){
               //MyServiceStub中生成了一个getData(GetData getData)的方法
               //该方法的内部实现了调用发布的webservice服务中的getData()方法
              
               //首先创建参数对象
               MyServiceStub.GetData  getData = new MyServiceStub.GetData();
               //给参数赋值
               getData.setId("1");
               getData.setName("张三");
              
               try{
                       //实例化stub类
                       MyServiceStubstub = new MyServiceStub();
                       try{
                               //调用服务方法
                               GetDataResponser s = stub.getData(getData);
                               //返回值为String
                               Stringstr = rs.get_return();
                               System.out.println(str);
                       }catch (RemoteException e) {
                               //TODO Auto-generated catch block
                               e.printStackTrace();
                       }
               }catch (AxisFault e) {
                       //TODO Auto-generated catch block
                       e.printStackTrace();
               }
        }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值