环境背景,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");
     }
  

解决方案 »

  1.   

    代码的第三十行,我标注的是红色System.in.read();这个就是问题纠结的地方了。 当我执行这句的时候,代码是
    ----
    getWeather
    ---这是webservice返回结果

    -------------------------也就是说程序在getWeather()中异步的执行了 输出语句,又执行了回调方法onMessage() ,但是他没有执行Main方法中的最后一句????????????????????????
    但是当我注释掉,System.in.read();的时候,执行结果是
    ----
    getWeather
    main last
    --------------------------
    他又不执行回调函数了 我很纠结。
      

  2.   

    希望有 使用过Axis2 异步调用的人来指点一下,你们实现的思路,不胜感激啊,  或者有什么对着比较熟悉的大仙么~~  坐等啊