一、文件目录
二、WeatherClient源码
package wsclient;
import java.util.List;
import wsproxy.ArrayOfString;
import wsproxy.WeatherWS;
import wsproxy.WeatherWSSoap;
public class WeatherClient {
public static void main(String[] args) {
WeatherWS service = new WeatherWS();
WeatherWSSoap pService = service.getWeatherWSSoap();
ArrayOfString array = pService.getWeather("西安", "");
List<String> list = array.getString();
for(String str : list) {
System.out.println(str);
}
}
}
三、设计说明
- 首先,从http://www.webxml.com.cn/zh_cn/index.aspx找到UDDI中心(http://ws.webxml.com.cn/WebServices/WeatherWS.asmx),并在这里面找到Web服务网的接口定义(WSDLhttp://ws.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL)
- 根据WSDL生成web服务代理类,即通过wsimport命令将.WSDL文件生成对应的.java文件
- 利用Web服务代理类调用Web服务接口中定义的具体方法:
1) new一个代理类(WeatherWS)对象service。
2) 通过该对象得到调用服务的接口(WeatherWSSoap)实例pService。
3) 通过该接口调用查询地区天气的方法getWeather得到对应的信息。
4) 用服务中定义的类ArrayOfString接收返回的信息并转为字符串列表后打印出来。
四、遇到的问题及解决
1.从(WSDLhttp://ws.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL)生成相应的.java文件时报错,即(wsimport -keep -p wsproxy WSDLhttp://ws.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL)该命令报错:
解决办法:参考博客https://blog.csdn.net/jianfpeng241241/article/details/51627894。 就是把WSDL文件下载到本地并做一点修改。然后通过本地的.WSDL文件生成相应的.java文件。
2.调用getWeather得到的字符串数组不知道怎么接收和输出。
解决:通过查阅博客和阅读代理java文件的一些源码知道了用代理中的ArrayOfString类对象接收返回值然后转化为字符串列表遍历输出。