HttpXmlUtil.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.ydtech.utils;
  2. import com.ydtech.exception.SystemException;
  3. import lombok.extern.slf4j.Slf4j;
  4. import okhttp3.*;
  5. import org.apache.commons.text.StringEscapeUtils;
  6. import org.slf4j.Logger;
  7. import java.util.concurrent.Executors;
  8. import java.util.concurrent.TimeUnit;
  9. import java.util.regex.Matcher;
  10. import java.util.regex.Pattern;
  11. /**
  12. * @author gws
  13. * @description:TODO
  14. * @date 2022-07-13 09:52
  15. */
  16. @Slf4j
  17. public class HttpXmlUtil {
  18. // public final static OkHttpClient client = new OkHttpClient.Builder()
  19. // .connectTimeout(120, TimeUnit.SECONDS)
  20. // .writeTimeout(120, TimeUnit.SECONDS)
  21. // .readTimeout(120, TimeUnit.SECONDS)
  22. // .build();
  23. private static OkHttpClient client;
  24. private static OkHttpClient getInstance() {
  25. if (client == null) {
  26. synchronized (OkHttpClient.class) {
  27. if (client == null) {
  28. client = new OkHttpClient.Builder()
  29. .connectTimeout(60, TimeUnit.SECONDS)
  30. .writeTimeout(360, TimeUnit.SECONDS)
  31. .readTimeout(360, TimeUnit.SECONDS)
  32. .dispatcher(new Dispatcher(Executors.newFixedThreadPool(20)))
  33. .retryOnConnectionFailure(true)//设置是否开启连接失败时的重试。
  34. //addInterceptor(Interceptor interceptor); // 添加拦截器,用于处理请求重试逻辑。
  35. .build();
  36. }
  37. }
  38. }
  39. return client;
  40. }
  41. /**
  42. * 发送xml请求到server端
  43. *
  44. * @param url xml请求数据地址
  45. * @param xmlString 发送的xml数据流
  46. * @return null发送失败,否则返回响应内容
  47. */
  48. public static String sendPost(String url, String xmlString) {
  49. System.out.println("请求参数=" + xmlString);
  50. System.out.println("请求参数=" + XMLFormat.format(xmlString));
  51. Response response = null;
  52. String responseString = null;
  53. try {
  54. OkHttpClient client = new OkHttpClient.Builder()
  55. .connectTimeout(60, TimeUnit.SECONDS)
  56. .writeTimeout(60, TimeUnit.SECONDS)
  57. .readTimeout(60, TimeUnit.SECONDS)
  58. .build();
  59. MediaType mediaType = MediaType.parse("text/xml");
  60. RequestBody body = RequestBody.create(mediaType, xmlString);
  61. Request request = new Request.Builder()
  62. .url(url)
  63. .post(body)
  64. .addHeader("Content-Type", "text/xml")
  65. .addHeader("cache-control", "no-cache")
  66. .build();
  67. response = client.newCall(request).execute();
  68. if (response.isSuccessful()) {
  69. responseString = response.body().string();
  70. }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. } finally {
  74. response.close();
  75. }
  76. System.out.println("返回参数=" + responseString);
  77. String[] patterns = new String[]{
  78. // This will remove empty elements that look like <ElementName/>
  79. "\\s*<\\w+/>",
  80. // This will remove empty elements that look like <ElementName></ElementName>
  81. "\\s*<\\w+></\\w+>",
  82. // This will remove empty elements that look like
  83. // <ElementName>
  84. // </ElementName>
  85. "\\s*<\\w+>\n*\\s*</\\w+>"
  86. };
  87. for (String pattern : patterns) {
  88. Matcher matcher = Pattern.compile(pattern).matcher(responseString);
  89. responseString = matcher.replaceAll("");
  90. }
  91. System.out.println("返回参数==" + responseString);
  92. return responseString;
  93. }
  94. /**
  95. * 发送xml请求到server端 最新
  96. *
  97. * @param url xml请求数据地址
  98. * @param xmlString 发送的xml数据流
  99. * @return
  100. */
  101. public static String sendXmlPostReq(String url, String xmlString, Logger log, String textHead) {
  102. if (null != log) {
  103. log.debug(textHead + "XML请求url:{},\n请求参数:{}", url, xmlString);
  104. }
  105. String responseString = null;
  106. Response response = null;
  107. try {
  108. MediaType mediaType = MediaType.parse("text/xml");
  109. RequestBody reqBody = RequestBody.create(mediaType, xmlString);
  110. Request request = new Request.Builder()
  111. .url(url)
  112. .post(reqBody)
  113. .addHeader("Content-Type", "text/xml")
  114. .addHeader("cache-control", "no-cache")
  115. // .addHeader("Connection", "close")
  116. .build();
  117. response = getInstance().newCall(request).execute();
  118. if (response.isSuccessful()) {
  119. responseString = response.body().string();
  120. }
  121. } catch (Exception e) {
  122. log.error(textHead + "请求异常:" + e.getMessage() + ",异常信息:" + e);
  123. e.printStackTrace();
  124. throw new SystemException("远程接口请求失败,请联系管理员。");
  125. } finally {
  126. if (null != log) {
  127. textHead = StringUtils.toString(textHead, "123456789");
  128. }
  129. url = StringUtils.toString(url, "");
  130. String responseStringMsg = StringEscapeUtils.unescapeXml(responseString);
  131. log.debug(textHead + "XML返回url:{},\n响应参数:{}", url, responseStringMsg);
  132. if (StringUtils.isEmpty(responseString)) {
  133. Headers headers = response.headers();
  134. for (int i = 0, size = headers.size(); i < size; i++) {
  135. log.error("响应空时headers:" + headers.name(i) + ": " + headers.value(i));
  136. }
  137. }
  138. response.close();
  139. }
  140. return responseString;
  141. }
  142. /**
  143. * 发送xml请求到server端 最新
  144. *
  145. * @param url xml请求数据地址
  146. * @param xmlString 发送的xml数据流
  147. * @return
  148. */
  149. public static String sendXmlPostReqBase(String url, String xmlString) {
  150. xmlString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tns=\"http://newWS.front.app.echannel.ebiz.alltrust.com/\"><soapenv:Body><tns:queryVehicleTypesService><request><authorityData><userName>tianqin</userName><password>tianqin2023@</password></authorityData><searchKeyword>LVHRW185</searchKeyword><engineNo>1051694</engineNo><vid>LVHRW1859J5040098</vid><dptCde>14B8</dptCde><prono>0326</prono><motorTypeCode>11</motorTypeCode><cFstRegYm>20171021</cFstRegYm></request></tns:queryVehicleTypesService></soapenv:Body>\n" +
  151. "</soapenv:Envelope>";
  152. String responseString = null;
  153. Response response = null;
  154. try {
  155. MediaType mediaType = MediaType.parse("text/xml");
  156. RequestBody reqBody = RequestBody.create(mediaType, xmlString);
  157. Request request = new Request.Builder()
  158. .url(url)
  159. .post(reqBody)
  160. .addHeader("Content-Type", "text/xml")
  161. .addHeader("cache-control", "no-cache")
  162. .build();
  163. response = getInstance().newCall(request).execute();
  164. if (response != null) {
  165. if (response.isSuccessful()) {
  166. responseString = response.body().string();
  167. }
  168. } else {
  169. log.error("请求返回null");
  170. }
  171. } catch (Exception e) {
  172. e.printStackTrace();
  173. throw new SystemException("远程接口请求失败,请联系管理员。");
  174. } finally {
  175. if (StringUtils.isEmpty(responseString)) {
  176. Headers headers = response.headers();
  177. for (int i = 0, size = headers.size(); i < size; i++) {
  178. System.err.println("headers:" + headers.name(i) + ": " + headers.value(i));
  179. }
  180. } else {
  181. System.err.println("通过");
  182. }
  183. response.close();
  184. }
  185. return responseString;
  186. }
  187. }