diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java
new file mode 100644
index 0000000..d034ceb
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/HttpClient5AdapterServiceRestAddFilter.java
@@ -0,0 +1,142 @@
+package com.eactive.eai.adapter.http.client.impl;
+
+import java.util.Properties;
+
+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.filter.HttpClient5AdapterFilterFactory;
+import com.eactive.eai.adapter.http.client.impl.filter.HttpClientAdapterFilter;
+
+/**
+ * 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);
+
+ 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 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;
+ }
+
+ logger.debug("HttpClient5AdapterServiceRestAddFilter] Processing Start [" + filterName + "]");
+ 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;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AllHeaderFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AllHeaderFilter.java
new file mode 100644
index 0000000..12eb59f
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AllHeaderFilter.java
@@ -0,0 +1,121 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+import java.util.stream.Stream;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey;
+import com.eactive.eai.common.property.PropManager;
+import com.eactive.eai.common.util.Logger;
+
+public class AllHeaderFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey {
+ protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
+
+ public static final String PROPERTIES_GROUP_NAME = "HttpHeaderFilter";
+ public static final String HEADER_KEY_NAMES = "AllHeaderFilter.blackList";
+
+
+ String[] HttpHeaderRelayBlackList = {
+ "Content-Length",
+ "Transfer-Encoding",
+ "Host",
+ "Authorization",
+ "Accept",
+ "Host",
+ "Cookie",
+ "Connection",
+ "Keep-Alive",
+ "Proxy-Authenticate",
+ "Proxy-Authorization",
+ "TE",
+ "Trailer",
+ "Transfer-Encoding",
+ "Upgrade",
+ "Content-Type",
+ "Content-Encoding",
+ "Content-Language",
+ "Content-Location",
+ "Content-MD5",
+ "Expect",
+ };
+
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ logger.debug("doPreFilter Processing Start.");
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ String propValue = PropManager.getInstance().getProperty(PROPERTIES_GROUP_NAME, HEADER_KEY_NAMES, "").trim();
+
+ String[] userSettingBlackList = propValue.split(",");
+
+ if( userSettingBlackList.length > 0 ) {
+ HttpHeaderRelayBlackList = Stream
+ .concat(Arrays.stream(HttpHeaderRelayBlackList), Arrays.stream(userSettingBlackList))
+ .toArray(String[]::new);
+ }
+
+
+ for(String keyName : inboundHeaderMap.keySet() ) {
+
+ if( StringUtils.equalsAnyIgnoreCase( keyName, HttpHeaderRelayBlackList ) ) {
+ logger.debug("Skip Processing Key ["+keyName+"], value ["+inboundHeaderMap.get(keyName)+"] in HttpHeaderRelayBlackList");
+ continue;
+ }
+
+ filterHeaders.put(keyName, inboundHeaderMap.get(keyName));
+ logger.debug("Processing Key ["+keyName+"], value ["+inboundHeaderMap.get(keyName)+"]");
+ }
+
+ logger.debug("doPreFilter Processing End.");
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/AsyncReponseFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AsyncReponseFilter.java
new file mode 100644
index 0000000..14727ab
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/AsyncReponseFilter.java
@@ -0,0 +1,118 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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.PropManager;
+import com.eactive.eai.common.util.Logger;
+
+
+public class AsyncReponseFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey {
+ protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
+
+ public static final String X_TRACE_ID = "partnerTraceId";
+ public static final String TRACE_ID = "traceId";
+
+ public static final String PROPERTIES_GROUP_NAME = "HttpHeaderFilter";
+ public static final String HEADER_KEY_NAMES = "AsyncReponseFilter";
+
+
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ logger.debug("AsyncReponseFilter] PreFilter Processing Start!!");
+ String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, "");
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+
+ String propValue = PropManager.getInstance().getProperty(PROPERTIES_GROUP_NAME, HEADER_KEY_NAMES, "").trim();
+
+ String[] headerKeyNames = propValue.split(",");
+
+
+ headerKeyNames = Arrays.stream(headerKeyNames)
+ .map(String::trim)
+ .toArray(String[]::new);
+
+ try {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(X_TRACE_ID)) {
+ filterHeaders.put(X_TRACE_ID, inboundHeaderMap.get(X_TRACE_ID));
+ logger.debug("AsyncReponseFilter] Processing Key ["+X_TRACE_ID+"], value ["+inboundHeaderMap.get(X_TRACE_ID)+"]");
+ }
+
+ if (inboundHeaderMap.containsKey(TransactionContextKeys.X_LOAN_TOKEN)) {
+ filterHeaders.put(TransactionContextKeys.X_LOAN_TOKEN, inboundHeaderMap.get(TransactionContextKeys.X_LOAN_TOKEN));
+ logger.debug("AsyncReponseFilter] Processing Key ["+TransactionContextKeys.X_LOAN_TOKEN+"], value ["+inboundHeaderMap.get(TransactionContextKeys.X_LOAN_TOKEN)+"]");
+ }
+ }
+
+ filterHeaders.setProperty(TRACE_ID, traceId);
+ logger.debug("AsyncReponseFilter] Processing Key ["+TRACE_ID+"], value ["+traceId+"]");
+
+ for (String keyName : inboundHeaderMap.keySet()) {
+
+ if (StringUtils.equalsAnyIgnoreCase(keyName, headerKeyNames)) {
+ String value = inboundHeaderMap.get(keyName);
+ filterHeaders.put(keyName, value);
+ logger.debug("AsyncReponseFilter] Processing Key [" + keyName + "], value [" + value + "]");
+ }
+
+ }
+
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/HttpClient5AdapterFilterFactory.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterFactory.java
new file mode 100644
index 0000000..f0947b2
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterFactory.java
@@ -0,0 +1,90 @@
+package com.eactive.eai.adapter.http.client.impl.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 customBasePackage = "com.eactive.eai.custom.adapter.http.client.filter";
+ static String basePackage = "com.eactive.eai.adapter.http.client.impl.filter";
+ private static ConcurrentHashMap h = 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 SIMPLEFRAMEWORKBODY:
+ filter = new SimpleframeworkBodyFilter();
+ 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 TRACEBODY:
+ filter = new TraceBodyFilter();
+ break;
+ case TOSSBANK:
+ filter = new TOSSBankFilter();
+ break;
+ case ASYNCRESPONSE:
+ filter = new AsyncReponseFilter();
+ break;
+ case ALLHEADER:
+ filter = new AllHeaderFilter();
+ break;
+ default:
+ filter = classForName(type);
+ if (filter == null) {
+ filter = classForName(customBasePackage + "." + 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;
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterType.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterType.java
new file mode 100644
index 0000000..03865ec
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClient5AdapterFilterType.java
@@ -0,0 +1,27 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+public enum HttpClient5AdapterFilterType {
+ SIMPLEFRAMEWORK,
+ SIMPLEFRAMEWORKBODY,
+ JBOBP,
+ KFTCFACE,
+ KFTCP2P,
+ KAKAOBANK,
+ NAVERFIN,
+ NICECREDIT,
+ TOSSBANK,
+ TRACEBODY,
+ ASYNCRESPONSE,
+ ALLHEADER,
+ 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/adapter/http/client/impl/filter/HttpClientAdapterFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilter.java
new file mode 100644
index 0000000..0f836d3
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilter.java
@@ -0,0 +1,12 @@
+package com.eactive.eai.adapter.http.client.impl.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/adapter/http/client/impl/filter/HttpClientAdapterFilterException.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilterException.java
new file mode 100644
index 0000000..36a0b19
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/HttpClientAdapterFilterException.java
@@ -0,0 +1,35 @@
+package com.eactive.eai.adapter.http.client.impl.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/adapter/http/client/impl/filter/JBOBPFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/JBOBPFilter.java
new file mode 100644
index 0000000..61fea8e
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/JBOBPFilter.java
@@ -0,0 +1,106 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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 {
+
+ logger.debug("JBOBPFilter] PreFilter Processing Start!!");
+ PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER);
+ if (propGroupVo != null) systemTrustKey = propGroupVo.getProperty(X_OBP_TRUST_SYSTEM, systemTrustKey);
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+ try {
+ String obpPartnerCode = "000000-00";
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(X_OBP_PARTNERCODE)) {
+ filterHeaders.put(X_OBP_PARTNERCODE, inboundHeaderMap.get(X_OBP_PARTNERCODE));
+ logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+inboundHeaderMap.get(X_OBP_PARTNERCODE)+"]");
+ } else {
+ filterHeaders.put(X_OBP_PARTNERCODE, obpPartnerCode);
+ logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+obpPartnerCode+"]");
+ }
+ } else {
+ filterHeaders.put(X_OBP_PARTNERCODE, obpPartnerCode);
+ logger.debug("JBOBPFilter] Processing Key ["+X_OBP_PARTNERCODE+"], value ["+obpPartnerCode+"]");
+ }
+
+ String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, "");
+ if (StringUtils.isNotBlank(uuid)) {
+ filterHeaders.setProperty(X_OBP_TXID, uuid); // JB OBP Framework용
+ logger.debug("JBOBPFilter] Processing Key ["+X_OBP_TXID+"], value ["+uuid+"]");
+ }
+ if (StringUtils.isNotBlank(systemTrustKey)) {
+ filterHeaders.setProperty(X_OBP_TRUST_SYSTEM, systemTrustKey); // JB OBP Framework용
+ logger.debug("JBOBPFilter] Processing Key ["+X_OBP_TRUST_SYSTEM+"], value ["+systemTrustKey+"]");
+ }
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/KAKAOBankFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KAKAOBankFilter.java
new file mode 100644
index 0000000..d30760f
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KAKAOBankFilter.java
@@ -0,0 +1,135 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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 {
+
+ logger.debug("KAKAOBankFilter] PreFilter Processing Start!!");
+ 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 {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(X_KKB_PARTNER_CODE)) {
+ filterHeaders.put(X_KKB_PARTNER_CODE, inboundHeaderMap.get(X_KKB_PARTNER_CODE));
+ } else {
+ filterHeaders.put(X_KKB_PARTNER_CODE, partnerCode);
+ }
+ if (inboundHeaderMap.containsKey(X_KKB_API_NAME)) {
+ filterHeaders.put(X_KKB_API_NAME, inboundHeaderMap.get(X_KKB_API_NAME));
+ } else {
+ filterHeaders.put(X_KKB_API_NAME, apiName);
+ }
+ if (inboundHeaderMap.containsKey(X_KKB_API_TX_ID)) {
+ filterHeaders.put(X_KKB_API_TX_ID, inboundHeaderMap.get(X_KKB_API_TX_ID));
+ } else {
+ filterHeaders.put(X_KKB_API_TX_ID, apiTxId);
+ }
+ if (inboundHeaderMap.containsKey(X_KKB_TX_TIME)) {
+ filterHeaders.put(X_KKB_TX_TIME, inboundHeaderMap.get(X_KKB_TX_TIME));
+ } else {
+ filterHeaders.put(X_KKB_TX_TIME, txTime);
+ }
+ if (inboundHeaderMap.containsKey(X_KKB_CMPR_MGMT_NO)) {
+ filterHeaders.put(X_KKB_CMPR_MGMT_NO, inboundHeaderMap.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);
+ }
+ logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_PARTNER_CODE+"], value ["+filterHeaders.getProperty(X_KKB_PARTNER_CODE)+"]");
+ logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_API_NAME+"], value ["+filterHeaders.getProperty(X_KKB_API_NAME)+"]");
+ logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_API_TX_ID+"], value ["+filterHeaders.getProperty(X_KKB_API_TX_ID)+"]");
+ logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_TX_TIME+"], value ["+filterHeaders.getProperty(X_KKB_TX_TIME)+"]");
+ logger.debug("KAKAOBankFilter] Processing Key ["+X_KKB_CMPR_MGMT_NO+"], value ["+filterHeaders.getProperty(X_KKB_CMPR_MGMT_NO)+"]");
+
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return returnMessage;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/KFTCFaceFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCFaceFilter.java
new file mode 100644
index 0000000..a46a751
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCFaceFilter.java
@@ -0,0 +1,154 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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.common.property.PropGroupVO;
+import com.eactive.eai.common.property.PropManager;
+import com.eactive.eai.common.server.EAIServerManager;
+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";
+ public static String instId = null;
+
+ static {
+ EAIServerManager eaiServerManager = EAIServerManager.getInstance();
+ instId = eaiServerManager.getInstId();
+ }
+
+ @SuppressWarnings({ "unchecked" })
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ logger.debug("KFTCFaceFilter] PreFilter Processing Start!!");
+ JSONObject returnMessage = null;
+ String clientId = "";
+ String orgCode = "034"; // 광주은행 행코드
+
+ 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 reqDate = new SimpleDateFormat("yyMMdd").format(new Date());
+ String reqTime = new SimpleDateFormat("HHmmss").format(new Date());
+ // 기관코드(3) + 요청일자(6) -- 금결원 표준화 항목, 고정 9자리.
+ // 요청시간(6) + 인스턴스ID(2) + RandomString(3) -- 기관별 생성 거래고유번호(11자리)
+ // 기관코드(3) + 요청일자(6) + 요청시간(6) + 인스턴스ID(2) + RandomString(3) -- 20자리.
+ String transaction_id = orgCode + reqDate + reqTime + instId + RandomStringUtils.random(3, true, true).toUpperCase();
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+ try {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(H_CLIENT_ID)) {
+ filterHeaders.put(H_CLIENT_ID, inboundHeaderMap.get(H_CLIENT_ID));
+ logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+inboundHeaderMap.get(H_CLIENT_ID)+"]");
+ } else {
+ filterHeaders.put(H_CLIENT_ID, clientId);
+ logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+clientId+"]");
+ }
+ } else {
+ filterHeaders.setProperty(H_CLIENT_ID, clientId);
+ logger.debug("KFTCFaceFilter] Processing Key ["+H_CLIENT_ID+"], value ["+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);
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/KFTCP2PFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCP2PFilter.java
new file mode 100644
index 0000000..b6992d3
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/KFTCP2PFilter.java
@@ -0,0 +1,122 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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.server.EAIServerManager;
+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";
+ public static String instId = null;
+
+ static {
+ EAIServerManager eaiServerManager = EAIServerManager.getInstance();
+ instId = eaiServerManager.getInstId();
+ }
+
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ logger.debug("KFTCP2PFilter] PreFilter Processing Start!!");
+ String orgCode = "D210400012"; // 광주은행 개발 기관코드(운영: K210800020)
+
+ PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER);
+ if (propGroupVo != null) {
+ orgCode = propGroupVo.getProperty(PROP_PREFIX + "." + H_ORG_CODE);
+ }
+
+ String apiTrxDtm = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
+ String apiTrxTm = new SimpleDateFormat("HHmmss").format(new Date());
+ // 기관코드(10) + 인스턴스ID(2) + 일시(6) + RandomString(2) -- 총 20자리
+ String apiTrxNo = orgCode + instId + apiTrxTm + RandomStringUtils.random(2, true, true).toUpperCase();
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+ try {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(H_TRX_NO)) {
+ filterHeaders.put(H_TRX_NO, inboundHeaderMap.get(H_TRX_NO));
+ logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_NO+"], value ["+inboundHeaderMap.get(H_TRX_NO)+"]");
+ } else {
+ filterHeaders.put(H_TRX_NO, apiTrxNo);
+ logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_NO+"], value ["+apiTrxNo+"]");
+ }
+ if (inboundHeaderMap.containsKey(H_TRX_DTM)) {
+ filterHeaders.put(H_TRX_DTM, inboundHeaderMap.get(H_TRX_DTM));
+ logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_DTM+"], value ["+inboundHeaderMap.get(H_TRX_DTM)+"]");
+ } else {
+ filterHeaders.put(H_TRX_DTM, apiTrxDtm);
+ logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_DTM+"], value ["+apiTrxDtm+"]");
+ }
+ } else {
+ filterHeaders.put(H_TRX_NO, apiTrxNo);
+ filterHeaders.put(H_TRX_DTM, apiTrxDtm);
+ }
+ logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_NO+"], value ["+filterHeaders.getProperty(H_TRX_NO)+"]");
+ logger.debug("KFTCP2PFilter] Processing Key ["+H_TRX_DTM+"], value ["+filterHeaders.getProperty(H_TRX_DTM)+"]");
+
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/NAVERFinFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NAVERFinFilter.java
new file mode 100644
index 0000000..258cebb
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NAVERFinFilter.java
@@ -0,0 +1,107 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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 {
+
+ logger.debug("NAVERFinFilter] PreFilter Processing Start!!");
+ 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 {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(X_PARTNER_ID)) {
+ filterHeaders.put(X_PARTNER_ID, inboundHeaderMap.get(X_PARTNER_ID));
+ logger.debug("NAVERFinFilter] Processing Key ["+X_PARTNER_ID+"], value ["+inboundHeaderMap.get(X_PARTNER_ID)+"]");
+ } else {
+ filterHeaders.put(X_PARTNER_ID, partnerID);
+ logger.debug("NAVERFinFilter] Processing Key ["+X_PARTNER_ID+"], value ["+partnerID+"]");
+ }
+ if (inboundHeaderMap.containsKey(X_FINTECH_ID)) {
+ filterHeaders.put(X_FINTECH_ID, inboundHeaderMap.get(X_FINTECH_ID));
+ logger.debug("NAVERFinFilter] Processing Key ["+X_FINTECH_ID+"], value ["+inboundHeaderMap.get(X_FINTECH_ID)+"]");
+ } else {
+ filterHeaders.put(X_FINTECH_ID, fintechId);
+ logger.debug("NAVERFinFilter] Processing Key ["+X_FINTECH_ID+"], value ["+fintechId+"]");
+ }
+ } else {
+ filterHeaders.put(X_PARTNER_ID, partnerID);
+ filterHeaders.put(X_FINTECH_ID, fintechId);
+ }
+ logger.debug("NAVERFinFilter] Processing Key ["+X_PARTNER_ID+"], value ["+filterHeaders.getProperty(X_PARTNER_ID)+"]");
+ logger.debug("NAVERFinFilter] Processing Key ["+X_FINTECH_ID+"], value ["+filterHeaders.getProperty(X_FINTECH_ID)+"]");
+
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/NICECreditFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NICECreditFilter.java
new file mode 100644
index 0000000..d037aae
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/NICECreditFilter.java
@@ -0,0 +1,138 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Map.Entry;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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 {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+ if (inboundHeaderMap != null && inboundHeaderMap.containsKey(H_PRODUCTID)) {
+ for (Entry e : inboundHeaderMap.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);
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/SimpleFrameworkFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleFrameworkFilter.java
new file mode 100644
index 0000000..9087e06
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleFrameworkFilter.java
@@ -0,0 +1,109 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+import org.apache.commons.lang3.StringUtils;
+
+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";
+ public static final String PARTNER_TRACE_ID = "partnerTraceId";
+
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ logger.debug("SimpleFrameworkFilter] PreFilter Processing Start!!");
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ try {
+ /* 업체정보 */
+ String clientId = tempProp.getProperty(HttpAdapterServiceSupport.PROPERTIES_NAME_CLIENT_ID);
+ if (StringUtils.isEmpty(clientId)) clientId = "";
+ filterHeaders.put(CLIENTID, clientId);
+ logger.debug("SimpleFrameworkFilter] Processing Key ["+CLIENTID+"], value ["+clientId+"]");
+
+ /* APIM 거래추적자 */
+ String uuid = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, "");
+ filterHeaders.put(TRACEID, uuid);
+ logger.debug("SimpleFrameworkFilter] Processing Key ["+TRACEID+"], value ["+uuid+"]");
+
+ /* GUID */
+ String guid = tempProp.getProperty(TransactionContextKeys.GUID, "");
+ filterHeaders.put(GUID, guid);
+ logger.debug("SimpleFrameworkFilter] Processing Key ["+GUID+"], value ["+guid+"]");
+
+ /* 최초요청시간 */
+ String receivedTimestamp = tempProp.getProperty(HttpAdapterServiceKey.INBOUND_REQUESTED_TIME, "");
+ filterHeaders.put(RECEIVEDTIMESTAMP, receivedTimestamp);
+ logger.debug("SimpleFrameworkFilter] Processing Key ["+RECEIVEDTIMESTAMP+"], value ["+receivedTimestamp+"]");
+
+ String partnerTraceId = inboundHeaderMap.getOrDefault(PARTNER_TRACE_ID, "");
+ filterHeaders.put(PARTNER_TRACE_ID, partnerTraceId);
+ logger.debug("SimpleFrameworkFilter] Processing Key ["+PARTNER_TRACE_ID+"], value ["+partnerTraceId+"]");
+
+ String x_loan_token = inboundHeaderMap.getOrDefault(TransactionContextKeys.X_LOAN_TOKEN, "");
+ filterHeaders.put(TransactionContextKeys.X_LOAN_TOKEN, x_loan_token);
+ logger.debug("SimpleFrameworkFilter] Processing Key ["+TransactionContextKeys.X_LOAN_TOKEN+"], value ["+x_loan_token+"]");
+
+
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/SimpleframeworkBodyFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleframeworkBodyFilter.java
new file mode 100644
index 0000000..e8366cc
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/SimpleframeworkBodyFilter.java
@@ -0,0 +1,28 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Properties;
+
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+
+import com.eactive.eai.common.TransactionContextKeys;
+
+public class SimpleframeworkBodyFilter extends SimpleFrameworkFilter {
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ Object returnMessage = super.doPreFilter(adptGrpName, adptName, prop, message, tempProp);
+
+ JSONObject bizJsonStr = null;
+
+ if ( returnMessage instanceof String ) {
+ bizJsonStr = (JSONObject) JSONValue.parse( (String)returnMessage);
+ if( bizJsonStr != null ) {
+ bizJsonStr.put("GUID", tempProp.getOrDefault(TransactionContextKeys.GUID, "") );
+ }
+ }
+
+ return bizJsonStr != null ? bizJsonStr.toJSONString() : returnMessage;
+ }
+}
diff --git a/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TOSSBankFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TOSSBankFilter.java
new file mode 100644
index 0000000..860f214
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TOSSBankFilter.java
@@ -0,0 +1,97 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.TreeMap;
+
+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 {
+
+ logger.debug("TOSSBankFilter] PreFilter Processing Start!!");
+ String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, "");
+
+ PropGroupVO propGroupVo = PropManager.getInstance().getPropGroupVO(KJB_HEADER);
+ if (propGroupVo != null) {
+ }
+
+ Properties filterHeaders = (Properties) tempProp.get("FILTERHEADER");
+ if (filterHeaders == null) {
+ filterHeaders = new Properties();
+ tempProp.put("FILTERHEADER", filterHeaders);
+ }
+ try {
+ Map inboundHeaderMap = getInboundHeaderProp(tempProp);
+
+ if (!inboundHeaderMap.isEmpty()) {
+ if (inboundHeaderMap.containsKey(X_TOSSBANK_LOAN_TRACE_ID)) {
+ filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, inboundHeaderMap.get(X_TOSSBANK_LOAN_TRACE_ID));
+ logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+inboundHeaderMap.get(X_TOSSBANK_LOAN_TRACE_ID)+"]");
+ } else {
+ filterHeaders.put(X_TOSSBANK_LOAN_TRACE_ID, traceId);
+ logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+traceId+"]");
+ }
+ } else {
+ /* APIM 거래추적자 */
+ filterHeaders.setProperty(X_TOSSBANK_LOAN_TRACE_ID, traceId);
+ logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+traceId+"]");
+ }
+ logger.debug("TOSSBankFilter] Processing Key ["+X_TOSSBANK_LOAN_TRACE_ID+"], value ["+filterHeaders.getProperty(X_TOSSBANK_LOAN_TRACE_ID)+"]");
+
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ }
+
+ return message;
+ }
+
+ public Map getInboundHeaderProp(Properties prop) {
+ Properties header = new Properties();
+ Map inboundHeaderMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ try {
+ Object headerObj = prop.get(HttpAdapterServiceKey.INBOUND_HEADER);
+ if (headerObj instanceof Properties) { //tomcat
+ header = (Properties) headerObj;
+ for (String name : header.stringPropertyNames()) {
+ inboundHeaderMap.put(name, header.getProperty(name));
+ }
+ } else if (headerObj instanceof String) { //weblogic
+ String str = (String) headerObj;
+ str = str.substring(1, str.length() - 1);
+ // key=value 쌍 분리
+ String[] entries = str.split(",");
+ for (String entry : entries) {
+ String[] kv = entry.split("=", 2);
+ if (kv.length == 2) {
+ inboundHeaderMap.put(kv[0].trim(), kv[1].trim());
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return inboundHeaderMap;
+ }
+
+ @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/adapter/http/client/impl/filter/TraceBodyFilter.java b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TraceBodyFilter.java
new file mode 100644
index 0000000..d099504
--- /dev/null
+++ b/src/main/java/com/eactive/eai/adapter/http/client/impl/filter/TraceBodyFilter.java
@@ -0,0 +1,71 @@
+package com.eactive.eai.adapter.http.client.impl.filter;
+
+import java.util.Properties;
+
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+
+import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey;
+import com.eactive.eai.common.TransactionContextKeys;
+import com.eactive.eai.common.util.Logger;
+import com.nimbusds.jose.shaded.gson.JsonObject;
+
+public class TraceBodyFilter implements HttpClientAdapterFilter, HttpAdapterServiceKey {
+
+ protected static Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER);
+
+ public static final String BIZ_HEADER = "header";
+ public static final String GUID = "guid";
+ public static final String TRACEID = "traceId";
+
+ @Override
+ public Object doPreFilter(String adptGrpName, String adptName, Properties prop, Object message, Properties tempProp)
+ throws Exception {
+
+ JSONObject bizJsonStr = null;
+
+ if (message instanceof String) {
+
+ bizJsonStr = (JSONObject) JSONValue.parse((String) message);
+
+ if ( bizJsonStr == null ) return message; //json string이 아님.
+
+ if (bizJsonStr.containsKey(BIZ_HEADER)) {
+ JSONObject bizHeader = (JSONObject) bizJsonStr.get(BIZ_HEADER);
+
+ putBizHeaderData(bizHeader, tempProp);
+
+ }else {
+
+ JSONObject bizHeader = new JSONObject();
+ bizJsonStr.put(BIZ_HEADER, bizHeader);
+ putBizHeaderData(bizHeader, tempProp);
+
+ }
+
+ }
+
+ return bizJsonStr != null ? bizJsonStr.toJSONString() : message;
+ }
+
+ static private void putBizHeaderData(JSONObject bizHeader, Properties tempProp) {
+
+ String traceId = tempProp.getProperty(TransactionContextKeys.TRANSACTION_UUID, "");
+
+ String guid = tempProp.getProperty(TransactionContextKeys.GUID, "");
+
+ bizHeader.put(GUID, guid);
+ logger.debug("Processing Key [" + GUID + "], value [" + guid + "]");
+
+ bizHeader.put(TRACEID, traceId);
+ logger.debug("Processing Key [" + TRACEID + "], value [" + traceId + "]");
+ }
+
+ @Override
+ public Object doPostFilter(String adptGrpName, String adptName, Properties prop, Object message,
+ Properties tempProp) throws Exception {
+ // TODO Auto-generated method stub
+ return message;
+ }
+
+}