diff --git a/src/main/java/com/eactive/eai/adapter/service/DJBApiAdapterService.java b/src/main/java/com/eactive/eai/adapter/service/DJBApiAdapterService.java index 3f06499..74fe8ac 100644 --- a/src/main/java/com/eactive/eai/adapter/service/DJBApiAdapterService.java +++ b/src/main/java/com/eactive/eai/adapter/service/DJBApiAdapterService.java @@ -26,7 +26,6 @@ import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; -import org.json.simple.JSONObject; import org.json.simple.JSONValue; import org.springframework.http.HttpHeaders; 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.message.MessageType; 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.Logger; 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.processor.Processor; import com.eactive.eai.message.StandardMessageUtil; +import com.eactive.eai.util.JsonPathUtil; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -306,48 +305,17 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport { 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 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, transactionProp, request, response, adptMsgType); // 위치변경 : 가공되지 않은 Body값을 저장하기 위하여 위쪽으로 이동. // transactionProp.put(INBOUND_REQUEST_MESSAGE, message); - // 로컬 서비스 호출 ,encoding 처리 추가 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만 필요 applyOutboundResponseHeaders(transactionProp, response); @@ -361,9 +329,9 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport { stopWatch.stop(); String syncAsyncType = transactionProp.getProperty(INBOUND_SYNC_ASYNC_TYPE); - + 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); if(headerGroup != null) { for(Iterator it = headerGroup.fieldNames(); it.hasNext();) { @@ -372,23 +340,22 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport { response.addHeader(name, value); } 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, - HttpServletRequest request, HttpServletResponse response, String adptMsgType) throws DocumentException, IOException { + HttpServletRequest request, HttpServletResponse response, String adptMsgType) throws DocumentException, IOException, Exception { // XML 지원 개발 String headerGroupName = prop.getProperty(HEADER_GROUP); String relayRequestHeaderKeys = prop.getProperty(HEADER_KEYS); @@ -397,31 +364,37 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport { if(message instanceof String && StringUtils.isEmpty((String)message)) message = "{}"; - JSONObject jsonMessage = JSONUtils.parseJson(message); - JSONObject headerJson = JSONUtils.getChildJson(jsonMessage, headerGroupName); - if (headerJson == null) - headerJson = new JSONObject(); - - if (StringUtils.equalsIgnoreCase(relayRequestHeaderKeys, "ALL")) { - for (Enumeration 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, ","); + JsonNode jsonMessageNode = JacksonUtil.readTree(message, mapper); + if (jsonMessageNode == null || !jsonMessageNode.isObject()) { + jsonMessageNode = OBJECT_MAPPER.createObjectNode(); + } + ObjectNode jsonNode = (ObjectNode) jsonMessageNode; - for (String key : relayKeyArr) { - String headerValue = request.getHeader(key); - if (StringUtils.isNotBlank(headerValue)) { - headerJson.put(StringUtils.lowerCase(key), headerValue); - } - } + JsonNode childNode = jsonNode.get(headerGroupName); + ObjectNode headerJson = (childNode != null && childNode.isObject()) + ? (ObjectNode) childNode + : OBJECT_MAPPER.createObjectNode(); + + if (StringUtils.equalsIgnoreCase(relayRequestHeaderKeys, "ALL")) { + for (Enumeration 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) { - jsonMessage.put(headerGroupName, headerJson); - message = jsonMessage.toJSONString(); + if (!headerJson.isEmpty()) { + jsonNode.set(headerGroupName, headerJson); + message = jsonNode; } } else if(MessageType.XML.equals(adptMsgType)) { 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 { // body headergroup -> http header 세팅 String headerGroupName = prop.getProperty(HEADER_GROUP); @@ -589,7 +562,7 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport { } ((ObjectNode) jsonNode).remove(headerGroupName); - return jsonNode.toString(); + return jsonNode; } else if(MessageType.XML.equals(adptMsgType)) { Document document = XMLUtils.convertXmlDocument(resultMessage); if(document != null) {