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

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

一、 调用免费的web service获取天气预报信息
1.1、找到提供天气预报信息的Webservice的网络地址
  http://ws.webxml.com.cn/WebServices/WeatherWS.asmx访问结果如下图所示:

java采集modbusrtu Java采集webservice_xml

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

java采集modbusrtu Java采集webservice_天气预报信息_02

1.2、客户端编码方式访问第三方提供的webService服务
  1、借助wsimport命令工具自动生成客户端代码
  创建一个测试项目,如下:

java采集modbusrtu Java采集webservice_国内手机号码归属地_03

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

java采集modbusrtu Java采集webservice_天气预报信息_04

运行结果显示,使用wsimport工具直接生成客户端代码会抛异常, 无法生成客户端代码, 只是因为我们要调用的WebService是用.net写的,这个是Java调用net的webservice都有的问题,这个问题的解决办法如下:
①将对应的wsdl文档保存到本地:D:\WeatherWS.wsdl

②修改wsdl文档的部分内容:将 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>   有多处都要替换

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

java采集modbusrtu Java采集webservice_国内手机号码归属地_05

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

java采集modbusrtu Java采集webservice_xml_06

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) {
		//创建一个WeathersWS工厂
		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("--------------");
		}
		
	}
}

访问结果如下:

java采集modbusrtu Java采集webservice_xml_07

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

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

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

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

java采集modbusrtu Java采集webservice_天气预报信息_08


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

java采集modbusrtu Java采集webservice_国内手机号码归属地_09


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

1、创建客户端项目

java采集modbusrtu Java采集webservice_国内手机号码归属地_10

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

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

java采集modbusrtu Java采集webservice_客户端_11


java采集modbusrtu Java采集webservice_客户端_12



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

java采集modbusrtu Java采集webservice_国内手机号码归属地_13

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

package me.gacl.ws.client;

import cn.com.webxml.MobileCodeWS;
import cn.com.webxml.MobileCodeWSSoap;

public class PhoneWsClient {
	public static void main(String[] args) {
		//创建一个MobileCodeWS工厂
		MobileCodeWS mobileCodeWS = new MobileCodeWS();
		//根据工厂创建一个MobileCodeWSSoap对象
		MobileCodeWSSoap mobileCodeWSSoap = mobileCodeWS.getMobileCodeWSSoap();
		//调用WebService提供的getMobileCodeInfo方法查询手机号码的归属地
		String info = mobileCodeWSSoap.getMobileCodeInfo("13027613281", null);
		System.out.println(info);
	}
}



结果如下:

java采集modbusrtu Java采集webservice_天气预报信息_14

这样我们调用第三方提供的WebService服务成功查询到了手机号码的归属地。
以上就是如何调用第三方WebService的相关内容。