WebService之Java原生态支持(二)

在上一篇博客WebService之Java原生态支持中,我们通过编写一个WebService的服务器端和客户端演示了WebService的基本过程,下面直接来演示如果去访问别人家的WebSerivce的服务端来获取咱们需要的数据;

首先解释一下客户端的开发思路,首先去查看对应WebService的服务说明文件,了解服务器端定义了哪些功能,需要接受什么样的参数,返回什么类型的数据等,然后根据WSDL(上篇博客中说道:该文件用来记录WebService端暴露的服务信息)生成一系列代理类文件,最后直接调用就可以了,好了,开始上例子:

1、首先打开WebService之天气预报的服务说明文件,http://ws.webxml.com.cn/WebServices/WeatherWS.asmx,部分显示内容如下:


通过阅读上述服务说明文件,可以得知该WebService服务提供了两个功能,获取该WebService所支持的全部城市的中英文名称和缩写以及获取航班时刻表这两个服务,这两个服务接受的参数、返回值类型等!

2、然后新建一个WebService客户端项目,调用jdk的wsimport命令,准备生成代理文件,这时候会发生如下错误:


这个原因是什么呢?由于WebService是跨语言平台的,什么意思呢?就是比如你用.net语言开发的WebService,Java客户端可以无障碍调用,说白了,只要是按照一定的格式开发的WebService,不同语言直接可以实现无障碍调用,但需要搞清楚的是对于wsdl文件的生成,每种语言一般都使用基于自己语言的生成工具,举个例子就是基于.net的wsdl生成工具生成的wsdl文件,当调用java的wsimport解析时就会报上述错误,好了,了解了错误原因,那么解决方法如下:

首先将wsdl文件右键另存为WeatherWS.xml,打开该文件,将里面内容统一替换成,然后再次调用下列命令,需要注意的是-keep后面的参数改为DomesticAirline.xml的路径!


上述命令在运行时会出现警告,无视就可以了,命令执行完毕后,会生成几个代理类。

3、开始测试对远程WebService服务端的调用,直接上测试代码:

package cn.com.webxml;

import java.util.List;
import org.junit.Test;

public class WeatherWSTest {

	@Test
	public void dogetWeatherServiceTest() {
		// 创建一个WeatherWS工厂
		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("------------------------");
		}
	}

}
结果部分如下:


其他服务的调用就不在此演示了,依次类推,最后给介绍一个常用的WebService网站,如下:

http://www.webxml.com.cn/zh_cn/index.aspx ,可以针对性的练习!


猜你喜欢

转载自blog.csdn.net/yu102655/article/details/53256569
今日推荐