用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<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);//調用接口方法





發佈了98 篇原創文章 · 獲贊 438 · 訪問量 78萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章