使用axis2调用.net的webservice疑惑讨论

工作好几年了,一直没有在工作中使用过webservice,可能也算是一种遗憾。可,凭着做技术的特有好奇吧,也会私下写一两个demo尝试下。最近,听说webservice的插件都用到axis2了。所以空闲时候开始准备再写个demo调用。

服务接口ENDPOINT:http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx

调用无参的接口getSupportProvince()是可以正常拿到返回的。

可是当调用需要参数的getWeatherbyCityName()却老是出错。郁闷啊。

代码如下:

private static void invokeWeatherInfo() {
try {
// 使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(
"http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx");
// 不设或者设错了Action,抛出org.apache.axis2.AxisFault: 服务器未能识别 HTTP 头
// SOAPAction 的值
options.setAction("http://WebXml.com.cn/getSupportProvince"); // 这个参数告诉调用接口的完整url
options.setTo(targetEPR);
// 第一个参数为接口的namespace 第二个参数为方法名
QName qname = new QName("http://WebXml.com.cn/",
"getSupportProvince");// 这两个参数貌似可以随便输
// 获得本天气预报Web Services支持的洲、国内外省份和城市信息
// 输入参数:无; 返回数据:一个一维字符串数组 String(),内容为洲或国内省份的名称。
System.out.println(serviceClient.invokeBlocking(qname,
new Object[] {}).toString());

// org.apache.axis2.AxisFault: 服务器无法处理请求。 ---> 值不能为空。

// 获得天气预报数据
// 输入参数:城市/地区ID或名称,返回数据:一维字符串数组
Class<?>[] classes = new Class[] { String.class };
Object[] args = new Object[] { "长沙" };
options.setAction("http://WebXml.com.cn/getWeatherbyCityName"); //
// 这个参数告诉调用接口的完整url
qname = new QName("http://WebXml.com.cn/", "getWeatherbyCityName");
serviceClient.invokeBlocking(qname, args, classes);
} catch (AxisFault ex) {
ex.printStackTrace();
}

}
  public static void main(String[] args) {
    // invokeTVchannel();
    invokeWeatherInfo();
   }

 

调用第二个带参数方法时,失败,抛出异常

org.apache.axis2.AxisFault: 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)

 

希望有经验的同学一起分析下,探讨下啊。不甚感激!

 

posted on 2011-12-20 13:12  Mr.xiong  阅读(1782)  评论(2编辑  收藏  举报