JSONObject 사용 로직 Jackson으로 변경

This commit is contained in:
curry772
2026-07-01 17:07:42 +09:00
parent 4094058745
commit 72a39b8d9c
@@ -26,7 +26,6 @@ import org.dom4j.Element;
import org.dom4j.Node; import org.dom4j.Node;
import org.dom4j.io.OutputFormat; import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; import org.dom4j.io.XMLWriter;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue; import org.json.simple.JSONValue;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
@@ -46,7 +45,6 @@ import com.eactive.eai.common.context.ElinkTransactionContext;
import com.eactive.eai.common.exception.ExceptionUtil; import com.eactive.eai.common.exception.ExceptionUtil;
import com.eactive.eai.common.message.MessageType; import com.eactive.eai.common.message.MessageType;
import com.eactive.eai.common.util.CommonLib; import com.eactive.eai.common.util.CommonLib;
import com.eactive.eai.common.util.JSONUtils;
import com.eactive.eai.common.util.JacksonUtil; import com.eactive.eai.common.util.JacksonUtil;
import com.eactive.eai.common.util.Logger; import com.eactive.eai.common.util.Logger;
import com.eactive.eai.common.util.TxFileLogger; import com.eactive.eai.common.util.TxFileLogger;
@@ -55,6 +53,7 @@ import com.eactive.eai.inbound.action.ActionFactory;
import com.eactive.eai.inbound.action.RequestAction; import com.eactive.eai.inbound.action.RequestAction;
import com.eactive.eai.inbound.processor.Processor; import com.eactive.eai.inbound.processor.Processor;
import com.eactive.eai.message.StandardMessageUtil; import com.eactive.eai.message.StandardMessageUtil;
import com.eactive.eai.util.JsonPathUtil;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -306,48 +305,17 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
adptMsgType = adapterVO.getAdapterGroupVO().getMessageType(); adptMsgType = adapterVO.getAdapterGroupVO().getMessageType();
// HttpHeaders responseHeaders = new HttpHeaders();
// responseHeaders.setContentType(MediaType.valueOf("application/json;charset=" + encode));
// HEADER_GROUP 셋팅
// if (MessageType.JSON.equals(adptMsgType) && StringUtils.isNotBlank(headerGroupName)
// && StringUtils.isNotBlank(relayRequestHeaderKeys)) {
// JSONObject jsonMessage = (JSONObject) JSONValue.parse(message);
// JSONObject headerJson = new JSONObject();
// if (StringUtils.equalsIgnoreCase(relayRequestHeaderKeys, "ALL")) {
// for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements(); ) {
// String key = e.nextElement();
// headerJson.put(key, request.getHeader(key));
// }
// } else {
// String[] relayKeyArr = org.springframework.util.StringUtils
// .tokenizeToStringArray(relayRequestHeaderKeys, ",");
//
// for (String key : relayKeyArr) {
// String headerValue = request.getHeader(key);
// if (StringUtils.isNotBlank(headerValue)) {
// headerJson.put(key, headerValue);
// }
// }
// }
//
// if (headerJson.size() > 0) {
// jsonMessage.put(headerGroupName, headerJson);
// message = jsonMessage.toJSONString();
// }
// }
Object reqObject = assignHeaderGroupRequestHeaders(adptGrpName, adptName, message, Object reqObject = assignHeaderGroupRequestHeaders(adptGrpName, adptName, message,
transactionProp, request, response, adptMsgType); transactionProp, request, response, adptMsgType);
// 위치변경 : 가공되지 않은 Body값을 저장하기 위하여 위쪽으로 이동. // 위치변경 : 가공되지 않은 Body값을 저장하기 위하여 위쪽으로 이동.
// transactionProp.put(INBOUND_REQUEST_MESSAGE, message); // transactionProp.put(INBOUND_REQUEST_MESSAGE, message);
// 로컬 서비스 호출 ,encoding 처리 추가
ApiKeyExtractFilter apiKeyExtractor = new ApiKeyExtractFilter(); ApiKeyExtractFilter apiKeyExtractor = new ApiKeyExtractFilter();
apiKeyExtractor.doPreFilter(adptGrpName, adptName, reqObject, transactionProp, request, response); apiKeyExtractor.doPreFilter(adptGrpName, adptName, transactionProp.get(INBOUND_REQUEST_MESSAGE), transactionProp, request, response);
String result = (String) service(adptGrpName, adptName, reqObject, transactionProp, request, response); Object result = service(adptGrpName, adptName, reqObject, transactionProp, request, response);
// bypass만 필요 // bypass만 필요
applyOutboundResponseHeaders(transactionProp, response); applyOutboundResponseHeaders(transactionProp, response);
@@ -361,9 +329,9 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
stopWatch.stop(); stopWatch.stop();
String syncAsyncType = transactionProp.getProperty(INBOUND_SYNC_ASYNC_TYPE); String syncAsyncType = transactionProp.getProperty(INBOUND_SYNC_ASYNC_TYPE);
if (!"ASYN".equals(syncAsyncType) && MessageType.JSON.equals(adptMsgType) && StringUtils.isNotBlank(headerGroupName)) { if (!"ASYN".equals(syncAsyncType) && MessageType.JSON.equals(adptMsgType) && StringUtils.isNotBlank(headerGroupName)) {
ObjectNode rootNode = (ObjectNode) mapper.readTree(result); ObjectNode rootNode = (ObjectNode) JacksonUtil.readTree(result, mapper);
JsonNode headerGroup = rootNode.get(headerGroupName); JsonNode headerGroup = rootNode.get(headerGroupName);
if(headerGroup != null) { if(headerGroup != null) {
for(Iterator<String> it = headerGroup.fieldNames(); it.hasNext();) { for(Iterator<String> it = headerGroup.fieldNames(); it.hasNext();) {
@@ -372,23 +340,22 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
response.addHeader(name, value); response.addHeader(name, value);
} }
rootNode.remove(headerGroupName); rootNode.remove(headerGroupName);
result = mapper.writeValueAsString(rootNode); result = rootNode;
} }
} }
// KJBank는 요청에 대한 응답 (Sync응답, Aync 에 대한 Ack응답) 에 대하여 암호화 하지 않는다. 무조건 안한다. 따라서 아래부분은 구현은 했지만 사용하지 않는다.
// 위 2가지 경우 암호화 하는걸로 요청 변경되어 아래 암호화 수행하도록 수정함
// encryptResponseApply = StringUtils.equalsIgnoreCase(httpProp.getProperty("ENCRYPT_RESPONSE_APPLY", "N"), "Y");
// if ( encryptResponseApply) {
// result = doPostEncryption(result, transactionProp, request); // jwhong Encrypt
// }
return result; String strResult = null;
if(result instanceof JsonNode)
strResult = OBJECT_MAPPER.writeValueAsString(result);
else
strResult = (String) result;
return strResult;
} }
private Object assignHeaderGroupRequestHeaders(String adptGrpName, String adptName, Object message, Properties prop, private Object assignHeaderGroupRequestHeaders(String adptGrpName, String adptName, Object message, Properties prop,
HttpServletRequest request, HttpServletResponse response, String adptMsgType) throws DocumentException, IOException { HttpServletRequest request, HttpServletResponse response, String adptMsgType) throws DocumentException, IOException, Exception {
// XML 지원 개발 // XML 지원 개발
String headerGroupName = prop.getProperty(HEADER_GROUP); String headerGroupName = prop.getProperty(HEADER_GROUP);
String relayRequestHeaderKeys = prop.getProperty(HEADER_KEYS); String relayRequestHeaderKeys = prop.getProperty(HEADER_KEYS);
@@ -397,31 +364,37 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
if(message instanceof String && StringUtils.isEmpty((String)message)) if(message instanceof String && StringUtils.isEmpty((String)message))
message = "{}"; message = "{}";
JSONObject jsonMessage = JSONUtils.parseJson(message); JsonNode jsonMessageNode = JacksonUtil.readTree(message, mapper);
JSONObject headerJson = JSONUtils.getChildJson(jsonMessage, headerGroupName); if (jsonMessageNode == null || !jsonMessageNode.isObject()) {
if (headerJson == null) jsonMessageNode = OBJECT_MAPPER.createObjectNode();
headerJson = new JSONObject(); }
ObjectNode jsonNode = (ObjectNode) jsonMessageNode;
if (StringUtils.equalsIgnoreCase(relayRequestHeaderKeys, "ALL")) {
for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements(); ) {
String key = e.nextElement();
headerJson.put(StringUtils.lowerCase(key), request.getHeader(key));
}
} else {
String[] relayKeyArr = org.springframework.util.StringUtils
.tokenizeToStringArray(relayRequestHeaderKeys, ",");
for (String key : relayKeyArr) { JsonNode childNode = jsonNode.get(headerGroupName);
String headerValue = request.getHeader(key); ObjectNode headerJson = (childNode != null && childNode.isObject())
if (StringUtils.isNotBlank(headerValue)) { ? (ObjectNode) childNode
headerJson.put(StringUtils.lowerCase(key), headerValue); : OBJECT_MAPPER.createObjectNode();
}
} if (StringUtils.equalsIgnoreCase(relayRequestHeaderKeys, "ALL")) {
for (Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements(); ) {
String key = e.nextElement();
headerJson.put(StringUtils.lowerCase(key), request.getHeader(key));
}
} else {
String[] relayKeyArr = org.springframework.util.StringUtils
.tokenizeToStringArray(relayRequestHeaderKeys, ",");
for (String key : relayKeyArr) {
String headerValue = request.getHeader(key);
if (StringUtils.isNotBlank(headerValue)) {
headerJson.put(StringUtils.lowerCase(key), headerValue);
}
}
} }
if (headerJson.size() > 0) { if (!headerJson.isEmpty()) {
jsonMessage.put(headerGroupName, headerJson); jsonNode.set(headerGroupName, headerJson);
message = jsonMessage.toJSONString(); message = jsonNode;
} }
} else if(MessageType.XML.equals(adptMsgType)) { } else if(MessageType.XML.equals(adptMsgType)) {
Document document = XMLUtils.convertXmlDocument(message); Document document = XMLUtils.convertXmlDocument(message);
@@ -536,7 +509,7 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
} }
} }
private String applyHeaderGroupResponseHeaders(String adptGrpName, String adptName, Object resultMessage, Properties prop, private Object applyHeaderGroupResponseHeaders(String adptGrpName, String adptName, Object resultMessage, Properties prop,
HttpServletRequest request, HttpServletResponse response, String adptMsgType) throws Exception { HttpServletRequest request, HttpServletResponse response, String adptMsgType) throws Exception {
// body headergroup -> http header 세팅 // body headergroup -> http header 세팅
String headerGroupName = prop.getProperty(HEADER_GROUP); String headerGroupName = prop.getProperty(HEADER_GROUP);
@@ -589,7 +562,7 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
} }
((ObjectNode) jsonNode).remove(headerGroupName); ((ObjectNode) jsonNode).remove(headerGroupName);
return jsonNode.toString(); return jsonNode;
} else if(MessageType.XML.equals(adptMsgType)) { } else if(MessageType.XML.equals(adptMsgType)) {
Document document = XMLUtils.convertXmlDocument(resultMessage); Document document = XMLUtils.convertXmlDocument(resultMessage);
if(document != null) { if(document != null) {