前言:这篇文章的内容主要是参考了一些csdn上的童鞋写的文章来实现第三方webservice的调用, 按照网上的方法步骤经过自己一步一步的实践操作,中间又遇到了很多问题,这里来做个总结,希望可以帮助大家 ,如果内容有雷同希望见谅,蟹蟹啦。
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据为例进行说明。
气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server), 而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).
1.1、找到提供天气预报信息的Webservice的网络地址
找到 webService 的wsdl 的描述,通过URL地址访问http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 访问结果如下图所示:
然后点鼠标右键,将网页内容另存为到本地桌面(当然你也可以放在其他地方),需要注意的是保存到本地的文件后缀默认是.xml格式的
因为我们后面需要用wsimport 命令工具自动生产客户端代码,所以我们需要将文件的后缀名改为.wsdl.我生产的如下图所示:
1.2、客户端编码方式访问第三方提供的webService服务
1、借助wsimport命令工具自动生成客户端代码
1.1、创建一个java web测试项目weatherInfo
1.2、引入相应的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
搭建完毕形成的项目结构目录如下:
接下来,单开命令窗口,切换到项目的src目录(我的项目目录为:D:\WorkSpace\weatherInfo\src)大家可以根据自己的实际情况切换目录,然后执行 "wsimport -keep C:\Users\Administrator\Desktop\newWS.wsdl " kepp后面跟的路径就是之前我们放在桌面的newWS.wsdl文件的路径,生产客户端代码,执行结果如下:
运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,这个问题的解决办法如下:
修改本地的newWS.wsdl文件的部分内容将:
<s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>
改好之后在保存,重新执行之前执行的命令,运行结果如下:
从执行结果显示,这一次可以正常生成代码了,刷新一下src目录,就可以看到生成的代码了,如下图所示:
2、借助生成的代码编写请求代码:
测试结果如下:
这样,我们通过生成的Client代码调用了第三方提供的webService服务获取到了成都市的天气预报信息。
结尾:
需要大家注意的是我们再调用的时候要调用免费的webservice 不然就会验证不通过。