异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。
1. 编写服务端代码:
- public class AsynchronousService {
- public String execute() {
- System.out.println("正在执行此代码……");
- // 延迟5秒后,返回结果
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return "完成";
- }
- }
2. 编写services.xml代码,打包并发布至对应文件夹下
- <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. 客户端代码:
- 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 {
- String target = "http://localhost:8080/axis2/services/AsyncService";
- RPCServiceClient client = new RPCServiceClient();
- Options options = client.getOptions();
- options.setManageSession(true);
- EndpointReference epr = new EndpointReference(target);
- options.setTo(epr);
- QName qname = new QName("http://asynchronous.server", "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();
- }
- }