互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据。

  气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server), 而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).

一、 调用免费的web service获取天气预报信息

1.1、找到提供天气预报信息的Webservice的网络地址:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx   

访问结果如下:

找到WebService的wsdl描述,通过URL地址http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

这个url有时可能会出现服务器忙等问题,多连接几次就好了。

1.2、客户端编码方式访问第三方提供的webService服务

  1、借助wsimport命令工具自动生成客户端代码

  创建一个测试项目,如下:

打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"生成客户端代码,如下图所示:

运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,这个问题的解决办法如下:

  1. 将对应的wsdl文档保存到本地

注意有些浏览器没有保存文件这一项,我一开始用的时360,360没有保存文件这个功能,最后用IE浏览器了。

2、修改wsdl文档的部分内容: <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>

还有有些编辑器搜索的时候鼠标要放在文件的最开始,否则可能搜不到。然后搜索的时候搜索<s:element ref="s:schema" />这个

           不要搜索<s:element ref="s:schema" /><s:any />可能搜不到的。

          

           再次执行wsimport生成代码,这次使用保存在本地的WeatherWS.wsdl文件来进行生成,如下图所示:

           

          从执行结果显示,这一次可以正常生成代码了,刷新一下src目录,就可以看到生成的代码了,如下图所示:

           

                  src目录下是空的,包是自己生成的,无需自己创建包。

             2、借助生成的代码编写请求代码

                

package me.gacl.ws.client;

import java.util.List;

import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap; public class WeatherWSClient { public static void main(String[] args) {
//创建一个WeatherWS工厂
WeatherWS factory = new WeatherWS();
//根据工厂创建一个WeatherWSSoap对象
WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap();
//调用WebService提供的getWeather方法获取西安市的天气预报情况
ArrayOfString weatherInfo = weatherWSSoap.getWeather("西安", null);
List<String> lstWeatherInfo = weatherInfo.getString();
//遍历天气预报信息
for (String string : lstWeatherInfo) {
System.out.println(string);
System.out.println("------------------------");
}
}
}
运行程序时可能会出现如下错误:

这是因为服务没有连接上,接口调用失败,多运行几次就成功了
陕西 西安
------------------------
西安
------------------------
1344
------------------------
2016/01/17 20:10:00
------------------------
今日天气实况:气温:3℃;风向/风力:西北风 1级;湿度:38%
------------------------
紫外线强度:中等。空气质量:中。
------------------------
紫外线指数:中等,涂擦SPF大于15、PA+防晒护肤品。
感冒指数:易发,昼夜温差大,湿度大,注意防护。
穿衣指数:较冷,建议着厚外套加毛衣等服装。
洗车指数:较适宜,无雨且风力较小,易保持清洁度。
交通指数:良好,气象条件良好,车辆可以正常行驶。
空气污染指数:中,易感人群应适当减少室外活动。 ------------------------
1月17日 晴
------------------------
-3℃/7℃
------------------------
东北风微风
------------------------
0.gif
------------------------
0.gif
------------------------
1月18日 晴
------------------------
-4℃/4℃
------------------------
东北风微风
------------------------
0.gif
------------------------
0.gif
------------------------
1月19日 多云转阴
------------------------
-5℃/2℃
------------------------
西南风微风
------------------------
1.gif
------------------------
2.gif
------------------------
1月20日 小雪
------------------------
-3℃/2℃
------------------------
东北风微风
------------------------
14.gif
------------------------
14.gif
------------------------
1月21日 小雪转阴
------------------------
-4℃/2℃
------------------------
东北风微风
------------------------
14.gif
------------------------
2.gif
------------------------

运行结果

这样,我们通过生成的Client代码调用了第三方提供的webService服务获取到了西安市的天气预报信息。

http://www.cnblogs.com/xdp-gacl/p/4260627.html

