axis2通过wsdl2java.bat生成webservice异步客户端程序

时间:2021-12-21 09:57:44

最近在做webservice的调用问题,发现如果被调用的WebService方法长时间不返回,客户端将一直被阻塞,直到该方法返回为止。使用同步方法来调用WebService虽然很直观,但当WebService方法由于各种原因需要很长时间才能返回的话,就会使客户端程序一直处于等待状态,这样对客户体验是非常差的。

axis2通过wsdl2java.bat可以生成异步客户端,实现异步调用 的效果,下面一起看一看怎么操作的:

一、设置axis2的环境变量,如下图所示:

axis2通过wsdl2java.bat生成webservice异步客户端程序


二、利用axis2中的wsdl2java.bat生成客户端程序:


命令:wsdl2java -uri http://localhost:8081/TestAxis2Ws/services/HelloService?wsdl -p axis2.service.server -o stub


其中-uri参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录


axis2通过wsdl2java.bat生成webservice异步客户端程序



这时到axis2的bin目录下会发现出现了一个stub目录,如下图所示:

axis2通过wsdl2java.bat生成webservice异步客户端程序


其中TestStub.java是客户端程序,TestCallbackHandler.java是异步客户端程序。
把这两个类复制到上次已经建立好的服务端工程里,然后改一下错误就可以使用了


三、怎么使用异步客户端


   1、编写一个继承TestCallbackHandler的子类


package com.test;


import com.stub.TestCallbackHandler;
import com.stub.TestStub.GetNameResponse;


public class MyTestCallbackHandler extends TestCallbackHandler {


    @Override
    public void receiveResultgetName(GetNameResponse result) {
        // 输出getName方法的返回结果
        System.out.println(result.get_return());


    }


}


2、编写测试程序:

package com.test;


import java.io.IOException;
import java.rmi.RemoteException;


import com.stub.TestStub;
import com.stub.TestStub.GetName;


public class TestClient {


public static void main(String[] args) throws InterruptedException, IOException {
// TODO Auto-generated method stub
TestStub stub = new TestStub();
GetName getName=new GetName();
       //  异步调用WebService
stub.startgetName(getName,new MyTestCallbackHandler());
System.out.println("异步调用!");

            //  阻止程序退出
System.in.read();
}
}


这样就可以测试出异步调用的效果了,使用的时候有不懂的地方可以评论给我……