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