新增访问Topgp Webservice接口Demo

This commit is contained in:
Bo 2021-08-09 10:29:30 +08:00
parent 69d476e628
commit 2723b5cd14
4 changed files with 177 additions and 17 deletions

View File

@ -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<String, Object> 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();
}
}

View File

@ -101,6 +101,13 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -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<String,Object> mapInfo){
log.info("=======生成xml======");
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tip=\"http://www.dsc.com.tw/tiptop/TIPTOPServiceGateWay\">\n" +
" <soapenv:Header/>\n" +
" <soapenv:Body>\n" +
" <tip:"+tip+">\n" +
" <tip:request>\n" +
" &lt;Request>\n" +
" &lt;Access>\n" +
" &lt;Authentication user='topgui' password='' />\n" +
" &lt;Connection application='bps' source='www.bpsemi.com' />\n" +
" &lt;Organization name='SYSTEM' />\n" +
" &lt;Locale language='zh_cn' />\n" +
" &lt;/Access>\n" +
" &lt;RequestContent>\n" +
" &lt;Parameter>\n" +
" &lt;Record>\n" +
" &lt;Field name=");
for(String key:mapInfo.keySet()){
stringBuffer.append("'"+key+"' value='" +mapInfo.get(key).toString().replaceAll("&","&amp")+"' />\n");
}
stringBuffer.append(" &lt;/Record>\n" +
" &lt;/Parameter>\n" +
" &lt;Document/>\n" +
" &lt;/RequestContent>\n" +
" &lt;/Request>\n" +
" </tip:request>\n" +
" </tip:express_testRequest>\n" +
" </soapenv:Body>\n" +
"</soapenv:Envelope>");
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");
}
}

View File

@ -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("&lt;","<").replace("&gt;",">");
}
/**
* 向指定 Restful接口 发送POST方法的请求
*
* @param url 发送请求的 URL
* @param params 请求参数请求参数为json的形式params="{\"params\":{\"pagesize\":1000}}"
* @return 返回Map Key="statusCode",接口访问返回状态 key="result":接口返回接果
*
* author yangbo
*/
//public static Map<String,String> sendPostWithRest(String url, String params){
//如果参数为String类型推送企业微信消息会乱码因此改为Object类型直接推送Map<Sring,Object> --yangbo 20210729