From 2723b5cd14f3af9215f1fe52b212a98c8c1942e6 Mon Sep 17 00:00:00 2001 From: Bo Date: Mon, 9 Aug 2021 10:29:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=BF=E9=97=AETopgp=20Web?= =?UTF-8?q?service=E6=8E=A5=E5=8F=A3Demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../conrtroller/XmlWebserviceController.java | 28 ++++++ ruoyi-common/pom.xml | 7 ++ .../java/com/ruoyi/common/utils/XmlUtils.java | 73 ++++++++++++++++ .../ruoyi/common/utils/http/HttpUtils.java | 86 +++++++++++++++---- 4 files changed, 177 insertions(+), 17 deletions(-) create mode 100644 box-test/src/main/java/com/ruoyi/test/conrtroller/XmlWebserviceController.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/XmlUtils.java diff --git a/box-test/src/main/java/com/ruoyi/test/conrtroller/XmlWebserviceController.java b/box-test/src/main/java/com/ruoyi/test/conrtroller/XmlWebserviceController.java new file mode 100644 index 000000000..5efb3a233 --- /dev/null +++ b/box-test/src/main/java/com/ruoyi/test/conrtroller/XmlWebserviceController.java @@ -0,0 +1,28 @@ +package com.ruoyi.test.conrtroller; + +import com.ruoyi.common.utils.XmlUtils; +import com.ruoyi.common.utils.http.HttpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + +@RestController + +public class XmlWebserviceController { + //private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + @PostMapping("/anon/sendXml") + public String SendXml() { + Map map = new HashMap<>(); + map.put("responseInfo", "此处为测试消息"); + String param = XmlUtils.GetTopgpRequestXml("express_testRequest", map); + String url = "http://192.168.2.81:85/web/ws/r/aws_ttsrv2_toptest"; + String returnXml = HttpUtils.sendXmlPost(url,param); + return XmlUtils.GetStatusFromTopgpResponse(returnXml).toString(); + + } +} diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index edd31141d..bf5675cd1 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -101,6 +101,13 @@ javax.servlet-api + + org.json + json + 20160810 + compile + + \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/XmlUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/XmlUtils.java new file mode 100644 index 000000000..2278c008c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/XmlUtils.java @@ -0,0 +1,73 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.utils.http.HttpUtils; +import org.json.JSONObject; +import org.json.XML; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +public class XmlUtils { + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 组合TOPGP所需的XML格式 + * @param tip 调用TOPGP的Webservice的方法名 如:express_testRequest + * @param mapInfo XML中Filed对应的键值对Map + * @return xml字符串 + */ + public static String GetTopgpRequestXml(String tip, Map mapInfo){ + log.info("=======生成xml======"); + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append("\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " <Request>\n" + + " <Access>\n" + + " <Authentication user='topgui' password='' />\n" + + " <Connection application='bps' source='www.bpsemi.com' />\n" + + " <Organization name='SYSTEM' />\n" + + " <Locale language='zh_cn' />\n" + + " </Access>\n" + + " <RequestContent>\n" + + " <Parameter>\n" + + " <Record>\n" + + " <Field name="); + for(String key:mapInfo.keySet()){ + stringBuffer.append("'"+key+"' value='" +mapInfo.get(key).toString().replaceAll("&","&")+"' />\n"); + } + stringBuffer.append(" </Record>\n" + + " </Parameter>\n" + + " <Document/>\n" + + " </RequestContent>\n" + + " </Request>\n" + + " \n" + + " \n" + + " \n" + + ""); + log.info("=======生成xml结束======"); + return stringBuffer.toString(); + } + + /** + * 将TOPGP返回的XML转化为Json,并提出返回Status + * @param TopgpResonseXml 调用TOPGP的Webservice的方法名 如:express_testRequest + * @return Status JsonObject + */ + public static JSONObject GetStatusFromTopgpResponse(String TopgpResonseXml) { + JSONObject jsonObject = XML.toJSONObject(TopgpResonseXml); + + JSONObject envelope = jsonObject.getJSONObject("SOAP-ENV:Envelope"); + JSONObject body = envelope.getJSONObject("SOAP-ENV:Body"); + JSONObject express_testResponse = body.getJSONObject("fjs1:express_testResponse"); + JSONObject fjs1Response = express_testResponse.getJSONObject("fjs1:response"); + JSONObject response = fjs1Response.getJSONObject("Response"); + JSONObject execution = response.getJSONObject("Execution"); + return execution.getJSONObject("Status"); + } + + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java index 11c8404b7..dcaa8c5a2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -1,10 +1,14 @@ package com.ruoyi.common.utils.http; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintWriter; +import com.ruoyi.common.constant.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import javax.net.ssl.*; +import java.io.*; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.net.URL; @@ -12,18 +16,6 @@ import java.net.URLConnection; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Map; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLSession; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.ruoyi.common.constant.Constants; -import org.springframework.http.ResponseEntity; -import org.springframework.web.client.RestClientException; -import org.springframework.web.client.RestTemplate; /** * 通用http发送方法 @@ -265,12 +257,72 @@ public class HttpUtils } } + /** + * 向指定 URL 发送xml POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 + * @return 所代表远程资源的响应结果 + *Author yangbo + */ + public static String sendXmlPost(String url, String param) { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try { + String urlNameString = url; + log.info("sendPost - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); //发送xml需加上此请求头 + conn.addRequestProperty("SOAPAction", "\"\""); //向topgp发送xml必须加上该Name=“SOAPAction", Value="\"\"" ,否则会报415错误,不能识别XML. + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); + String line; + while ((line = in.readLine()) != null) { + result.append(line); + } + log.info("recv - {}", result); + } catch (ConnectException e) { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } catch (SocketTimeoutException e) { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } catch (IOException e) { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } catch (Exception e) { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } finally { + try { + if (out != null) { + out.close(); + } + if (in != null) { + in.close(); + } + } catch (IOException ex) { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString().replace("<","<").replace(">",">"); + } + + /** * 向指定 Restful接口 发送POST方法的请求 * * @param url 发送请求的 URL * @param params 请求参数,请求参数为json的形式。例:params="{\"params\":{\"pagesize\":1000}}" * @return 返回Map, Key="statusCode",接口访问返回状态, key="result":接口返回接果 + * + * author yangbo */ //public static Map sendPostWithRest(String url, String params){ //如果参数为String类型,推送企业微信消息会乱码,因此改为Object类型,直接推送Map --yangbo 20210729