异步调用WebService的代码:
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:8888/axis2/services/ansyService");
options.setTo(targetEPR);
QName opAddEntry = new QName("http://ws.apache.org/axis2","getPrice");
serviceClient.invokeNonBlocking(opAddEntry, new Object[]{},
new org.apache.axis2.client.async.AxisCallback(){
@Override
public void onComplete() {
// TODO Auto-generated method stub
}
@Override
public void onError(Exception arg0) {
// TODO Auto-generated method stub
}
@Override
public void onFault(MessageContext arg0) {
// TODO Auto-generated method stub
}
@Override
public void onMessage(MessageContext mc) {
// TODO Auto-generated method stub
System.out.println(mc.getEnvelope().getFirstElement().getFirstElement().getFirstElement().getText());
}
}
);
System.out.println("异步调用");
System.in.read();
如果通过wsdl2java产生的代码异步调用WebService,执行wsdl2java命令会产生AsynServiceCallbackHandler和AsynServiceStub,其中AsynServiceStub负责同步或异步调用WebService,AsynServiceCallbackHandler是抽象类,也是回调类,如果方法返回,则AsynServiceCallbackHandler类的receiveResultgetName方法被调用,代码如下
class MyCallback extends AsynServiceCallbackHandler
{
@Override
public void receiveResultgetName(GetNameResponse result)
{
// 返回结果
System.out.println(result.get_return());
}
}
public class StubClient
{
public static void main(String[] args) throws Exception
{
AsynServiceStub stub = new AsynServiceStub();
// 异步调用WebService
stub.startgetName(new MyCallback());
System.out.println("异步调用!");
System.in.read();
}
}