From d1bdb54dcf5a9e11f280c0971cd32a4661452807 Mon Sep 17 00:00:00 2001 From: "Yunsam.Eo" Date: Sun, 21 Dec 2025 17:59:26 +0900 Subject: [PATCH] =?UTF-8?q?Outbound=20Adapter=EC=9A=A9=20Filter=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20KJB=EC=9A=A9=20Fil?= =?UTF-8?q?ter=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HttpClient5AdapterFilterFactory.java | 103 ++++++++ .../filter/HttpClient5AdapterFilterType.java | 23 ++ .../filter/HttpClientAdapterBaseFilter.java | 62 +++++ .../HttpClientAdapterExceptionFilter.java | 10 + .../filter/HttpClientAdapterFilter.java | 12 + .../HttpClientAdapterFilterException.java | 35 +++ .../http/client/filter/JBOBPFilter.java | 127 ++++++++++ .../http/client/filter/KAKAOBankFilter.java | 98 ++++++++ .../http/client/filter/KFTCFaceFilter.java | 124 ++++++++++ .../http/client/filter/KFTCP2PFilter.java | 77 ++++++ .../http/client/filter/NAVERFinFilter.java | 70 ++++++ .../http/client/filter/NICECreditFilter.java | 108 +++++++++ .../client/filter/SimpleFrameworkFilter.java | 60 +++++ .../http/client/filter/TOSSBankFilter.java | 64 +++++ ...ttpClient5AdapterServiceRestAddFilter.java | 221 ++++++++++++++++++ 15 files changed, 1194 insertions(+) create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java create mode 100644 src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java new file mode 100644 index 0000000..db42f8d --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterFactory.java @@ -0,0 +1,103 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.concurrent.ConcurrentHashMap; + +import com.eactive.eai.common.util.Logger; + +public class HttpClient5AdapterFilterFactory { + static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + static String basePackage = "com.eactive.eai.custom.kjb.adapter.http.client.filter"; + private static ConcurrentHashMap h = new ConcurrentHashMap<>(); + private static ConcurrentHashMap eh = new ConcurrentHashMap<>(); + + private HttpClient5AdapterFilterFactory() { + throw new IllegalStateException("Utility class"); + } + + public static HttpClientAdapterFilter createFilter(String type) { + if (h.containsKey(type)) { + return h.get(type); + } + + HttpClientAdapterFilter filter = null; + switch (HttpClient5AdapterFilterType.getValue(type)) { + case SIMPLEFRAMEWORK: + filter = new SimpleFrameworkFilter(); + break; + case JBOBP: + filter = new JBOBPFilter(); + break; + case KFTCFACE: + filter = new KFTCFaceFilter(); + break; + case KFTCP2P: + filter = new KFTCP2PFilter(); + break; + case KAKAOBANK: + filter = new KAKAOBankFilter(); + break; + case NAVERFIN: + filter = new NAVERFinFilter(); + break; + case NICECREDIT: + filter = new NICECreditFilter(); + break; + case TOSSBANK: + filter = new TOSSBankFilter(); + break; + default: + filter = classForName(type); + if (filter == null) { + filter = classForName(basePackage + "." + type); + } + break; + } + + if (filter != null) { + h.put(type, filter); + return filter; + } else { + return null; + } + } + + private static HttpClientAdapterFilter classForName(String type) { + try { + Class cl = Class.forName(type); + return (HttpClientAdapterFilter) cl.newInstance(); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + logger.error("Cannot create a HttpClientAdapterFilter. - {}", type); + return null; + } + } + + public static HttpClientAdapterExceptionFilter createExceptionFilter(String type) { + if (eh.containsKey(type)) { + return eh.get(type); + } + + HttpClientAdapterExceptionFilter filter = classForExceptionFilterName(type); + if (filter == null) { + filter = classForExceptionFilterName(basePackage + "." + type); + } + + if (filter != null) { + eh.put(type, filter); + return filter; + } else { + return null; + } + } + + private static HttpClientAdapterExceptionFilter classForExceptionFilterName(String type) { + try { + Class cl = Class.forName(type); + return (HttpClientAdapterExceptionFilter) cl.newInstance(); + } catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) { + logger.error("Cannot create a HttpClientAdapterExceptionFilter. - {}", type); + return null; + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java new file mode 100644 index 0000000..10aeff0 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClient5AdapterFilterType.java @@ -0,0 +1,23 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +public enum HttpClient5AdapterFilterType { + SIMPLEFRAMEWORK, + JBOBP, + KFTCFACE, + KFTCP2P, + KAKAOBANK, + NAVERFIN, + NICECREDIT, + TOSSBANK, + UNKNOWN; + + public static HttpClient5AdapterFilterType getValue(String type) { + try { + return valueOf(type.toUpperCase()); + } catch (NullPointerException e) { + return UNKNOWN; + } catch (Exception e) { + return UNKNOWN; + } + } +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java new file mode 100644 index 0000000..25f710a --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterBaseFilter.java @@ -0,0 +1,62 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import com.eactive.eai.common.util.Logger; + +public abstract class HttpClientAdapterBaseFilter implements HttpClientAdapterFilter { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + protected String filterName = ""; + protected List filters; + + protected HttpClientAdapterBaseFilter(String filterName) { + this.filterName = filterName; + filters = new ArrayList<>(); + logger.info("{}] filter created.", filterName); + } + + protected void addFilter(HttpClientAdapterFilter filter) { + filters.add(filter); + logger.info("{}] sub filter({}) added. filters= {}", filterName, filter, filters); + } + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + try { + Object filteredMessage = message; + for(HttpClientAdapterFilter subFilter : filters) { + logger.debug("{}] sub filter({}) doPreFilter start.", filterName, subFilter); + filteredMessage = subFilter.doPreFilter(adptGrpName, adptName, prop, filteredMessage, tempProp); + logger.debug("{}] sub filter({}) doPreFilter end.", filterName, subFilter); + } + + return filteredMessage; + } catch (Exception e) { + logger.error(this.filterName + "] doPreFilter error.", e); + throw e; + } + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + try { + Object filteredMessage = message; + for(HttpClientAdapterFilter subFilter : filters) { + logger.debug("{}] sub filter({}) doPostFilter start.", filterName, subFilter); + filteredMessage = subFilter.doPostFilter(adptGrpName, adptName, prop, filteredMessage, tempProp); + logger.debug("{}] sub filter({}) doPostFilter end.", filterName, subFilter); + } + return filteredMessage; + } catch (Exception e) { + logger.error(this.filterName + "] doPostFilter error.", e); + throw e; + } + } + + + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java new file mode 100644 index 0000000..6c809f3 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterExceptionFilter.java @@ -0,0 +1,10 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +public interface HttpClientAdapterExceptionFilter { + + public Object doExceptionFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp, Exception e) throws Exception; + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java new file mode 100644 index 0000000..47c5682 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilter.java @@ -0,0 +1,12 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +public interface HttpClientAdapterFilter { + + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception; + + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception; +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java new file mode 100644 index 0000000..691f050 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/HttpClientAdapterFilterException.java @@ -0,0 +1,35 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import lombok.Getter; + +public class HttpClientAdapterFilterException extends RuntimeException { + private static final long serialVersionUID = -1208983360831093751L; + @Getter + private final String code; + @Getter + private final Properties prop; + @Getter + private final Properties tempProp; + + public HttpClientAdapterFilterException(String code, String msg, Properties prop, Properties tmepProp) { + super(msg); + this.code = code; + this.prop = prop; + this.tempProp = tmepProp; + } + + public HttpClientAdapterFilterException(String code, String msg, Properties prop, Properties tempProp, Throwable cause) { + super(msg, cause); + this.code = code; + this.prop = prop; + this.tempProp = tempProp; + } + + @Override + public String toString() { + return "HttpClientAdapterFilterException [code=" + code + ", prop=" + prop + ", tempProp=" + tempProp + ", parent=" + super.toString() + "]"; + } + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java new file mode 100644 index 0000000..4ae63db --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/JBOBPFilter.java @@ -0,0 +1,127 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map.Entry; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class JBOBPFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String X_OBP_PARTNERCODE = "x-obp-partnercode"; + public static final String X_OBP_TXID = "x-obp-txid"; + public static final String X_OBP_TRUST_SYSTEM = "x-obp-trust-system"; + String systemTrustKey = "APIMGW-0001-QVBJTUdXLTAwMDE="; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) systemTrustKey = propGroupVo.getProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); + +// Properties inboundHeaders; +// String obp_partnercode; +// try { +// Object headerObj = tempProp.get(HttpAdapterServiceKey.INBOUND_HEADER); +// if (headerObj instanceof Properties) { //tomcat +// inboundHeaders = (Properties) headerObj; +// for ( String key : inboundHeaders.stringPropertyNames()) { +// if(key.equalsIgnoreCase(X_OBP_PARTNERCODE)) { +// obp_partnercode = inboundHeaders.getProperty(key); +// break; +// } +// } +// } else if (headerObj instanceof String) { //weblogic +// String str = (String) headerObj; +// str = str.substring(1, str.length() - 1); +// // 2. key=value 쌍 분리 +// String[] entries = str.split(","); +// // map에 담기 +// Map map = new HashMap<>(); +// for (String entry : entries) { +// String[] kv = entry.split("=", 2); +// if (kv.length == 2) { +// map.put(kv[0].trim(), kv[1].trim()); +// } +// } +// for (String k : map.keySet()) { +// if (k.equalsIgnoreCase(X_OBP_PARTNERCODE)) { +// obp_partnercode = map.get(k); +// break; +// } +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null){ + for (Entry e : inboundHeader.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + + if (StringUtils.equalsIgnoreCase(key, X_OBP_PARTNERCODE)) { + filterHeaders.setProperty(key, value); + } + if (logger.isDebugEnabled()) { + logger.debug("Request Header :" + key + "=[" + value + "]"); + } + } + } + + String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + if (StringUtils.isNotBlank(uuid)) { + filterHeaders.setProperty(X_OBP_TXID, uuid); // JB OBP Framework용 + } + if (StringUtils.isNotBlank(systemTrustKey)) { + filterHeaders.setProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); // JB OBP Framework용 + } + } catch (Exception e) { + logger.error(e.getMessage()); + } + +// Properties rquestHeaderProp = assignHeaderProp(tempProp, filterHeaders); +// tempProp.put("FILTERHEADER", filterHeaders); + + return returnMessage; + } + +// private Properties assignHeaderProp(Properties prop, HashMap filterHeaders) { +// Properties headerProp = new Properties(); +// if (filterHeaders.isEmpty()) { +// return headerProp; +// } +// +// for (String key : filterHeaders.keySet()) { +// String value = filterHeaders.get(key); +// headerProp.put(key, value); +// } +// +// return headerProp; +// } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java new file mode 100644 index 0000000..528357a --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KAKAOBankFilter.java @@ -0,0 +1,98 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class KAKAOBankFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "kakaobank"; + public static final String X_KKB_PARTNER_CODE = "X-KKB-PARTNER-CODE"; + public static final String X_KKB_API_NAME = "X-KKB-API-NAME"; + public static final String X_KKB_API_TX_ID = "X-KKB-API-TX-ID"; + public static final String X_KKB_TX_TIME = "X-KKB-TX-TIME"; + public static final String X_KKB_CMPR_MGMT_NO = "X-KKB-CMPR-MGMT-NO"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String partnerCode = "KJB"; + String apiName = "status_change"; + String apiTxId = "0"; + String txTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String cmprMgmtNo = "0"; + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + partnerCode = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_PARTNER_CODE); + apiName = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_API_NAME); + apiTxId = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_API_TX_ID); + cmprMgmtNo = propGroupVo.getProperty(PROP_PREFIX + "." + X_KKB_CMPR_MGMT_NO); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(X_KKB_PARTNER_CODE)) { + filterHeaders.put(X_KKB_PARTNER_CODE, inboundHeader.get(X_KKB_PARTNER_CODE)); + } else { + filterHeaders.put(X_KKB_PARTNER_CODE, partnerCode); + } + if (inboundHeader.containsKey(X_KKB_API_NAME)) { + filterHeaders.put(X_KKB_API_NAME, inboundHeader.get(X_KKB_API_NAME)); + } else { + filterHeaders.put(X_KKB_API_NAME, apiName); + } + if (inboundHeader.containsKey(X_KKB_API_TX_ID)) { + filterHeaders.put(X_KKB_API_TX_ID, inboundHeader.get(X_KKB_API_TX_ID)); + } else { + filterHeaders.put(X_KKB_API_TX_ID, apiTxId); + } + if (inboundHeader.containsKey(X_KKB_TX_TIME)) { + filterHeaders.put(X_KKB_TX_TIME, inboundHeader.get(X_KKB_TX_TIME)); + } else { + filterHeaders.put(X_KKB_TX_TIME, txTime); + } + if (inboundHeader.containsKey(X_KKB_CMPR_MGMT_NO)) { + filterHeaders.put(X_KKB_CMPR_MGMT_NO, inboundHeader.get(X_KKB_CMPR_MGMT_NO)); + } else { + filterHeaders.put(X_KKB_CMPR_MGMT_NO, cmprMgmtNo); + } + } else { + filterHeaders.put(X_KKB_PARTNER_CODE, partnerCode); + filterHeaders.put(X_KKB_API_NAME, apiName); + filterHeaders.put(X_KKB_API_TX_ID, apiTxId); + filterHeaders.put(X_KKB_TX_TIME, txTime); + filterHeaders.put(X_KKB_CMPR_MGMT_NO, cmprMgmtNo); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java new file mode 100644 index 0000000..36151c7 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCFaceFilter.java @@ -0,0 +1,124 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map.Entry; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +//import com.eactive.eai.authoutbound.OutboundOAuthCredentialDao; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class KFTCFaceFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "kftcface"; + public static final String H_CLIENT_ID = "Client-Id"; + public static final String B_ORG_CODE = "org_code"; + public static final String B_TRANSACTION_ID = "transaction_id"; + public static final String B_REQUEST_DATETIME = "request_datetime"; +// private final OutboundOAuthCredentialDao credentialDao; + +// public KFTCFaceFilter() { +// this.credentialDao = new OutboundOAuthCredentialDao(); + // TODO Auto-generated constructor stub +// } + + @SuppressWarnings({ "null", "unchecked" }) + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + JSONObject returnMessage = null; + String clientId = ""; + String orgCode = "034"; // 광주은행 행코드 + +// OutboundOAuthCredentialVo outboundOAuthCredentialVo = credentialDao.getClientId(adptGrpName);//credentialDao.getOutboundOAuthCredential(adptGrpName); +// clientId = credentialDao.getClientId(adptGrpName);//outboundOAuthCredentialVo.getClientId(); + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + if (StringUtils.isEmpty(clientId)) + clientId = propGroupVo.getProperty(PROP_PREFIX + "." + H_CLIENT_ID); + orgCode = propGroupVo.getProperty(PROP_PREFIX + "." + B_ORG_CODE); + } + + String request_datetime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String transaction_id = orgCode + request_datetime + "1" + RandomStringUtils.random(4, true, true).toUpperCase(); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null && inboundHeader.containsKey(H_CLIENT_ID)) { + for (Entry e : inboundHeader.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + + if (StringUtils.equalsIgnoreCase(key, H_CLIENT_ID)) { + filterHeaders.setProperty(key, value); + } + if (logger.isDebugEnabled()) { + logger.debug("Request Header :" + key + "=[" + value + "]"); + } + } + } else { + filterHeaders.setProperty(H_CLIENT_ID, clientId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + AdapterManager adapterManager = AdapterManager.getInstance(); + AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(adptGrpName); + String encode = adptGrpVO.getMessageEncode(); + if (message == null) { + returnMessage = new JSONObject(); + } else { + if (message instanceof JSONObject) { + returnMessage = (JSONObject) message; + } else if (message instanceof String) { + returnMessage = parseJson((String) message); + } else if (message instanceof byte[]) { + returnMessage = parseJson(new String((byte[]) message, encode)); + } + } + + returnMessage.put(B_ORG_CODE, orgCode); + returnMessage.put(B_TRANSACTION_ID, transaction_id); + returnMessage.put(B_REQUEST_DATETIME, request_datetime); + + return returnMessage.toJSONString(); + } + + private JSONObject parseJson(String message) throws Exception { + if (message == null) { + return null; + } + + return (JSONObject) JSONValue.parse(message); + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java new file mode 100644 index 0000000..e3d9dc0 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/KFTCP2PFilter.java @@ -0,0 +1,77 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.lang3.RandomStringUtils; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class KFTCP2PFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "kftcp2p"; + public static final String H_ORG_CODE = "org_code"; + public static final String H_TRX_NO = "api_trx_no"; + public static final String H_TRX_DTM = "api_trx_dtm"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String orgCode = "034"; // 광주은행 행코드 + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + orgCode = propGroupVo.getProperty(PROP_PREFIX + "." + H_ORG_CODE); + } + + String apiTrxDtm = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String apiTrxNo = orgCode + apiTrxDtm + "1" + RandomStringUtils.random(5, true, true).toUpperCase(); + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(H_TRX_NO)) { + filterHeaders.put(H_TRX_NO, inboundHeader.get(H_TRX_NO)); + } else { + filterHeaders.put(H_TRX_NO, apiTrxNo); + } + if (inboundHeader.containsKey(H_TRX_DTM)) { + filterHeaders.put(H_TRX_DTM, inboundHeader.get(H_TRX_DTM)); + } else { + filterHeaders.put(H_TRX_DTM, apiTrxDtm); + } + } else { +// filterHeaders.setProperty(H_TRX_NO, apiTrxNo); + filterHeaders.put(H_TRX_NO, apiTrxNo); + filterHeaders.put(H_TRX_DTM, apiTrxDtm); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java new file mode 100644 index 0000000..b228646 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NAVERFinFilter.java @@ -0,0 +1,70 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class NAVERFinFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "naverfin"; + public static final String X_PARTNER_ID = "X-Partner-Id"; + public static final String X_FINTECH_ID = "X-Fintech-Id"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String partnerID = "r0jtqwC9gAW5"; + String fintechId = "NF"; + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + partnerID = propGroupVo.getProperty(PROP_PREFIX + "." + X_PARTNER_ID); + fintechId = propGroupVo.getProperty(PROP_PREFIX + "." + X_FINTECH_ID); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(X_PARTNER_ID)) { + filterHeaders.put(X_PARTNER_ID, inboundHeader.get(X_PARTNER_ID)); + } else { + filterHeaders.put(X_PARTNER_ID, partnerID); + } + if (inboundHeader.containsKey(X_FINTECH_ID)) { + filterHeaders.put(X_FINTECH_ID, inboundHeader.get(X_FINTECH_ID)); + } else { + filterHeaders.put(X_FINTECH_ID, fintechId); + } + } else { + filterHeaders.put(X_PARTNER_ID, partnerID); + filterHeaders.put(X_FINTECH_ID, fintechId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java new file mode 100644 index 0000000..1d3802c --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/NICECreditFilter.java @@ -0,0 +1,108 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Map.Entry; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Properties; + +import org.apache.commons.lang3.StringUtils; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import com.eactive.eai.adapter.AdapterGroupVO; +import com.eactive.eai.adapter.AdapterManager; +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class NICECreditFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "nicecredit"; + public static final String H_PRODUCTID = "ProductID"; + public static final String B_REQ_DTM = "req_dtm"; + public static final String B_GOODS_CLS = "goods_cls"; + + @SuppressWarnings({ "unchecked" }) + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + JSONObject returnMessage = null; + String productId = "2303102120"; + String reqDtm = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String goodsCls = "KJBAPI0001"; + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { + productId = propGroupVo.getProperty(PROP_PREFIX + "." + H_PRODUCTID); + goodsCls = propGroupVo.getProperty(PROP_PREFIX + "." + B_GOODS_CLS); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null && inboundHeader.containsKey(H_PRODUCTID)) { + for (Entry e : inboundHeader.entrySet()) { + String key = (String) e.getKey(); + String value = (String) e.getValue(); + + if (StringUtils.equalsIgnoreCase(key, H_PRODUCTID)) { + filterHeaders.setProperty(key, value); + } + if (logger.isDebugEnabled()) { + logger.debug("Request Header :" + key + "=[" + value + "]"); + } + } + } else { + filterHeaders.setProperty(H_PRODUCTID, productId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + AdapterManager adapterManager = AdapterManager.getInstance(); + AdapterGroupVO adptGrpVO = adapterManager.getAdapterGroupVO(adptGrpName); + String encode = adptGrpVO.getMessageEncode(); + if (message == null) { + returnMessage = new JSONObject(); + } else { + if (message instanceof JSONObject) { + returnMessage = (JSONObject) message; + } else if (message instanceof String) { + returnMessage = parseJson((String) message); + } else if (message instanceof byte[]) { + returnMessage = parseJson(new String((byte[]) message, encode)); + } + } + + returnMessage.put(B_REQ_DTM, reqDtm); + returnMessage.put(B_GOODS_CLS, goodsCls); + + return returnMessage.toJSONString(); + } + + private JSONObject parseJson(String message) throws Exception { + if (message == null) { + return null; + } + + return (JSONObject) JSONValue.parse(message); + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java new file mode 100644 index 0000000..a91d914 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/SimpleFrameworkFilter.java @@ -0,0 +1,60 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceSupport; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.util.Logger; + +public class SimpleFrameworkFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String CLIENTID = "clientId"; + public static final String TRACEID = "traceId"; + public static final String GUID = "guid"; + public static final String RECEIVEDTIMESTAMP = "receivedTimestamp"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + /* 업체정보 */ + String clientId = tempProp.getProperty(HttpAdapterServiceSupport.PROPERTIES_NAME_CLIENT_ID); + filterHeaders.setProperty(CLIENTID, clientId); + + /* APIM 거래추적자 */ + String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + filterHeaders.setProperty(TRACEID, uuid); + + /* GUID */ + String guid = tempProp.getProperty(TransactionContextKeys.GUID, ""); + filterHeaders.setProperty(GUID, guid); + + /* 최초요청시간 */ + String receivedTimestamp = tempProp.getProperty(HttpAdapterServiceKey.INBOUND_REQUESTED_TIME, ""); + filterHeaders.setProperty(RECEIVEDTIMESTAMP, receivedTimestamp); + } catch (Exception e) { + logger.error(e.getMessage()); + } + +// tempProp.put("FILTERHEADER", filterHeaders); + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java new file mode 100644 index 0000000..ae13d83 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/filter/TOSSBankFilter.java @@ -0,0 +1,64 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.filter; + +import java.util.Properties; + +import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; +import com.eactive.eai.common.TransactionContextKeys; +import com.eactive.eai.common.property.PropGroupVO; +import com.eactive.eai.common.property.PropManager; +import com.eactive.eai.common.util.Logger; + + +public class TOSSBankFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey { + protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); + + public static final String KJB_HEADER = "KJB_Header"; + public static final String PROP_PREFIX = "tossbank"; + public static final String X_TOSSBANK_LOAN_TRACE_ID = "X-TOSSBANK-LOAN-TRACE-ID"; + + @Override + public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp) + throws Exception { + + Object returnMessage = message; + String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, ""); + + PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER); + if (propGroupVo != null) { +// partnerID = propGroupVo.getProperty(PROP_PREFIX + "." + X_PARTNER_ID); +// fintechId = propGroupVo.getProperty(PROP_PREFIX + "." + X_FINTECH_ID); + } + + Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER"); + if (filterHeaders == null) { + filterHeaders = new Properties(); + tempProp.put("FILTERHEADER", filterHeaders); + } + try { + Properties inboundHeader = (Properties)tempProp.get(INBOUND_HEADER); + if (inboundHeader != null) { + if (inboundHeader.containsKey(X_TOSSBANK_LOAN_TRACE_ID)) { + filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, inboundHeader.get(X_TOSSBANK_LOAN_TRACE_ID)); + } else { + filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, traceId); + } + } else { + /* APIM 거래추적자 */ + filterHeaders.setProperty(X_TOSSBANK_LOAN_TRACE_ID, traceId); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + return returnMessage; + } + + @Override + public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + return message; + } + +} + diff --git a/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java new file mode 100644 index 0000000..f0be751 --- /dev/null +++ b/src/main/java/com/eactive/eai/custom/kjb/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java @@ -0,0 +1,221 @@ +package com.eactive.eai.custom.kjb.adapter.http.client.impl; + +import java.util.Properties; +//import java.util.concurrent.Callable; + +import org.apache.commons.lang3.StringUtils; +import org.dom4j.Node; +import org.json.simple.JSONObject; + +import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey; +import com.eactive.eai.adapter.http.client.impl.HttpClient5AdapterServiceRest; +import com.eactive.eai.custom.kjb.adapter.http.client.filter.HttpClient5AdapterFilterFactory; +//import com.eactive.eai.custom.kjb.adapter.http.client.filter.HttpClientAdapterExceptionFilter; +import com.eactive.eai.custom.kjb.adapter.http.client.filter.HttpClientAdapterFilter; +//import com.eactive.eai.custom.kjb.adapter.http.client.filter.IBKOutCommonFilter; +//import com.eactive.eai.custom.kjb.adapter.http.client.filter.IBKOutExceptionFilter; +//import com.fasterxml.jackson.databind.ObjectMapper; +//import com.fasterxml.jackson.databind.node.ObjectNode; +//import com.ibk.eai.common.circuitbreaker.url.UrlCircuitBreakerManager; + +//import io.github.resilience4j.circuitbreaker.CircuitBreaker; + +/** + * 1. 기능 : HttpClient5AdapterServiceRest 호출 전후 Filter 적용할 수 있는 기능을 제공한다.
+ * 2. 처리 개요 :
+ * 3. 주의사항
+ * + * @author : + * @version : v 1.0.0 + * @see : HttpClientAdapterServiceFactory.java, + * HttpClientAdapterServiceSupport.java, HttpClient5AdapterServiceRest.java + * @since : + * + */ +public class HttpClient5AdapterServiceRestAddFilter extends HttpClient5AdapterServiceRest + implements HttpClientAdapterServiceKey { + + // 요청전 수행할 필터(쉼표(,)로 구분) + static final String PRE_FILTERS = "PRE_FILTERS"; + + // 요청후 수행할 필터(쉼표(,)로 구분) + static final String POST_FILTERS = "POST_FILTERS"; + +// // Adapter에서 Exception이 발생한 경우, 처리할 필터 +// static final String EXCEPTION_FILTER = "EXCEPTION_FILTER"; + + /** + * 1. 기능 : HttpClient 호출 전후 Filter 적용용 2. 처리 개요 :
+ * 3. 주의사항
+ * + * @param prop Http Adapter 속성 정보 + * @return 반환 된 Object + * @exception Exception 수동 시스템 간 통신 중 발생 + */ + public Object execute(Properties prop, Object data, Properties tempProp) throws Exception { + + String adptGrpName = tempProp.getProperty(ADAPTER_GROUP_NAME); + String adptName = tempProp.getProperty(ADAPTER_NAME); + + data = doPreFilters(adptGrpName, adptName, prop, data, tempProp); + + Object adapterResponse = super.execute(prop, data, tempProp); + +// //원본 url를 찾아서 있으면, 그것을 사용한다. +// String url = tempProp.getProperty("URL_ORG"); +// if(StringUtils.isEmpty(url)) +// url = tempProp.getProperty(HttpClientAdapterServiceKey.URL); +// +// UrlCircuitBreakerManager cManager = UrlCircuitBreakerManager.getInstance(); +// CircuitBreaker circuitBreaker = cManager.getCircuitBreaker(url); +// try { +// if (circuitBreaker != null) { +// if (logger.isDebugEnabled()) { +// // ObjectMapper 인스턴스 생성 +// ObjectMapper objectMapper = new ObjectMapper(); +// // 서킷 브레이커의 메트릭 정보와 상태 정보를 직접 Node로 변환 +// ObjectNode combinedNode = objectMapper.createObjectNode(); +// combinedNode.put("state", circuitBreaker.getState().toString()); +// combinedNode.set("metrics", objectMapper.valueToTree(circuitBreaker.getMetrics())); +// logger.debug("CircuitBreaker state [" + circuitBreaker.getName() + "] - " + combinedNode.toString()); +// } +// adapterResponse = circuitBreaker.executeCallable(new HttpClientAdapterCallable(prop, data, tempProp, this)); +// } else { +// adapterResponse = super.execute(prop, data, tempProp); +// } +// } catch (Exception e) { +// adapterResponse = doExceptionFilters(adptGrpName, adptName, prop, adapterResponse, tempProp, e); +// +// if (adapterResponse instanceof JSONObject) +// adapterResponse = ((JSONObject) adapterResponse).toJSONString(); +// +// if (adapterResponse instanceof Node) +// adapterResponse = ((Node) adapterResponse).asXML(); +// +// return adapterResponse; +// } + + adapterResponse = doPostFilters(adptGrpName, adptName, prop, adapterResponse, tempProp); + if (adapterResponse instanceof JSONObject) + adapterResponse = ((JSONObject) adapterResponse).toJSONString(); + + if (adapterResponse instanceof Node) + adapterResponse = ((Node) adapterResponse).asXML(); + + return adapterResponse; + } + +// protected Object callSuper(Properties prop, Object data, Properties tempProp) throws Exception { +// return super.execute(prop, data, tempProp); +// } + +// private class HttpClientAdapterCallable implements Callable { +// Properties prop; +// Object data; +// Properties tempProp; +// HttpClient5AdapterServiceRestAddFilter clientService; +// +// public HttpClientAdapterCallable(Properties prop, Object data, Properties tempProp, +// HttpClient5AdapterServiceRestAddFilter clientService) { +// this.prop = prop; +// this.data = data; +// this.tempProp = tempProp; +// this.clientService = clientService; +// } +// +// @Override +// public Object call() throws Exception { +// return clientService.callSuper(prop, data, tempProp); +// } +// +// } + + protected Object doPreFilters(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + +// boolean isSetCommonFilterInAdapterProp = false; + // 1. adapter에 설정된 필터 수행 + String preFiltersStr = prop.getProperty(PRE_FILTERS); + if (StringUtils.isNotEmpty(preFiltersStr)) { + String[] preFilters = StringUtils.split(preFiltersStr, ","); + for (String filterName : preFilters) { + if (StringUtils.isBlank(filterName)) { + continue; + } + + HttpClientAdapterFilter adapterFilter = HttpClient5AdapterFilterFactory.createFilter(filterName.trim()); + + if (adapterFilter != null) { +// if (adapterFilter instanceof IBKOutCommonFilter) +// isSetCommonFilterInAdapterProp = true; + + message = adapterFilter.doPreFilter(adptGrpName, adptName, prop, message, tempProp); + } else { + throw new Exception("Failed get Filter Class: " + filterName); + } + } + } + +// // 2. IBKOutCommonFilter 필터 수행(adapter 필터에서 수행하지 않을 때만) +// if (!isSetCommonFilterInAdapterProp) { +// HttpClientAdapterFilter ibkFilter = HttpClient5AdapterFilterFactory +// .createFilter(IBKOutCommonFilter.class.getName()); +// if (ibkFilter != null) { +// message = ibkFilter.doPreFilter(adptGrpName, adptName, prop, message, tempProp); +// } +// } else { +// logger.debug("IBKOutCommonFilter isSetCommonFilterInAdapterProp 'POST_FILTERS'. already in adapter filters"); +// } + + return message; + } + + protected Object doPostFilters(String adptGrpName, String adptName, Properties prop, Object message, + Properties tempProp) throws Exception { + +// boolean isSetCommonFilterInAdapterProp = false; + // 1. adapter에 설정된 필터 수행 + String postFiltersStr = prop.getProperty(POST_FILTERS); + if (StringUtils.isNotEmpty(postFiltersStr)) { + String[] postFilters = StringUtils.split(postFiltersStr, ","); + for (String filterName : postFilters) { + if (StringUtils.isBlank(filterName)) { + continue; + } + + HttpClientAdapterFilter adapterFilter = HttpClient5AdapterFilterFactory.createFilter(filterName.trim()); + if (adapterFilter != null) { +// if (adapterFilter instanceof IBKOutCommonFilter) +// isSetCommonFilterInAdapterProp = true; + message = adapterFilter.doPostFilter(adptGrpName, adptName, prop, message, tempProp); + } else { + throw new Exception("Failed get Filter Class: " + filterName); + } + } + } + +// // 2. IBKOutCommonFilter 필터 수행 +// if (!isSetCommonFilterInAdapterProp) { +// HttpClientAdapterFilter ibkFilter = HttpClient5AdapterFilterFactory +// .createFilter(IBKOutCommonFilter.class.getName()); +// if (ibkFilter != null) { +// message = ibkFilter.doPostFilter(adptGrpName, adptName, prop, message, tempProp); +// } +// } else { +// logger.debug("IBKOutCommonFilter isSetCommonFilterInAdapterProp 'PRE_FILTERS'. already in adapter filters"); +// } + return message; + } + +// protected Object doExceptionFilters(String adptGrpName, String adptName, Properties prop, Object message, +// Properties tempProp, Exception e) throws Exception { +// String exceptionFilterName = prop.getProperty(EXCEPTION_FILTER); +// if (StringUtils.isEmpty(exceptionFilterName)) +// exceptionFilterName = IBKOutExceptionFilter.class.getSimpleName(); +// +// HttpClientAdapterExceptionFilter exceptionFilter = HttpClient5AdapterFilterFactory.createExceptionFilter(exceptionFilterName.trim()); +// return exceptionFilter.doExceptionFilter(adptGrpName, adptName, prop, message, tempProp, e); +// +// } + +} \ No newline at end of file