用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)

前言:

用了cxf,axis等各种wbeservice实现库,简单试用了一下动态调用的方式,很不满意,完全无法满足业务的需要,所以自己实现了一个webservice采集客户端,方便动态调用外部webservice接口。

一、实现的功能

1、soap1.1客户端(soap1.1采集器)

2、soap1.2客户端(soap1.2采集器)

3、公共接口访问器

4、结果集获取(直接获取结果中的Result节点)

5、解析器,实现xml与java格式互转(支持格式:List,Map,String,Array,List>)

6、解析器与采集器分离,采集完之后可以自行解析xml结果

二、开源项目地址及下载

本项目依赖dom4j-1.6.1.jar和jaxen1.1.6.jar两个包

源码下载地址:http://download.csdn.net/detail/eguid_1/9781645

github项目地址:

三、使用方式及测试结果

	Client client1=new SoapClient();
	//命名空间
	client1.setXmlns("http://WebXml.com.cn/");
	//接口访问地址,方法名
	String xml1=client1.access("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx","getRegionCountry");
	System.err.println("采集器返回的结果:"+xml1);
	List x=SoapResolver.xmlToList(xml1);
	System.err.println("转换后的结果:"+x);



完整结果xml:

阿尔及利亚,3320阿根廷,3522阿曼,3170阿塞拜疆,3176埃及,3317埃塞俄比亚,3314爱尔兰,3246奥地利,3237澳大利亚,368巴基斯坦,3169巴西,3580保加利亚,3232比利时,3243波兰,3235朝鲜,3163丹麦,3245德国,3238俄罗斯,3225法国,3241菲律宾,3151芬兰,3248刚果(金),3377哥伦比亚,3524古巴,344韩国,3162荷兰,3244加拿大,347加纳,3313柬埔寨,3154捷克,3236克罗地亚,3233肯尼亚,3316拉托维亚,3228老挝,3155立陶宛,3227马达加斯加,3312马尔代夫,3166马来西亚,3158马里,3319美国,346蒙古,3165秘鲁,3578缅甸,3160莫桑比克,3311墨西哥,345南非,3310尼泊尔,3164尼日利亚,3379挪威,3250葡萄牙,3239日本,3161瑞典,3249瑞士,3242塞内加尔,3318沙特阿拉伯,3172斯里兰卡,3167泰国,3159坦桑尼亚,3315突尼斯,3321土耳其,3229委内瑞拉,342文莱,3153乌克兰,3226乌兹别克斯坦,3175西班牙,3240希腊,3230新加坡,3157新西兰,369匈牙利,3234叙利亚,3174牙买加,343伊朗,3171意大利,3231印度,3168印度尼西亚,3152英国,3247约旦,3173越南,3156智利,3523
采集器返回的结果:

阿尔及利亚,3320阿根廷,3522阿曼,3170阿塞拜疆,3176埃及,3317埃塞俄比亚,3314爱尔兰,3246奥地利,3237澳大利亚,368巴基斯坦,3169巴西,3580保加利亚,3232比利时,3243波兰,3235朝鲜,3163丹麦,3245德国,3238俄罗斯,3225法国,3241菲律宾,3151芬兰,3248刚果(金),3377哥伦比亚,3524古巴,344韩国,3162荷兰,3244加拿大,347加纳,3313柬埔寨,3154捷克,3236克罗地亚,3233肯尼亚,3316拉托维亚,3228老挝,3155立陶宛,3227马达加斯加,3312马尔代夫,3166马来西亚,3158马里,3319美国,346蒙古,3165秘鲁,3578缅甸,3160莫桑比克,3311墨西哥,345南非,3310尼泊尔,3164尼日利亚,3379挪威,3250葡萄牙,3239日本,3161瑞典,3249瑞士,3242塞内加尔,3318沙特阿拉伯,3172斯里兰卡,3167泰国,3159坦桑尼亚,3315突尼斯,3321土耳其,3229委内瑞拉,342文莱,3153乌克兰,3226乌兹别克斯坦,3175西班牙,3240希腊,3230新加坡,3157新西兰,369匈牙利,3234叙利亚,3174牙买加,343伊朗,3171意大利,3231印度,3168印度尼西亚,3152英国,3247约旦,3173越南,3156智利,3523
转换后的结果:

[阿尔及利亚,3320, 阿根廷,3522, 阿曼,3170, 阿塞拜疆,3176, 埃及,3317, 埃塞俄比亚,3314, 爱尔兰,3246, 奥地利,3237, 澳大利亚,368, 巴基斯坦,3169, 巴西,3580, 保加利亚,3232, 比利时,3243, 波兰,3235, 朝鲜,3163, 丹麦,3245, 德国,3238, 俄罗斯,3225, 法国,3241, 菲律宾,3151, 芬兰,3248, 刚果(金),3377, 哥伦比亚,3524, 古巴,344, 韩国,3162, 荷兰,3244, 加拿大,347, 加纳,3313, 柬埔寨,3154, 捷克,3236, 克罗地亚,3233, 肯尼亚,3316, 拉托维亚,3228, 老挝,3155, 立陶宛,3227, 马达加斯加,3312, 马尔代夫,3166, 马来西亚,3158, 马里,3319, 美国,346, 蒙古,3165, 秘鲁,3578, 缅甸,3160, 莫桑比克,3311, 墨西哥,345, 南非,3310, 尼泊尔,3164, 尼日利亚,3379, 挪威,3250, 葡萄牙,3239, 日本,3161, 瑞典,3249, 瑞士,3242, 塞内加尔,3318, 沙特阿拉伯,3172, 斯里兰卡,3167, 泰国,3159, 坦桑尼亚,3315, 突尼斯,3321, 土耳其,3229, 委内瑞拉,342, 文莱,3153, 乌克兰,3226, 乌兹别克斯坦,3175, 西班牙,3240, 希腊,3230, 新加坡,3157, 新西兰,369, 匈牙利,3234, 叙利亚,3174, 牙买加,343, 伊朗,3171, 意大利,3231, 印度,3168, 印度尼西亚,3152, 英国,3247, 约旦,3173, 越南,3156, 智利,3523]


另外一种用法:

 Client =new SoapClient();
//接口访问地址
client.setUrl(urlString);
//命名空间
client.setXmlns(xmlns);
Map map=new HashMap();
map.put("UserName",userName);
map.put("Password",password);
client.setHeader(map);//设置凭证
client.access(soapAction);//调用接口方法





你可能感兴趣的:(java,webservice)