custom 어댑터/변환함수의 Jackson mapper 를 number-safe 로 통일

기본 ObjectMapper 는 JSON 숫자 왕복에서 값을 변형한다
(100000000.00 -> 1.0E8, 0.00000012 -> 1.2E-7). payload 를 다루는
지점을 JacksonUtil.newNumberSafeMapper() 로 맞춘다.

- KakaopayAdapterErrorMsgHandler: 응답 JSON 파싱/왕복 지점 전환
- HttpClient5AdapterServiceBigTechAddFilter: JsonNode 직렬화 지점 전환
- KakaopayFilter: JacksonUtil.readTree(message, OBJECT_MAPPER) 로 plain mapper 를
  넘기고 있어 유틸을 써도 파싱이 깨졌다. 인자 1개 오버로드(number-safe 싱글턴)를
  쓰도록 바꾸고 plain 필드 제거
- JsonPathExtractRequestMessage: 미사용으로 보였던 objectMapper 필드는 사실
  연결이 빠진 것이었다. JsonPath 의 기본 JacksonJsonNodeJsonProvider() 가 내부적으로
  plain ObjectMapper 를 쓰기 때문에 JSON 실수가 DoubleNode 로 파싱되어
  resultNode.asText() 가 "1.0E8" 을 반환했다. 프로바이더에 number-safe mapper 를
  주입해 해결
- NaverpayAdapterErrorMsgHandler: Kakaopay 판을 복사하며 딸려온 미사용 필드/import 제거.
  이 핸들러는 JSON 을 파싱하지 않고 StandardMessage 로만 응답을 만든다

검증: gradlew compileJava BUILD SUCCESSFUL
This commit is contained in:
curry772
2026-08-27 18:09:39 +09:00
parent 76a3b705c0
commit c5bf45cad9
5 changed files with 13 additions and 13 deletions
@@ -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,
@@ -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 응답 메시지 생성
@@ -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. 처리 개요 : <br>
@@ -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);
@@ -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);