JSONObject 사용 로직 Jackson으로 변경
This commit is contained in:
@@ -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<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,
|
||||
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);
|
||||
@@ -363,7 +331,7 @@ public class DJBApiAdapterService extends HttpAdapterServiceSupport {
|
||||
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<String> 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
|
||||
// }
|
||||
String strResult = null;
|
||||
if(result instanceof JsonNode)
|
||||
strResult = OBJECT_MAPPER.writeValueAsString(result);
|
||||
else
|
||||
strResult = (String) result;
|
||||
|
||||
return 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();
|
||||
JsonNode jsonMessageNode = JacksonUtil.readTree(message, mapper);
|
||||
if (jsonMessageNode == null || !jsonMessageNode.isObject()) {
|
||||
jsonMessageNode = OBJECT_MAPPER.createObjectNode();
|
||||
}
|
||||
ObjectNode jsonNode = (ObjectNode) jsonMessageNode;
|
||||
|
||||
JsonNode childNode = jsonNode.get(headerGroupName);
|
||||
ObjectNode headerJson = (childNode != null && childNode.isObject())
|
||||
? (ObjectNode) childNode
|
||||
: 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));
|
||||
}
|
||||
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, ",");
|
||||
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);
|
||||
}
|
||||
}
|
||||
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) {
|
||||
|
||||
Reference in New Issue
Block a user