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{--------------------编程问答-------------------- 代码的第三十行,我标注的是红色System.in.read();
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");
}
这个就是问题纠结的地方了。 当我执行这句的时候,代码是
----
getWeather
---这是webservice返回结果
-------------------------
也就是说程序在getWeather()中异步的执行了 输出语句,又执行了回调方法onMessage() ,但是他没有执行Main方法中的最后一句
????????????????????????
但是当我注释掉,System.in.read();的时候,执行结果是
----
getWeather
main last
--------------------------
他又不执行回调函数了。。。。。。 我很纠结。
--------------------编程问答-------------------- 希望有 使用过Axis2 异步调用的人来指点一下,你们实现的思路,不胜感激啊, 或者有什么对着比较熟悉的大仙么~~ 坐等啊 --------------------编程问答-------------------- 分太少么。。。。
补充:Java , Web 开发