微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

异步调用Webservice

异步,说到异步需要首先将以下同步。同步就是代码按照顺序执行,当前面的代码的请求没有正常返回结果的情况下,后面的代码是不能运行。而异步正好和这点不同,异步是代码运行后,不管当前的请求是否返回结果,后面的代码都会继续运行。


1.   编写服务端代码

      

[java]  view plain copy
  1. public class AsynchronousService {  
  2.   
  3.     public String execute() {  
  4.         System.out.println("正在执行此代码……");  
  5.         // 延迟5秒后,返回结果  
  6.         try {  
  7.             Thread.sleep(5000);  
  8.         } catch (InterruptedException e) {  
  9.             e.printstacktrace();  
  10.         }  
  11.         return "完成";  
  12.     }  
  13. }  

2.   编写services.xml代码,打包并发布至对应文件夹下

 

[html]  copy
    <service name="AsyncService">  
  1.     description>  
  2.         AsyncService  
  3. </     parameter name="ServiceClass"         server.asynchronous.AsynchronousService  
  4. parametermessageReceivers         messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"  
  5.             class="org.apache.axis2.rpc.receivers.RPcmessageReceiver" />  
  6. messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"  
  7.             class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"  service>  

3.   客户端代码

copy
    package client;  
  1. import java.io.IOException;  
  2. import javax.xml.namespace.QName;  
  3. import org.apache.axis2.addressing.EndpointReference;  
  4. import org.apache.axis2.client.Options;  
  5. import org.apache.axis2.client.async.AxisCallback;  
  6. import org.apache.axis2.context.MessageContext;  
  7. import org.apache.axis2.rpc.client.RPCServiceClient;  
  8. class AsynTest {  
  9.       
  10.     static void main(String[] args) throws IOException {  
  11.         String target = "http://localhost:8080/axis2/services/AsyncService";  
  12.         RPCServiceClient client = new RPCServiceClient();  
  13.         Options options = client.getoptions();  
  14.         options.setManageSession(true);  
  15.           
  16.         EndpointReference epr = new EndpointReference(target);  
  17.         options.setTo(epr);  
  18.           
  19.         QName qname = new QName("http://asynchronous.server""execute");  
  20.         //指定调用方法和传递参数数据,及设置返回值的类型  
  21.         client.invokeNonBlocking(qname, new Object[] {}, new AxisCallback() {  
  22.               
  23.             void onMessage(MessageContext ctx) {  
  24.                 System.out.println(ctx.getEnvelope());  
  25.                 System.out.println("Message:" + ctx.getEnvelope().getFirstElement().getFirstElement().getFirstElement().getText());  
  26.             }  
  27.               
  28.             void onFault(MessageContext ctx) {  
  29.             }  
  30. void onError(Exception ex) {  
  31. void onComplete() {  
  32.         });  
  33. //断点此处,查看异步结果  
  34.         System.out.println("异步WebService");  
  35. //阻止程序退出  
  36.         system.in.read();  
  37.     }  
  38.       
  39. }  

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