互联网上面有很多的免费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:如下:

  

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文档保存到本地

  

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

  

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

  

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

  

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

 1 package me.gacl.ws.client;
2
3 import java.util.List;
4
5 import cn.com.webxml.ArrayOfString;
6 import cn.com.webxml.WeatherWS;
7 import cn.com.webxml.WeatherWSSoap;
8
9 public class WeatherWSClient {
10
11 public static void main(String[] args) {
12 //创建一个WeatherWS工厂
13 WeatherWS factory = new WeatherWS();
14 //根据工厂创建一个WeatherWSSoap对象
15 WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap();
16 //调用WebService提供的getWeather方法获取南宁市的天气预报情况
17 ArrayOfString weatherInfo = weatherWSSoap.getWeather("南宁", null);
18 List<String> lstWeatherInfo = weatherInfo.getString();
19 //遍历天气预报信息
20 for (String string : lstWeatherInfo) {
21 System.out.println(string);
22 System.out.println("------------------------");
23 }
24 }
25 }

  访问结果如下:

广西 南宁
------------------------
南宁
------------------------
2391
------------------------
2015/01/29 19:00:49
------------------------
今日天气实况:暂无实况
------------------------
空气质量:暂无;紫外线强度:最弱
------------------------
太阳镜指数:不需要。白天光线弱不需要佩戴太阳镜。
穿衣指数:较舒适。建议穿薄外套或牛仔裤等服装。
旅游指数:适宜。温度适宜,可尽情享受大自然风光。
运动指数:较适宜。较适宜进行各种户内外运动。
洗车指数:不宜。有雨,雨水和泥水会弄脏爱车。
化妆指数:保湿。请选用中性保湿型霜类化妆品。
感冒指数:较易发。天较凉,增加衣服,注意防护。
空气污染指数:暂无。
紫外线指数:最弱。辐射弱,涂擦SPF8-12防晒护肤品。
舒适度指数:舒适。白天不冷不热,风力不大。 ------------------------
1月29日 多云
------------------------
11℃/15℃
------------------------
东北风微风
------------------------
1.gif
------------------------
1.gif
------------------------
1月30日 小雨转阴
------------------------
10℃/15℃
------------------------
东北风微风
------------------------
7.gif
------------------------
2.gif
------------------------
1月31日 多云
------------------------
11℃/13℃
------------------------
东北风微风
------------------------
1.gif
------------------------
1.gif
------------------------
2月1日 多云
------------------------
12℃/17℃
------------------------
东北风微风
------------------------
1.gif
------------------------
1.gif
------------------------
2月2日 阴转多云
------------------------
13℃/18℃
------------------------
东北风微风
------------------------
2.gif
------------------------
1.gif
------------------------

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

二、 调用免费的web service查询国内手机号码归属地

2.1、找到提供服务的Webservice的网络地址

  http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx 如下所示:

  

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

  

2.2、编写客户端访问调用WebService服务

1、创建客户端项目

  

2、根据WebService的wsdl描述生成客户端代码

  打开命令行窗口,切换到Phone_Client的src目录,执行wsimport -keep http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 如下图所示:

  

  这次可以直接使用wsdl生成代码,不再需要将wsdl文件下载到本地进行修改了,这个WebService应该不是使用.net写的,生成的代码如下:

  

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

 1 package me.gacl.ws.client;
2
3 import cn.com.webxml.MobileCodeWS;
4 import cn.com.webxml.MobileCodeWSSoap;
5
6 public class PhoneWsClient {
7
8 public static void main(String[] args) {
9 //创建一个MobileCodeWS工厂
10 MobileCodeWS factory = new MobileCodeWS();
11 //根据工厂创建一个MobileCodeWSSoap对象
12 MobileCodeWSSoap mobileCodeWSSoap = factory.getMobileCodeWSSoap();
13 ////调用WebService提供的getMobileCodeInfo方法查询手机号码的归属地
14 String searchResult = mobileCodeWSSoap.getMobileCodeInfo("15177196635", null);
15 System.out.println(searchResult);
16 }
17 }

  运行结果如下:

  

  这样我们调用第三方提供的WebService服务成功查询到了手机号码的归宿地。

  以上就是如何调用第三方WebService的相关内容。

