WebService系列之HttpClient调用WebService接口

你的名字 2021-09-07 06:17 1014阅读 0赞

测试工具下载soapui测试

http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
在这里插入图片描述

在这里插入图片描述

  1. package com.extra.credit.util;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import org.apache.commons.io.IOUtils;
  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.client.methods.CloseableHttpResponse;
  8. import org.apache.http.client.methods.HttpPost;
  9. import org.apache.http.entity.StringEntity;
  10. import org.apache.http.impl.client.CloseableHttpClient;
  11. import org.apache.http.impl.client.HttpClientBuilder;
  12. import org.apache.http.util.EntityUtils;
  13. import org.dom4j.Document;
  14. import org.dom4j.DocumentException;
  15. import org.dom4j.DocumentHelper;
  16. import org.dom4j.Element;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import org.springframework.stereotype.Component;
  20. import java.nio.charset.Charset;
  21. import java.util.List;
  22. /** * <pre> * 工具类:HttpClient方式调用webService服务 * </pre> * * <pre> * @author nicky ma * 修改记录 * 修改后版本: 修改人: 修改日期: 2021/03/11 10:05 修改内容: * </pre> */
  23. @Component
  24. public class WSHttpClientUils {
  25. static Logger log = LoggerFactory.getLogger(WSHttpClientUils.class);
  26. /** * HttpClient方式调用webservice api <br> * @Author mazq * @Date 2021/03/11 10:14 * @Param [point, params, methodName] * @return java.lang.String */
  27. public static String doPostWebServiceURL(String point, String params, String soapAction)throws Exception {
  28. String result = "";
  29. // 创建HttpClientBuilder
  30. HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
  31. // HttpClient
  32. CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
  33. HttpPost httpPost = new HttpPost(point);
  34. try {
  35. httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
  36. httpPost.setHeader("SOAPAction", soapAction);
  37. StringEntity data = new StringEntity(params,
  38. Charset.forName("UTF-8"));
  39. httpPost.setEntity(data);
  40. CloseableHttpResponse response = closeableHttpClient
  41. .execute(httpPost);
  42. HttpEntity httpEntity = response.getEntity();
  43. if (httpEntity != null) {
  44. result = EntityUtils.toString(httpEntity, "UTF-8");
  45. }
  46. } catch (Exception e) {
  47. log.error("调用远程WebService接口异常:{}" , e);
  48. throw e;
  49. }finally {
  50. IOUtils.closeQuietly(closeableHttpClient);
  51. }
  52. return result;
  53. }
  54. /** * xml转换为JSONObject <br> * @Author nicky ma * @Date 2021/03/11 10:01 * @Param [xmlStr] * @return com.alibaba.fastjson.JSONObject */
  55. public static JSONObject xml2Json(String xmlStr) throws DocumentException {
  56. Document doc = DocumentHelper.parseText(xmlStr);
  57. JSONObject json = new JSONObject();
  58. doParseXmlElements(doc.getRootElement() , json);
  59. return json;
  60. }
  61. /** * xml Document Elements解析 <br> * @Author nicky ma * @Date 2021/03/11 10:01 * @Param [element, json] * @return void */
  62. public static void doParseXmlElements(Element element, JSONObject json) {
  63. List<Element> chdEl = element.elements();
  64. for(Element e : chdEl){
  65. if (!e.elements().isEmpty()) {
  66. JSONObject chdjson = new JSONObject();
  67. doParseXmlElements(e, chdjson);
  68. Object o = json.get(e.getName());
  69. if (o != null) {
  70. JSONArray jsona = null;
  71. if (o instanceof JSONObject) {
  72. JSONObject jsono = (JSONObject) o;
  73. json.remove(e.getName());
  74. jsona = new JSONArray();
  75. jsona.add(jsono);
  76. jsona.add(chdjson);
  77. }
  78. if (o instanceof JSONArray) {
  79. jsona = (JSONArray) o;
  80. jsona.add(chdjson);
  81. }
  82. json.put(e.getName(), jsona);
  83. } else {
  84. if (!chdjson.isEmpty()) {
  85. json.put(e.getName(), chdjson);
  86. }
  87. }
  88. } else {
  89. if (!e.getText().isEmpty()) {
  90. json.put(e.getName(), e.getText());
  91. }
  92. }
  93. }
  94. }
  95. }
  96. protected Map<String , String> obtainTokenByHttp(String paramJson , String url) throws Exception {
  97. StringBuffer soapRequestParams = new StringBuffer();
  98. soapRequestParams.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.webservice.catalog.infotrust.com\">");
  99. soapRequestParams.append("<soapenv:Header/>");
  100. soapRequestParams.append("<soapenv:Body>");
  101. soapRequestParams.append("<ser:getToken>");
  102. soapRequestParams.append("<ser:in0>"+paramJson+"</ser:in0>");
  103. soapRequestParams.append("</ser:getToken>");
  104. soapRequestParams.append("</soapenv:Body>");
  105. soapRequestParams.append("</soapenv:Envelope>");
  106. logger.warn(String.format("request params:%s", soapRequestParams.toString()));
  107. String returnDatabase = WSHttpClientUils.doPostWebServiceURL(url , soapRequestParams.toString(),"");
  108. logger.warn(String.format("xml string:%s" , returnDatabase));
  109. com.alibaba.fastjson.JSONObject jsonObject = WSHttpClientUils.xml2Json(returnDatabase);
  110. com.alibaba.fastjson.JSONObject body = jsonObject.getJSONObject("Body");
  111. com.alibaba.fastjson.JSONObject getSafeTokenResponse = body.getJSONObject("getSafeTokenResponse");
  112. String out = getSafeTokenResponse.getString("out");
  113. com.alibaba.fastjson.JSONObject outJson = JSON.parseObject(out);
  114. String code = outJson.getString("code");
  115. String message = outJson.getString("message");
  116. String token = "";
  117. logger.warn(String.format("webservice api返回数据,code:%s,message:%s",code,
  118. message));
  119. if ("200".equals(code)) {
  120. token = outJson.getString("token");
  121. }
  122. if (logger.isInfoEnabled()) {
  123. logger.info(String.format("api token:%s", token));
  124. }
  125. Map<String,String> result = new HashMap<String, String>(2);
  126. result.put("token",token);
  127. return result;
  128. }

发表评论

表情:
评论列表 (有 0 条评论,1014人围观)

还没有评论,来说两句吧...

相关阅读