序言: 在很多站点网页的最上方,我们经常会看到一个非常人性化的设计---天气预报。在一些网站上,我们输出一个手机号码,就能查出这个号码的归属地。虽然功能看起来不是特别复
序言:
在很多站点网页的最上方,我们经常会看到一个非常人性化的设计---天气预报。在一些网站上,我们输出一个手机号码,就能查出这个号码的归属地。虽然功能看起来不是特别复杂,但是要收集大量的数据。对于一个公司来说,单独去维护一些这样的功能显然是不合适的。但是通过WebService,就能轻易的实现这些功能
一、查找WEB服务
在网上,可以搜到大量的WEB服务。http://www.webxml.com.cn/zh_cn/index.aspx这里面收集了许多免费WEB服务,手机号码归属地和天气预报的wsdl文档都可以在这个网站上查询。
二、编写天气预报的WebService
打开上文提到的网址,找到天气预报WEB服务,点进去以后会有一个“服务说明的”超链接。点进去以后看到的内容,大家都很熟悉了,就是我们需要的wsdl文档。 复制wsdl的地址,现在eclipse里面的Web Service浏览器内看下是否能访问
在WeatherWSSoap里面有个getWeather方法,body点add输入一个城市名字,就会得到相应城市的天气状况。
上篇,已经介绍了利用JDK中wsimport工具生成客户端代码,本篇就不再赘述。 新建一个web项目,生成客户端代码
好恐怖!竟然出现了错误,这是因为Service端是用.net写的。用java调的话会出现这种错误。解决的方法是需要改一下wsdl文档中的一段代码。 我们通过url的方式生成代码,显然没法修改wsdl文档,需要我们 把wsdl文档保存到本地 。进行修改后,再利用JDK使用路径的方式进行生成。 在我们的项目上右击new >>>new file 建一个weather.wsdl
再次打开我们查询到的wsdl文档的页面, 右击查看源文件 。全部复制,粘贴到我们建好了的weather.wsdl文件中保存。这时可能会报错,没有报错的话, ctrl+f 查找<s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>
再次生成一下,这次把url改为本地路径,继续执行生成命令,这次有警告,先不要理它
刷新下我们的项目,会看到生成后客户端代码,写一个测试类,看看是否能获取到天气预报信息package cn.com.webxml.test; import java.util.List; import cn.com.webxml.ArrayOfString; import cn.com.webxml.WeatherWS; import cn.com.webxml.WeatherWSSoap; public class WeatherWSTest { /** * @param args */ public static void main(String[] args) { WeatherWS weatherWS = new WeatherWS(); WeatherWSSoap weatherWSSoap = weatherWS.getWeatherWSSoap(); ArrayOfString weather = weatherWSSoap.getWeather("天津", null); List<String> list = weather.getString(); System.out.println(list); } }这里,我们需要调用一个方法,这个方法可以通过wsdl中<wsdl:service name="WeatherWS">标签获取
运行mian方法,查看控制台,就会得到相应城市的天气情况
三、编写归属地查询WebService
经过上面的demo,再写一个归属地查询的WebService应该是轻而易举了。经过测试,发现这次利用jdk通过url生成客户端代码,不会报错。在wsdl文档中<wsdl:service name="xxx">找到调用的类。