1、首先建立一个web project ,我起的名字:weatherInf 【我用的编译器是MyEclipse】
2、在src下新建一个file 起名:WeatherWebService.wsdl,将该链接中的代码 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 粘到新建的file中去。
从<wsdl:definitions标签开始,一直到该标签结束。
3、正常情况下粘贴完都会出现错误,我的是出现标签错误,strong 和 br 标签提示没有闭合的错误,我又重新自己打了出错的标签,错误解决!
还有一个错误是 element 标签错误,我上网找了一下解决办法,就是将 <s:element ref="s:schema"/> 替换成为:<s:any minOccurs="2" maxOccurs="2"/>
将 <s:any/> 标签 删除,问题解决!
4、WeatherWebService.wsdl 文件错误解决完了之后,在该文件上面右键:选择 “New Web Sevice Client”:【我的MyEclipse中是这样的步骤,其他的编译器可能就不一致。】
5、弹出以下窗口,next:
6、弹出下面窗口,next:
7、弹出以下窗口,若没有错误出现就finsh:
8、finsh完了之后会自动解压出一个叫 cn.com.webxml 的包,里面有我们调用查找天气的相关类:
9、新建一个测试包 test,下面新建一个测试类 WeatherTest, 在 main 方法里面加入以下代码,里面的相关城市参数可以修改:
package test;
import java.rmi.RemoteException;
import java.util.List;
import javax.xml.rpc.ServiceException;
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWebService;
import cn.com.webxml.WeatherWebServiceSoap;
public class WeatherTest {
public static void main(String[] args) throws RemoteException, ServiceException {
WeatherWebService locator=new WeatherWebService();
//调用getXXPort()方法生成xxSoapBindingStub对象
WeatherWebServiceSoap stud=(WeatherWebServiceSoap) locator.getWeatherWebServiceSoap();
//输出当天的天气状况
List<String> city=stud.getSupportCity("江西").getString();
List<String> province=stud.getSupportProvince().getString();
List<String> weather=stud.getWeatherbyCityName("上海").getString();
for(String c:city) {
System.out.println(c);
System.out.println("--------------");
}
for(String p:province)
System.out.println(p);
System.out.println("--------------");
for(String w:weather)
System.out.println(w);
}
}
10、运行该测试类,控制台输出相关的天气信息:
11、我之前复制过其他大佬的例子,测试类里面使用的不是List数组,而是ArrayofString,但是取出的时候回出现数据类型不一致的错误,因此我就修改为了list。
到此成功实现调用天气预报的方法!
本人小白一枚,如果有不得体或不完善的地方,请各位大佬指正,谢谢~~
原文地址:https://www.cnblogs.com/blogs-of-xiu/p/10304029.html