CXF初步教程(续)
刚才想重温一下WebService,找到了之前写的一篇文档,很久之前也分享过一篇文档,这一篇应该是后来整理的。 4 使用CXF编写客户端4.1 WSDL2Java generated Client
如:wsdl2java –client XX.wsdl 5 实例教程-WebService 天气预报首先,我们到网站http://www.webxml.com.cn/zh_cn/web_services.aspx,这个网站有很多可以免费使用的Web服务。 5.1 使用wsdl2java 命令生成客户端代码由于这个WSDL是使用.net发布的,使用Java调用会出现一些问题,所以我们将WSDL文件保存到本地,做适当的修改。 图 5S:Schema错误 这里的一篇博客,记录了这个错误: http://www.cnblogs.com/hzhuxin/archive/2011/05/25/2057142.html, 我们将WSDL保存到本地,然后用<s:any minOccurs="2" maxOccurs="2"/>替代<s:elementref="s:schema" /><s:any /> 我们使用命令wsdl2java -frontend jaxws21 -client E:test.wsdl来生成客户端。 5.2 测试开放的接口测试代码: package org.ygy.client; import java.util.List; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.junit.Before; import org.junit.Test; import org.ygy.weather.ArrayOfString; import org.ygy.weather.WeatherWebServiceSoap; import org.ygy.weather.GetSupportDataSetResponse.GetSupportDataSetResult; public class WeatherClient { private WeatherWebServiceSoap client = null; @Before public void before() { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setAddress("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"); factory.setServiceClass(WeatherWebServiceSoap.class); client = (WeatherWebServiceSoap) factory.create(); } @Test public void testGetSupportCity() { ArrayOfString result = client.getSupportCity("辽宁"); for(String each : result.getString()) { System.out.println(each); } } @Test public void testGetSupportDataSet() { GetSupportDataSetResult temp = client.getSupportDataSet(); for(Object each : temp.getAny()) { System.out.println(each); } } @Test public void testGetSupportProvince() { ArrayOfString result = client.getSupportProvince(); for(String each : result.getString()) { System.out.println(each); } } @Test public void testGetWeatherByCityName() { ArrayOfString result = client.getWeatherbyCityName("青岛"); List<String> list = result.getString(); for(int index = 0; index < list.size(); index ++) { System.out.println(index + "," + list.get(index)); } } } 上面的测试,除了testGetSupportDataSet()得到的结果不正确,其他的测试都正确。 到这里,我们就差不多完成了。 因为,省市的数据不会经常改变,所以我们可以将省,市的数据保存起来,这样就不需要每一次都通过网络连接去获取,直接从本地拿比较快。 我们唯一要做的就是,通过接口 getWeatherByCityName(),来获取天气信息了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |