package com.hoo.service;
/**
* <b>function:</b>异步WebService服务器端代码
* @author hoojo
* @createDate 2011-3-14 上午08:16:59
* @file AsynchronousService.java
* @package com.hoo.service
* @project Axis2WebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class AsynchronousService {
public String execute() {
System.out.println("正在执行此代码……");
//延迟5秒后,返回结果
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "完成";
}
}
2、 services.xml文件,创建aar文件,然后复制aar文件到[tomcat-home]/webapps/axis2/WEB-INF/services目录下
services.xml?
<service name="AsyncService">
<description>
AsyncService
</description>
<parameter name="ServiceClass">
com.hoo.service.AsynchronousService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</messageReceivers>
</service>
3、 编写客户端测试代码
package com.hoo.service;
import java.io.IOException;
import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.async.AxisCallback;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.rpc.client.RPCServiceClient;
/**
* <b>function:</b>异步WebService客户端代码
* @author hoojo
* @createDate 2011-3-14 上午09:00:03
* @file AsynchronousServiceClient.java
* @package com.hoo.service
* @project Axis2WebService
* @blog http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
* @version 1.0
*/
public class AsynchronousServiceClient {
public static void main(String[] args) throws IOException {
String target = "http://localhost:8080/axis2/services/AsyncService?wsdl";
RPCServiceClient client = new RPCServiceClient();
Options options = client.getOptions();
options.setManageSession(true);
EndpointReference epr = new EndpointReference(target);
options.setTo(epr);
QName qname = new QName("http://service.hoo.com","execute");
//指定调用的方法和传递参数数据,及设置返回值的类型
client.invokeNonBlocking(qname,new Object[] {},new AxisCallback() {
public void onMessage(MessageContext ctx) {
System.out.println(ctx.getEnvelope());
System.out.println("Message:" + ctx.getEnvelope().getFirstElement()
.getFirstElement().getFirstElement().getText());
}
public void onFault(MessageContext ctx) {
}
public void onError(Exception ex) {
}
public void onComplete() {
}
});
System.out.println("异步WebService");
//阻止程序退出
System.in.read();
}
}
上面是异步调用WebService的代码,调用的方法是client.invokeNonBlocking,这个方法有三个参数,参数一是执行的方法签名,
参数二是执行该方法的参数,参数三是异步回调,这里隐式实现AxiaCallback接口 注意的是运行程序的时候要用Debug方式运行。