异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。
1. 编写服务端代码:
[java] view plain copy
public class AsynchronousService {
public String execute() {
"正在执行此代码……");
// 延迟5秒后,返回结果
try {
5000);
catch (InterruptedException e) {
e.printStackTrace();
}
return "完成";
}
}
2. 编写services.xml代码,打包并发布至对应文件夹下
[html] view plain copy
<service name="AsyncService">
<description>
AsyncService
</description>
<parameter name="ServiceClass">
server.asynchronous.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. 客户端代码:
[java] view plain copy
package client;
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;
public class AsynTest {
public static void main(String[] args) throws IOException {
"http://localhost:8080/axis2/services/AsyncService";
new RPCServiceClient();
Options options = client.getOptions();
true);
new EndpointReference(target);
options.setTo(epr);
new QName("http://asynchronous.server", "execute");
//指定调用的方法和传递参数数据,及设置返回值的类型
new Object[] {}, new AxisCallback() {
public void onMessage(MessageContext ctx) {
System.out.println(ctx.getEnvelope());
"Message:" + ctx.getEnvelope().getFirstElement().getFirstElement().getFirstElement().getText());
}
public void onFault(MessageContext ctx) {
}
public void onError(Exception ex) {
}
public void onComplete() {
}
});
//断点此处,查看异步结果
"异步WebService");
//阻止程序退出
System.in.read();
}
}