1、到官网下载cxf的包,放到新建项目中;
2、修改wsdl文件(本例问题)
打开http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl,另存为WeatherWebService.wsdl文件。在文件中的所有<s:element ref="s:schema"/><s:any/>的这部分内容改为 <s:any minOccurs="2" maxOccurs="2"/>,因为如果不更改会运行的时候会报不认识
s:schema元素,使用axis方式的话不会出现这个情况。
3、通过wsdl2java工具来生成客户端代码
wsdl2java -client -d D:/temp -p WSDL2Java -frontend jaxws21 WeatherWebService.wsdl
- -d是指定生成文件目录;
- -p是指定生成文件包名;
- -frontend是指定前端类型及版本。
其中,
WeatherWebService.wsdl文件要放在wsdl2java工具的同目录下,
WeatherWebService.wsdl可以是url链接。
在cmd中输入以上命令后生成如下文件:
在WeatherWebService.java类中,修改31行开始的代码,代码如下:
static {
// URL url = WeatherWebService.class.getResource("WeatherWebService.wsdl");
// System.out.println(url);
// if (url == null) {
// url = WeatherWebService.class.getClassLoader().getResource("WeatherWebService.wsdl");
// }
// if (url == null) {
// java.util.logging.Logger.getLogger(WeatherWebService.class.getName())
// .log(java.util.logging.Level.INFO,
// "Can not initialize the default wsdl from {0}", "WeatherWebService.wsdl");
// }
URL url = null;
try {
url = new URL("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
} catch (MalformedURLException e) {
java.util.logging.Logger.getLogger(WeatherWebService.class.getName())
.log(java.util.logging.Level.INFO,
"Can not initialize the default wsdl from {0}", "WeatherWebService.wsdl");
}
WSDL_LOCATION = url;
4、客户端测试
新建一个测试类,代码如下:
WeatherWebServiceSoap client2 = new WeatherWebService().getWeatherWebServiceSoap();
ArrayOfString result = client2.getWeatherbyCityName("青岛");
List<String> list = result.getString();
for(int index = 0; index < list.size(); index ++) {
System.out.println(index + "," + list.get(index));
}
就可以打印出青岛的天气情况了。