WebService学习总结——调用第三方提供的webService服务的更多相关文章

  1. WebService学习--(四)调用第三方提供的webService服务

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  2. WebService学习总结(四)——调用第三方提供的webService服务

    http://www.cnblogs.com/xdp-gacl/p/4260627.html 互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他 ...

  3. WebService学习总结(三)--调用第三方提供的webService服务

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取电子邮箱验证和查询火车时刻表和天气预报 ...

  4. 【WebService】调用第三方提供的webService服务(七)

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  5. WebService-调用第三方提供的webService服务

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  6. 延迟调用或多次调用第三方的Web API服务

    当我们调用第三方的Web API服务的时候,不一定每次都是成功的.这时候,我们可能会再多尝试几次,也有可能延迟一段时间再去尝试调用服务. Task的静态方法Delay允许我们延迟执行某个Task,此方 ...

  7. 调用别人提供的WebService

    在开发过程中,许多时候需要使用到别人提供的WebService接口,使用其中的方法. 在调用别人提供的接口时,会得到接口使用的文档,其中包括接口的网络地址及方法作用等. 找到WebService的ws ...

  8. WebService学习总结(三)——使用JDK开发WebService(转)

    一.WebService的开发手段 使用Java开发WebService时可以使用以下两种开发手段 1. 使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) 二.使用JDK开发Web ...

  9. 根据第三方提供的webservice地址获取文件信息

    import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.en ...

随机推荐

  1. sublime使用技巧之添加到右键菜单、集成VI

    熟悉开发工具,减少多余的操作流程有助于提高开发效率,而Sublime Text 2是sublime产品的经典版本,因此本文基于Sublime Text 2讲解sublime的使用技巧. VI的主要作用 ...

  2. 增强for 可以用于ArrayList

    ArrayList<Integer> list=null; for(int i : list){ sum+=i; }

  3. WebSocket协议解析

    WebSocket协议解析 转载请注明出处:WebSocket解析 现在,很多网站为了实现推送技术,所用的技术都是轮询.轮询是指在特定的时间间隔(如每一秒),由浏览器对服务器发起HTTP请求,然后由服 ...

  4. grpc 使用流程、使用技巧

    1.通过maven插件编译出java stub类. 2.对于批量调用的场景,我们可以使用FutureStub,对于普通的业务类型RPC,我们应该使用BlockingStub. 3.创建批量生成多个语言 ...

  5. win10 修改 无线名 无线网络属性 名称 修改

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha win10 修改 管理无线网络 无线网络属性 名称 修改 注册表 修改 ======== ...

  6. Git问题Everything up-to-date解决

    Git问题Everything up-to-date解决 [自己的亲身错误体验] 我的上一篇博客,说了怎么上传一个项目到git远程上面.今天我写好一个小栗子,准备再次上传的时候.我依旧是放在我的F:\ ...

  7. NDArray自动求导

    NDArray可以很方便的求解导数,比如下面的例子:(代码主要参考自https://zh.gluon.ai/chapter_crashcourse/autograd.html) 用代码实现如下: im ...

  8. Windows下USB磁盘开发系列一:枚举系统中U盘的盘符

    个时候我们需要区分系统磁盘中,哪些是U盘,这样我们在访问的时候可以区别对待.具体方法如下: 1,调用GetLogicalDrives()返回系统盘符标记位 API GetLogicalDrives() ...

  9. 经验:使用 Cache 时注意 DateTime.Now

    如果使用了缓存,比如方法 A 吧,那么你需要注意 DateTime.Now 对缓存的影响,简单来说,DateTime.Now 可能出现在两个地方: 在调用方,将 DateTime.Now 作为参数传递 ...

  10. Java的oauth2.0 服务端与客户端的实现

    oauth原理简述 oauth本身不是技术,而是一项资源授权协议,重点是协议!Apache基金会提供了针对Java的oauth封装.我们做Java web项目想要实现oauth协议进行资源授权访问,直 ...