You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.8 KiB
176 lines
5.8 KiB
package com.ynxbd.common.helper.common;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStreamReader;
|
|
import java.io.OutputStreamWriter;
|
|
import java.net.HttpURLConnection;
|
|
import java.net.URL;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* @Author wsq
|
|
* @Date 2021/3/19 9:50
|
|
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
|
|
*/
|
|
@Slf4j
|
|
public class SoapHelper {
|
|
|
|
/**
|
|
* 特殊字符解码
|
|
*
|
|
* @param value 数据
|
|
* @return data
|
|
*/
|
|
public static String decodeValue(String value) {
|
|
return value.replaceAll("&", "&")
|
|
.replaceAll("<", "<")
|
|
.replaceAll(">", ">")
|
|
.replaceAll("'", "'")
|
|
.replaceAll(""", "\"");
|
|
}
|
|
|
|
|
|
public static String getRespXmlData(String xml) {
|
|
if (xml == null) {
|
|
return null;
|
|
}
|
|
xml = decodeValue(xml);
|
|
String leftSign = "<Response>";
|
|
String rightSign = "</Response>";
|
|
int leftIndex = xml.indexOf(leftSign);
|
|
int rightIndex = xml.lastIndexOf(rightSign);
|
|
return xml.substring(leftIndex, rightIndex + rightSign.length());
|
|
}
|
|
|
|
/**
|
|
* 创建一个连接
|
|
*
|
|
* @param projectName 请求项目名
|
|
* @param soapUrl soapURL
|
|
* @param soapAction soapAction
|
|
* @param soapRequestXml 请求XML参数
|
|
* @return 数据
|
|
*/
|
|
public static String post(String projectName, String soapUrl, String soapAction, String soapRequestXml) {
|
|
return createConnection(projectName, soapUrl, soapAction, "POST", soapRequestXml);
|
|
}
|
|
|
|
/**
|
|
* 创建一个连接
|
|
*
|
|
* @param projectName 请求项目名
|
|
* @param soapUrl soapURL
|
|
* @param soapAction soapAction
|
|
* @param soapRequestXml 请求XML参数
|
|
* @return 数据
|
|
*/
|
|
public static String get(String projectName, String soapUrl, String soapAction, String soapRequestXml) {
|
|
return createConnection(projectName, soapUrl, soapAction, "GET", soapRequestXml);
|
|
}
|
|
|
|
/**
|
|
* 创建一个连接
|
|
*
|
|
* @param projectName 请求项目名
|
|
* @param soapUrl soapURL
|
|
* @param soapAction soapAction
|
|
* @param soapRequestXml 请求XML参数
|
|
* @return 数据
|
|
*/
|
|
public static String createConnection(String projectName, String soapUrl, String soapAction, String httpType, String soapRequestXml) {
|
|
if (soapUrl == null) {
|
|
return null;
|
|
}
|
|
|
|
String respData = null; // 返回数据
|
|
HttpURLConnection connection = null;
|
|
OutputStreamWriter out = null;
|
|
BufferedReader reader = null;
|
|
try {
|
|
// 第一步:创建服务地址
|
|
URL url = new URL(soapUrl);
|
|
|
|
// 第二步:打开一个通向服务地址的连接
|
|
connection = (HttpURLConnection) url.openConnection();
|
|
|
|
// 第三步:设置参数
|
|
// 3.1发送方式设置:POST必须大写
|
|
connection.setRequestMethod(httpType);
|
|
// 3.2设置数据格式:content-msgInterface
|
|
connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
|
|
if (soapAction != null && !"".equals(soapAction)) {
|
|
connection.setRequestProperty("SOAPAction", soapAction);
|
|
}
|
|
// 3.3设置输入输出,因为默认新创建的connection没有读写权限,
|
|
connection.setDoInput(true);
|
|
connection.setDoOutput(true);
|
|
|
|
// 将信息以流的方式发送出去
|
|
out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
|
|
// 第四步:组织SOAP数据,发送请求
|
|
out.append(soapRequestXml);
|
|
out.flush();
|
|
|
|
// 第五步:接收服务端响应
|
|
int responseCode = connection.getResponseCode();
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
String temp;
|
|
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
|
|
while ((temp = reader.readLine()) != null) {
|
|
sb.append(temp);
|
|
}
|
|
|
|
if (responseCode == 200) { // 请求成功
|
|
respData = sb.toString();
|
|
|
|
} else {
|
|
log.error("{} 请求失败: {}", projectName, sb);
|
|
}
|
|
} catch (IOException e) {
|
|
log.error("{} 请求异常: {}", projectName, e.getMessage());
|
|
ErrorHelper.println(e);
|
|
} finally {
|
|
try {
|
|
if (out != null) out.close();
|
|
|
|
if (reader != null) reader.close();
|
|
|
|
if (connection != null) connection.disconnect();
|
|
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
return respData;
|
|
}
|
|
|
|
|
|
/**
|
|
* 组合请求数据
|
|
*
|
|
* @param params 数据
|
|
* @return 组合好的请求xml数据
|
|
*/
|
|
public static String requestParams(String sys, Map<String, Object> params) {
|
|
StringBuilder paramsXml = new StringBuilder();
|
|
String key;
|
|
Object value;
|
|
for (Map.Entry<String, Object> entry : params.entrySet()) {
|
|
key = entry.getKey();
|
|
value = entry.getValue();
|
|
value = value == null ? "" : value.toString();
|
|
|
|
paramsXml.append("<").append(key).append(">").append(value).append("</").append(key).append(">");
|
|
}
|
|
|
|
log.info("{} <Request>" + paramsXml + "</Request>", sys);
|
|
return paramsXml.toString();
|
|
}
|
|
}
|
|
|