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();
 | 
						|
    }
 | 
						|
}
 | 
						|
 |