当前位置:编程学习 > JAVA >>

Axis2,客户端去实现异步调用webService,有点小疑问。使用过的来讨论下!

环境背景,Eclipse  + axis2_1.6.2   


实现客户端调用.net的webservice   XX.axms
---------------------------------------------------
axis2 客户端可以走同步调用,和异步调用。同步已实现,现在是异步的一点点小疑问。
----------代码
    public static void getWeather(String action,String methodStr,String namespace,String tns,String[] pars,String[] vals) throws IOException{
         OMElement result = null;
         try {
             ServiceClient client = new ServiceClient();
             client.setOptions(getClientOptions(action));
//             result =  client.sendReceive(getOMMethod(methodStr,namespace,tns,pars,vals));
             client.sendReceiveNonBlocking(getOMMethod(methodStr,namespace,tns,pars,vals), 
              new AxisCallback(){
   @Override
   public void onComplete()
   {
   }
   @Override
   public void onError(Exception arg0)
   {
   }                    
   @Override
   public void onFault(MessageContext arg0)
   {
   }
   @Override
   public void onMessage(MessageContext mc)
   {
   //  输出返回值
   System.out.println("---这是webservice返回结果");
   }
             }             
             );
             System.out.println("getWeather");
             System.in.read();
         } catch (AxisFault e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 
    }
 


  public static void main(String[] args) throws IOException {
         String action  = "http://WebXml.com.cn/getWeatherbyCityName";
         String methodStr = "getWeatherbyCityName";
         String namespace = "http://WebXml.com.cn/"; 
        String tns = "xsd";
         String[] pars = {"theCityName"};
         String[] vals = {"杭州"};
         OMElement result = null;
         getWeather(action, methodStr, namespace, tns, pars, vals);
         System.out.println("main last");
     }
  
--------------------编程问答-------------------- 代码的第三十行,我标注的是红色System.in.read();

这个就是问题纠结的地方了。 当我执行这句的时候,代码是
----
getWeather
---这是webservice返回结果
-------------------------

也就是说程序在getWeather()中异步的执行了 输出语句,又执行了回调方法onMessage() ,但是他没有执行Main方法中的最后一句

????????????????????????
但是当我注释掉,System.in.read();的时候,执行结果是
----
getWeather
main last
--------------------------
他又不执行回调函数了。。。。。。 我很纠结。
--------------------编程问答-------------------- 希望有 使用过Axis2 异步调用的人来指点一下,你们实现的思路,不胜感激啊,  或者有什么对着比较熟悉的大仙么~~  坐等啊  --------------------编程问答-------------------- 分太少么。。。。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,