diff --git a/src/main/java/com/eactive/eai/transformer/layout/Converter.java b/src/main/java/com/eactive/eai/transformer/layout/Converter.java index fe0519e..10a5d52 100644 --- a/src/main/java/com/eactive/eai/transformer/layout/Converter.java +++ b/src/main/java/com/eactive/eai/transformer/layout/Converter.java @@ -222,11 +222,11 @@ public class Converter { } String[] data = normalized.split("[.]"); if (pointLength > 0) { - // length 는 소수점(.) 문자를 제외한 전체 자릿수 규약. 정수부 허용 자릿수 = length - pointLength + // length 는 소수점(.) 문자를 포함한 전체 길이 규약. 정수부 허용 자릿수 = length - pointLength - 1 if (data.length == 1) { - if (data[0].length() > length - pointLength) return false; + if (data[0].length() > length - pointLength - 1) return false; } else if (data.length == 2) { - if (data[0].length() > length - pointLength) return false; + if (data[0].length() > length - pointLength - 1) return false; if (data[1].length() > pointLength) return false; } else { return false; diff --git a/src/test/java/com/eactive/eai/transformer/JSONMessageValidationTest.java b/src/test/java/com/eactive/eai/transformer/JSONMessageValidationTest.java index 9415e76..3dc41a8 100644 --- a/src/test/java/com/eactive/eai/transformer/JSONMessageValidationTest.java +++ b/src/test/java/com/eactive/eai/transformer/JSONMessageValidationTest.java @@ -26,8 +26,8 @@ import com.eactive.eai.transformer.message.MessageSetDataException; * 테스트 대상 레이아웃: EAI_UJSONTYPE_REQ1 * - INT_VALUE : INT, length=5, decimal=0 * - LONG_VALUE : LONG, length=10, decimal=0 - * - BIG_VALUE : BIGDECIMAL, length=10, decimal=5 → 정수부 최대 5자리 - * (length 는 소수점(.) 문자를 제외한 전체 자릿수 규약) + * - BIG_VALUE : BIGDECIMAL, length=10, decimal=5 → 정수부 최대 4자리 + * (length 는 소수점(.) 문자를 포함한 전체 길이 규약) * - BIG15_VALUE : BIGDECIMAL, length=15, decimal=0 → 정수부 최대 15자리 * - STR_VALUE : STRING, length=20 * @@ -196,12 +196,12 @@ class JSONMessageValidationTest { // ───────────────────────────────────────────────────────────────── @Test - @DisplayName("BIG_VALUE 정수부 초과(6자리 > 5자리 제한) → MessageSetDataException") + @DisplayName("BIG_VALUE 정수부 초과(5자리 > 4자리 제한) → MessageSetDataException") void testBigDecimalIntegerPartOverflow() { enableValidation(); - // 정수부 6자리(123456) → 제한(5자리) 초과 - String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":123456.12345}}"; + // 정수부 5자리(12345) → 제한(4자리) 초과 + String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":12345.12345}}"; Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1"); MessageSetDataException ex = assertThrows( @@ -261,33 +261,17 @@ class JSONMessageValidationTest { assertTrue(result.contains("BIG_VALUE"), "BIG_VALUE가 결과에 포함되어야 합니다"); } - @Test - @DisplayName("BIG_VALUE 정수부 경계값(정수부 5자리 + 소수부 5자리) → 정상 처리") - void testBigDecimalIntegerPartBoundary() throws Exception { - enableValidation(); - - // length=10, decimal=5 이고 length 에 소수점(.)은 포함되지 않으므로 - // 정수부 5자리(10-5)까지 허용된다. - String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":12345.12345}}"; - Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1"); - msg.setData(data); - - String result = (String) msg.getData(); - assertNotNull(result, "결과값이 null이 아니어야 합니다"); - assertTrue(result.contains("BIG_VALUE"), "BIG_VALUE가 결과에 포함되어야 합니다"); - } - // ───────────────────────────────────────────────────────────────── // 2-c. BigDecimal 자릿수 초과 (JSON 문자열 형태) — transformer.validation=true 필요 // ───────────────────────────────────────────────────────────────── @Test - @DisplayName("BIG_VALUE 정수부 초과 문자열 입력(6자리 > 5자리 제한) → MessageSetDataException") + @DisplayName("BIG_VALUE 정수부 초과 문자열 입력(5자리 > 4자리 제한) → MessageSetDataException") void testBigDecimalIntegerPartOverflowFromString() { enableValidation(); - // JSON 문자열 "123456.12345" → 정수부 6자리 초과 - String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":\"123456.12345\"}}"; + // JSON 문자열 "12345.12345" → 정수부 5자리 초과 + String data = "{\"EAI_UJSONTYPE_REQ1\":{\"BIG_VALUE\":\"12345.12345\"}}"; Message msg = MessageFactory.getFactory().getMessage("EAI_UJSONTYPE_REQ1"); MessageSetDataException ex = assertThrows(