java使用WebService实现调用天气预报功能【超详细】

时间:2024-03-01 22:05:09

1、首先建立一个web project  ,我起的名字:weatherInf  【我用的编译器是MyEclipse】

 

 

 

 

 

 

 

2、在src下新建一个file 起名:WeatherWebService.wsdl,将该链接中的代码  http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl  粘到新建的file中去。

   从<wsdl:definitions标签开始,一直到该标签结束。

3、正常情况下粘贴完都会出现错误,我的是出现标签错误,strongbr 标签提示没有闭合的错误,我又重新自己打了出错的标签,错误解决!

  还有一个错误是 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。

到此成功实现调用天气预报的方法!

 

本人小白一枚,如果有不得体或不完善的地方,请各位大佬指正,谢谢~~