【转】java调用webservice
互联网上面有很多的免费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都有的问题,这个问题的解决办法如下:
- 将对应的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的相关内容。
【转】java调用webservice的更多相关文章
- Java调用webservice接口方法
java调用webservice接口 webservice的 发布一般都是使用WSDL(web service descriptive langu ...
- java 调用webservice的各种方法总结
java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...
- Axis2 webservice 之使用java调用webservice
在上一篇中写了一个简单了webservice,实现了一个sayHello功能.那么webservice写好之后我们如何使用Java程序来调用webservice呢? 一.java调用的webservi ...
- java调用webservice,restful
java调用webservice public String redoEsb(String loguid, String user, String comments, String newMsg, S ...
- 原生java调用webservice的方法,不用生成客户端代码
原生java调用webservice的方法,不用生成客户端代码 2015年10月29日 16:46:59 阅读数:1455 <span style="font-family: Aria ...
- Java调用Webservice(asmx)的几个例子
Java调用Webservice(asmx)的几个例子 2009-06-28 17:07 写了几个调用例子: 1. import org.apache.axis.client.*;import org ...
- Java调用WebService方法总结(9,end)--Http方式调用WebService
Http方式调用WebService,直接发送soap消息到服务端,然后自己解析服务端返回的结果,这种方式比较简单粗暴,也很好用:soap消息可以通过SoapUI来生成,也很方便.文中所使用到的软件版 ...
- Java调用WebService方法总结(8)--soap.jar调用WebService
Apache的soap.jar是一种历史很久远的WebService技术,大概是2001年左右的技术,所需soap.jar可以在http://archive.apache.org/dist/ws/so ...
- Java调用WebService方法总结(7)--CXF调用WebService
CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架.文中所使用到的软件版本:Java 1.8.0_1 ...
- Java调用WebService方法总结(6)--XFire调用WebService
XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...
随机推荐
- extern关键字
1.extern "C" void func(){...} extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其 ...
- man curl_easy_init(原创)
curl_easy_init(3) libcurl 手册 curl_easy_init(3) 名字 curl_easy_init - 开始一个简单的libcurl会话 梗概 #include < ...
- ios -网络加载json和本地加载json
1网络加载json的时候,要在模型的实现文件里写: - (void)setValue:(id)value forKey:(NSString *)key { } 2本地加载json的时候,要在模型的实现 ...
- Android调试小技巧(LogCat不输出、Log自动清空、install时timeout)
问题:有时候明明连接了设备,而LogCat却没有输出 解决方法:在device界面点一下对应设备,使其处于选中状态(它适用于查看手机文件不显示的情况) 问题:前面记录的Log看着看着突然被清空了 解决 ...
- ng-repeat产生的对象会带有$$hashkey属性处理方法
angularJS在ng-repeat的时候会产生一个$$hashkey的属性向后台发送请求的时候需要转成JSON的string格式(如果是使用ng自带的$http服务的话可以无视,$http服务会自 ...
- SQL Server创建复合索引时,复合索引列顺序对查询的性能影响
说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因:一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗?二来觉得,索引是个非常大的话题,很难概括 ...
- Java CopyOnWriteArrayList
1. 为什么需要 CopyOnWriteArrayList ArrayList 的内部实现是一个数组, 并且是动态扩容的, 当插入数据时, 先判断数组是否需要扩容, 如果需要扩容, 则先扩容, 再插入 ...
- Create side-by-side stereo pairs in the Unity game engine
Create side-by-side stereo pairs in the Unity game engine Paul BourkeDecember 2008 Sample Island pro ...
- NC 解决启动环境报内存溢出问题
java heap space 内存溢出 解决方法如下: 在eclipse中,window-->preferences-->Java-->Installed JREs选中JRE 点击 ...
- CentOS下MySQL数据库安装
前辈们总是说,要边学边记录,要总结.所以,开始把每天学到的内容一点一点记录. 复杂的理论不懂,只会目前安装,安好后就开始玩咯! 1.在官网下载相应的rpm安装包 下载地址:http://dev.mys ...