[置顶] WebService学习总结(4)——第三方webService服务调用的更多相关文章

  1. [置顶] Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

    本文根据[2016 全球运维大会•深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中 ...

  2. [置顶] 小白学习KM算法详细总结--附上模板题hdu2255

    KM算法是基于匈牙利算法求最大或最小权值的完备匹配 关于KM不知道看了多久,每次都不能完全理解,今天花了很久的时间做个总结,归纳以及结合别人的总结给出自己的理解,希望自己以后来看能一目了然,也希望对刚 ...

  3. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

  4. [置顶] Guava学习之ArrayListMultimap

    ArrayListMultimap类的继承关系如下图所示: Guava ArrayListMultimap List Multimap 是一个接口,继承自 Multimap 接口.ListMultim ...

  5. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  6. [置顶] Android学习系列-把文件保存到SD卡上面(6)

    Android学习系列-把文件保存到SD卡上面(5) 一般多媒体文件,大文件需要保存到SD卡中.关键点如下: 1,SD卡保存目录:mnt/sdcard,一般采用Environment.getExter ...

  7. [置顶] Guava学习之Splitter

    Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recogni ...

  8. [置顶] Guava学习之Iterators

    Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法.除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable ...

  9. [置顶] Guava学习之Lists

    Lists类主要提供了对List类的子类构造以及操作的静态方法.在Lists类中支持构造ArrayList.LinkedList以及newCopyOnWriteArrayList对象的方法.其中提供了 ...

  10. [置顶] Guava学习之Immutable集合

    Immutable中文意思就是不可变.那为什么需要构建一个不可变的对象?原因有以下几点: 在并发程序中,使用Immutable既保证线程安全性,也大大增强了并发时的效率(跟并发锁方式相比).尤其当一个 ...

随机推荐

  1. 昼猫笔记 JavaScript -- 闭包

      本次主要内容是 闭包 阅读时间: 约 3分钟 记得点个赞支持支持我哦 初步了解 先看下代码,输出结果是多少? function fn1 () { var a = 2 function fn2 () ...

  2. Linux学习总结(5)——CentOS常用的目录文件操作命令

    CentOS常用的目录文件操作命令 一.路径操作的CentOS常用命令  cd pwd  NO1. 显示当前路径  [root@rehat root]# pwd  NO2. 返回用户主目录  [roo ...

  3. jni中调用java方法获取当前apk的签名文件md5值

    相应的java方法: void getsign(Context context) throws Exception { PackageInfo localPackageInfo = context.g ...

  4. (七十一)关于UITableView退出崩溃的问题和滚动究竟部的方法

    [TableView退出崩溃的问题] 近期在使用TableView时偶然发如今TableView中数据较多时,假设在滚动过程中退出TableView到上一界面.会引起程序的崩溃.经过网上查阅和思考我发 ...

  5. 思科2960trunk vlan配置及路由IP配置

    en conf t vlan id end conf t inter rang gi 0/0/1-x switchport access vlan id no shutdown exit (confi ...

  6. 79.QT解决迷宫问题(面向过程与面向对象)

    面向过程: 创建一个类继承dialog,mydialog,添加两个变量 #ifndef MYDIALOG_H #define MYDIALOG_H #include <QDialog>&g ...

  7. BZOJ 1355 KMP中next数组的应用

    思路: 我们知道 next[i]是失配的i下一步要去哪儿 next[n]就是失配的n要去哪儿 n-next[n]就是答案(即最短周期)啦 //By SiriusRen #include <cst ...

  8. LuoguP2765 魔术球问题(最大流)

    题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全 ...

  9. linux系统下的/proc目录介绍

    1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以 ...

  10. Jquery Validator 增加自定义验证方法

    $(document).ready(function () { jQuery.validator.addMethod("namerepeate", function(value, ...