一、方法一
1、引入很多jar包,pom依赖,注意如果有冲突的时候要排除或者查看引入版本是否冲突,buildpath是否引入的其他版本的jar,buildpath->libraries里面看是否有引入错误的jar包
activation.jar
axis-ant.jar
axis.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
mail.jar
saaj.jar
wsdl4j-1.5.1.jar
2、第三方天气预报WebService接口WSDL地址(网上有很多,不一定用我举例的这个):
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
打开以后,看到的信息即是WSDL文档对webservice接口的说明信息。
将网页上的文本信息拷贝下来,去掉黑色字体(无用的)。
3、保存成一个.wsdl格式的文件
将这个.wsdl文件拷贝到我们的src目录下
4、右键此文件,new-->Web Service -- > web services Client-->拷贝wsdl网址-->finish
我们会看到自动给我们生成了很多的代码。
我们只需要调其中我们需要的方法就行了。
5、写main类
代码如下:
public class WeatherForecastService {
public static void main(String[] args) throws RemoteException, ServiceException {
System.out.println("======程序启动======");
String result[] = QueryWeatherForecastInfo("杭州");
for (String r : result)
System.out.println(r);
System.out.println("======程序结束======");
}
public static String[] QueryWeatherForecastInfo(String cityName) throws RemoteException, ServiceException {
WeatherWebServiceLocator locator = new WeatherWebServiceLocator();
// 调用xxLocator对象的getXXPort()方法生成xxSoapBindingStub对象
WeatherWebServiceSoapStub stud = (WeatherWebServiceSoapStub) locator.getWeatherWebServiceSoap();
// 输出当天的天气状况
String[] weather = stud.getWeatherbyCityName("杭州");
return weather;
}
}
运行一下,输入天气就正常了,下面是拼装好的controller;
至此,一个调用第三方接口的WebService的demo就完成了,将该http://www.webxml.com.cn/zh_cn/weather_icon.aspx网站的图片下载到本项目,类似4.gif表示天气图标,封装所需要的参数返回给前端就ok了
@RequestMapping("queryWeatherInfo")
@CatchErr(write2response = true, value = "返回天气失败")
public Object QueryWeatherInfo(String cityName) throws RemoteException, ServiceException {
WeatherWebServiceLocator locator = new WeatherWebServiceLocator();
// 调用xxLocator对象的getXXPort()方法生成xxSoapBindingStub对象
WeatherWebServiceSoapStub stud;
try {
stud = (WeatherWebServiceSoapStub) locator.getWeatherWebServiceSoap();
String[] weather = stud.getWeatherbyCityName("石家庄");
HashMap<String, Object> map=new HashMap<String,Object>();
for (int i = 0; i < weather.length; i++) {
String string = weather[i];
if(i==6) {
map.put("weather", string);
}else if(i==8) {
map.put("pic", string);
}else if(i==10) {
map.put("temperature", string);
}
}
return map;
} catch (javax.xml.rpc.ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
二、方法二
1、三个ajax调用接口
$.ajax({
url: 'http://pv.sohu.com/cityjson?ie=utf-8',
dataType: "script",
success: function(){
getCity(returnCitySN.cip);
}
});
function getCity(cip){
$.ajax({
url:"https://restapi.amap.com/v3/ip?ip="+cip+"&output=json&key=84e1031718d2f505c18968313edc211e",
//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
dataType : "jsonp",//数据类型为jsonp
jsonp: 'callback',
//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
//jsonpCallback: 'list',
type : "GET",
async : false,
success : function(data) {
weather(data.adcode);
},
error: function (e) {
// 状态码
}
})
}
function weather(code) {
$.ajax({
url:"https://restapi.amap.com/v3/weather/weatherInfo?city="+ code +"&key=84e1031718d2f505c18968313edc211e",
dataType:"jsonp",
jsonp:'callback',
type:"GET",
async:false,
success:function(data) {
$scope.list = data.lives[0];
switch ($scope.list.weather) {
case '多云':
$scope.src = "icon-3.png";
break;
case '晴':
$scope.src = "icon-4.png";
break;
case '阴':
$scope.src = "icon-1.png";
break;
case '雷阵雨':
$scope.src = "icon-11.png";
break;
case '雨夹雪':
$scope.src = "icon-9.png";
break;
case '小雨':
$scope.src = "icon-7.png";
break;
case '小雪':
$scope.src = "icon-6.png";
break;
case '大雪':
$scope.src = "icon-2.png";
break;
case '雾':
$scope.src = "icon-5.png";
break;
case '中雪':
$scope.src = "icon-8.png";
break;
case '阵雪':
$scope.src = "icon-10.png";
break;
}
$scope.$apply();
}
})
}
2、页面获取
<div>
<div style="float:left">
<div><span>{{list.city}}</span></div>
<div><span>{{list.weather}}</span></div>
<div><span>{{list.temperature}}℃</span></div>
<div><span>{{list.reporttime}}</span></div>
</div>
<div class="iconbox">
<img ng-src="../../assets/img/icon-weather/{{src}}" alt="">
</div>
</div>