diff --git a/src/main/java/com/eactive/eai/custom/adapter/handler/KakaopayAdapterErrorMsgHandler.java b/src/main/java/com/eactive/eai/custom/adapter/handler/KakaopayAdapterErrorMsgHandler.java index fdf17e6..735d06b 100644 --- a/src/main/java/com/eactive/eai/custom/adapter/handler/KakaopayAdapterErrorMsgHandler.java +++ b/src/main/java/com/eactive/eai/custom/adapter/handler/KakaopayAdapterErrorMsgHandler.java @@ -10,6 +10,7 @@ import com.eactive.eai.adapter.handler.TemplateCodeConvertAdapterErrorMsgHandler import com.eactive.eai.adapter.http.dynamic.HttpAdapterServiceKey; import com.eactive.eai.common.message.EAIMessage; import com.eactive.eai.common.message.EAIMessageKeys; +import com.eactive.eai.common.util.JacksonUtil; import com.eactive.eai.common.util.Logger; import com.eactive.eai.custom.message.StandardMessageCoordinatorDJB; import com.eactive.eai.message.StandardItem; @@ -23,7 +24,8 @@ public class KakaopayAdapterErrorMsgHandler extends TemplateCodeConvertAdapterEr private static final Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + // 기본 ObjectMapper 는 응답 JSON 왕복에서 100000000.00 을 1.0E8 로 바꿔버린다. + private static final ObjectMapper OBJECT_MAPPER = JacksonUtil.newNumberSafeMapper(); @Override public Object generateNonStandardErrorResponseMessage(String inboundAdapterGroupName, String inboundAdapterName, diff --git a/src/main/java/com/eactive/eai/custom/adapter/handler/NaverpayAdapterErrorMsgHandler.java b/src/main/java/com/eactive/eai/custom/adapter/handler/NaverpayAdapterErrorMsgHandler.java index f5275d5..6e80457 100644 --- a/src/main/java/com/eactive/eai/custom/adapter/handler/NaverpayAdapterErrorMsgHandler.java +++ b/src/main/java/com/eactive/eai/custom/adapter/handler/NaverpayAdapterErrorMsgHandler.java @@ -15,15 +15,11 @@ import com.eactive.eai.message.StandardItem; import com.eactive.eai.message.StandardMessage; import com.eactive.eai.message.manager.StandardMessageManager; import com.eactive.eai.message.service.InterfaceMapper; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; public class NaverpayAdapterErrorMsgHandler extends TemplateAdapterErrorMsgHandler { private static final Logger logger = Logger.getLogger(Logger.LOGGER_ADAPTER); - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - /** * 표준 -> 비표준 거래 * 아웃바운드 어댑터에서 Exception이 발생했을 때, Outbound Process 응답 메시지 생성 diff --git a/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTechAddFilter.java b/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTechAddFilter.java index 9ef9ad9..7dcb0aa 100644 --- a/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTechAddFilter.java +++ b/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTechAddFilter.java @@ -9,6 +9,7 @@ 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; +import com.eactive.eai.common.util.JacksonUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -36,7 +37,8 @@ public class HttpClient5AdapterServiceBigTechAddFilter extends HttpClient5Adapte // // Adapter에서 Exception이 발생한 경우, 처리할 필터 // static final String EXCEPTION_FILTER = "EXCEPTION_FILTER"; - private ObjectMapper mapper = new ObjectMapper(); + // 기본 ObjectMapper 는 JsonNode 직렬화 시 작은 소수를 1.2E-7 로 바꿔버린다. + private ObjectMapper mapper = JacksonUtil.newNumberSafeMapper(); /** * 1. 기능 : HttpClient 호출 전후 Filter 적용용 2. 처리 개요 :
diff --git a/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/KakaopayFilter.java b/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/KakaopayFilter.java index cfc2e30..8ded88d 100644 --- a/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/KakaopayFilter.java +++ b/src/main/java/com/eactive/eai/custom/adapter/http/dynamic/filter/KakaopayFilter.java @@ -9,20 +9,18 @@ import com.eactive.eai.adapter.http.dynamic.filter.FilterException; import com.eactive.eai.adapter.http.dynamic.filter.HttpAdapterFilter; import com.eactive.eai.common.util.JacksonUtil; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; /** * 카카오뱅크 암복호화에 맟추어 커스텀 필요 */ public class KakaopayFilter implements HttpAdapterFilter { - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - @Override public Object doPreFilter(String adptGrpName, String adptName, Object message, Properties prop, HttpServletRequest request, HttpServletResponse response) throws Exception { - JsonNode rootNode = JacksonUtil.readTree(message, OBJECT_MAPPER); + // 인자 1개 오버로드는 JacksonUtil 내부의 number-safe 싱글턴 mapper 를 쓴다. + JsonNode rootNode = JacksonUtil.readTree(message); // term_agreements[0].is_agreed 값이 true 인지 확인 boolean firstAgreed = JacksonUtil.getBoolean(rootNode, "term_agreements[0].is_agreed", false); diff --git a/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/JsonPathExtractRequestMessage.java b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/JsonPathExtractRequestMessage.java index 4447414..aefe43d 100644 --- a/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/JsonPathExtractRequestMessage.java +++ b/src/main/java/com/eactive/eai/custom/transformer/function/userdefined/JsonPathExtractRequestMessage.java @@ -1,12 +1,12 @@ package com.eactive.eai.custom.transformer.function.userdefined; import com.eactive.eai.common.context.ElinkTransactionContext; +import com.eactive.eai.common.util.JacksonUtil; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.spi.json.JacksonJsonNodeJsonProvider; -import com.jayway.jsonpath.spi.json.JacksonJsonProvider; import org.nfunk.jep.ParseException; import org.nfunk.jep.function.PostfixMathCommand; @@ -14,7 +14,9 @@ import java.util.Stack; public class JsonPathExtractRequestMessage extends PostfixMathCommand { - private static final ObjectMapper objectMapper = new ObjectMapper(); + // JsonPath 의 기본 Jackson 프로바이더는 기본 ObjectMapper 를 쓴다. 그러면 JSON 실수가 + // DoubleNode 로 파싱되어, 아래 asText() 결과가 100000000.00 -> "1.0E8" 로 깨진다. + private static final ObjectMapper objectMapper = JacksonUtil.newNumberSafeMapper(); public JsonPathExtractRequestMessage() { numberOfParameters = -1; @@ -33,7 +35,7 @@ public class JsonPathExtractRequestMessage extends PostfixMathCommand { try { // Jackson을 JsonPath의 JSON 프로바이더로 설정 Configuration config = Configuration.builder() - .jsonProvider(new JacksonJsonNodeJsonProvider()) + .jsonProvider(new JacksonJsonNodeJsonProvider(objectMapper)) .build(); JsonNode resultNode = JsonPath.using(config).parse(bizData).read(path);