互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示。
一:调用免费的web service获取天气预报信息
1.第三方服务地址
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx
原来的地址因为第三方要收费所以没用了(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx )
http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
2.生成本地java代码(借助wsimport命令工具自动生成客户端代码)
打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"生成客户端代码,如下图所示:
运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,这个问题的解决办法如下:
1、将对应的wsdl文档保存到本地
2、修改wsdl文档的部分内容:将 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>
3、再次执行wsimport生成代码,这次使用保存在本地的WeatherWS.wsdl文件来进行生成,如下图所示:
注意:生成代码的过程中虽然有警告,但可以不必理会,没有报错,说明代码生成成功了。
从执行结果显示,这一次可以正常生成代码了,刷新一下src目录,就可以看到生成的代码了
3.借助生成的代码编写请求代码
package com.example.demo;
import new_src.cn.com.webxml.ArrayOfString;
import new_src.cn.com.webxml.WeatherWS;
import new_src.cn.com.webxml.WeatherWSSoap;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* Created by sjgtw-zzr on 2020/4/16.
*/
@SpringBootTest
public class WeatherWSClientNew {
public static void main(String[] args) {
WeatherWS factory = new WeatherWS();
WeatherWSSoap weatherWSSoap = factory
.getWeatherWSSoap();
ArrayOfString weatherInfo = weatherWSSoap.getSupportCityString("311101");
List<String> lstWeatherInfo = weatherInfo.getString();
for (String string : lstWeatherInfo) {
System.out.println(string);
System.out.println("------------------------");
}
}
}
测试结果:
北京,792
------------------------
昌平,785
------------------------
大兴,826
------------------------
房山,827
------------------------
怀柔,752
------------------------
门头沟,788
------------------------
密云,751
------------------------
平谷,756
------------------------
顺义,741
------------------------
通州,3409
------------------------
延庆,746
------------------------
海淀,742
------------------------
朝阳,3408
------------------------
丰台,795
------------------------
石景山,794
------------------------
以上,就是一个完整的第三方的webservice服务的调用的实例。