---*以天气预报客户端查询为例***
4.1 wsdl接口或文件生成
可根据具体需求自行百度免费webservice接口,此处使用网址;http://www.webxml.com.cn/zh_cn/index.aspx,天气接口
可选择下载ws方法描述文件wsdl或者直接使用其提供的ws接口,此处以下载wsdl为例(后面会将以另一种方式演示实现):浏览器输入http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl得到页面
4.2 wsdl文件的解析及客户端方法的自动生成
对于wsdl文件的解析,需要对wsdl的各种结构方法有足够的掌握了解,通过其给定的方法构造自己的客户端;当然这里还有两种方式可以使其自动解析文件并生成客户端可以直接调用的方法,分别是:
1)JDK提供了一个wsimport.exe的命令,wsimport 是根据JDK1.6.0_21及以上的生成本地代码的,它只能解析服务器端的SOAP协议为1.1,不能解析SOAP1.2的协议。如果解析SOAP1.2 将会解析不完全。
wsimport 是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生存调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C# 编写的web service,通过wsimport则生成Java的客户端实现。
命令参数说明:
-d 生成客户端执行类的class文件的存放目录
-s 生成客户端执行类的源文件的存放目录
-p 定义生成类的包名
命令范例:wsimport -d ./bin -s ./src -p org.jsoso.jws.client.ref http://localhost:8080/hello?wsdl
2)CXF也提供了根据WSDL生成客户端代码的命令wsdl2java.exe 。它是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。
它可以支持SOAP1.1 和SOAP1.2的协议。
这里通过自动生成的第一种方法使用jdk给予ws的概况展示了解。首先在命令行进入生成保存文件的根目录,使用wsimort -keep wsdl文件路径,
4.3调用客户端方法传参实现查询
分析生成的客户端方法,发现下面的两个主要方法WeatherWS和WeatherWSSoap,其中后一个是所有上面方法的一个接口(Interface)。真正的总方法是WeatherWS,双击打开其继承接口WeatherWSSoap,并通过其方法getWeather获取信息:
public ArrayOfString getWeather(
@WebParam(name = “theCityCode”, targetNamespace = “http://WebXml.com.cn/“) String theCityCode,
@WebParam(name = “theUserID”, targetNamespace = “http://WebXml.com.cn/“) String theUserID);
于是在相同工程下单独建包编写客户端代码如下:
package com.weather.client;
import java.util.List;
import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;
public class ClientTest {
public static void main(String[] args) {
WeatherWS weatherWS=new WeatherWS(); //总方法类
WeatherWSSoap weatherWSSoap=weatherWS.getWeatherWSSoap();
ArrayOfString weather=weatherWSSoap.getWeather(“淄博”, null); //调用接口方法并传参
List list=weather.getString(); //序列化显示
for(String s :list){
System.out.println(s+”—–”); //内容格式化
}
}
}