絮絮叨叨
在Internet开放的网络环境下,个人英雄主义的时代已经过去了。也就是说现在一个应用程序的具体实现不应该依赖于某一个特定的个体。WebService思想就是这样的,它把一些特定的功能都做成了服务供大家调用,从而不用反复的去造轮子,为应用程序的开发节省了许多宝贵的时间…让deadline看起来要比以前要远一点…
WebService的使用
那么要怎么样才能调用WebService呢?这里我们提供一种基于Eclipse的调用方法。这里假设大家已经安装好了Axis2这个插件,如果还有没有安装的同学可以参看这篇教程。
我们调用的天气服务是这个http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,当然直接看wsdl文档可能一下子看不懂,所以我们访问这个页面,然后选择getWeather。
可以发现我们直接输入城市名便可获取相应的天气信息。
根据WSDL生成Java代码
那么我们怎么在代码中调用这些方法呢?
首先我们要使用Eclipse根据wsdl生成代码,步骤如下:
新建一个JavaProject(我取名为LoadService)–>然后在这个工程上右键–>选择new–>other–>选择generator
一直next,输入上文提到的wsdl地址(http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl),然后next,再选择代码输出地址(选择刚刚新建的那个工程路径src即可)
生成成功的包结构应该是这样的:
本地代码调用
调用步骤:
- 获取stub实例
- 实例化要调用的方法,这里是GetWeather
- 为这个方法实例设置参数,这里是setTheCityCode
- 由stub实例调用getWeather方法,参数为GetWeather实例,返回方法响应实例
- 由方法响应实例获取result,这里返回类型是ArrayOfString类型的。
在ArrayOfString源代码中我们发现有getString这个方法可以返回数组,于是就可以很好的遍历输出结果了 - 输出结果
package test.compute;
import java.rmi.RemoteException;
import java.util.List;
import cn.com.webxml.GetRegionProvince;
import cn.com.webxml.GetRegionProvinceResponse;
import cn.com.webxml.GetWeather;
import cn.com.webxml.GetWeatherResponse;
import cn.com.webxml.WeatherWSStub;
public interface TestWeather {
public static void main(String[] args) throws RemoteException {
// TODO Auto-generated method stub
WeatherWSStub weatherWSStub = new WeatherWSStub();
GetWeather getWeather = new GetWeather();
getWeather.setTheCityCode("长沙");
GetWeatherResponse getWeatherResponse = weatherWSStub.getWeather(getWeather);
String[] result = getWeatherResponse.getGetWeatherResult().getString();
for(String s : result){
System.out.println(s);
}
}
}
程序运行结果如下: