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

原创 2017年03月15日 10:46:37

前言:

用了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<Map<String,String>>)

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<String> x=SoapResolver.xmlToList(xml1);
	System.err.println("转换后的结果:"+x);



完整结果xml:

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

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

[阿尔及利亚,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<String,String> map=new HashMap<String,String>();
map.put("UserName",userName);
map.put("Password",password);
client.setHeader(map);//设置凭证
client.access(soapAction);//调用接口方法





版权声明:做好自己!--eguid温馨提示:本博客所有原创文章均采用知识共享署名-相同方式共享 3.0 中国大陆许可协议进行许可。如有转载请注明出处和作者名!

相关文章推荐

java使用soap方式简单实现webservice

java类: import java.net.URL; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactor...
  • nohero1
  • nohero1
  • 2014年02月28日 14:56
  • 51941

java使用soap方式简单实现webservice (二)

上一篇从 xml 中找对应的参数比较麻烦,这里介绍用 SOAPUI 的方式填写参数 这里为实际调用 .net的 短信发送服务测试import java.net.URL; import javax...
  • nohero1
  • nohero1
  • 2015年10月13日 10:53
  • 10222

WebService:设置服务器提供SOAP1.2的服务

1,访问通过cxf发布的服务 (1)与之前一样,同样可以通过在本地通过wsdl文件和命令行生成Java文件来访问服务。 但是我们既然使用了cxf发布,就要通过cxf的工具生成访问。可以通过cxf目...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

SOAP1.1和1.2 深入解析WSDL

主要分析1.1与1.2的区别点,注意1.1的客户端方式可以兼容1.2的服务端。 WebService只采用HTTP POST方式传输数据,不使用GET方式;  普通http post的co...

基于Java的webservice创建与soap方式调用

一、创建(服务端) 建立普通类,代码: 浏览器键入http://localhost:8083/HelloWorld 二、调用(客户端) 1、利用SoapUI获取请求报文 创建S...

Java中Soap的几种使用方法(android 可用)

本文章使用的是http://www.webxml.com.cn/WebServices/WeatherWebService.asmx中的webservice中的soap使用方法。 SOAP使用方...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)
举报原因:
原因补充:

(最多只允许输入30个字)