비표준(N) 경로도 표준(K) 경로와 같은 입력에서 실패한다.
JSONMessage 는 ALLOW_UNESCAPED_CONTROL_CHARS 만 켜고 있어 제어문자는
통과했지만, 선행 0 은 별개 옵션이라 함께 거부됐다.
transformer 는 의존 방향(common -> transformer)상 JacksonUtil 을 참조할 수
없어 common 의 newNumberSafeMapper() 와 같은 설정을 직접 켠다.
주의: 이 옵션은 00001 을 숫자 1 로 만든다(선행 0 미보존).
Jackson 2.12.7 실측: 생성자와 동일한 4개 설정 조합에서 선행 0 파싱,
제어문자 옵션 유지, 두 옵션 동시 동작, 숫자 정밀도 왕복 모두 확인.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Phh6MSGvgHM3rPgGUU3dzR
전체 스위트 실행 시 115개 중 28개가 실패하던 문제 처리.
1. 클래스별 JVM 격리 (25건)
TransformEngine/LayoutManager/MessageFactory 는 ApplicationContextProvider
기반의 JVM 전역 싱글턴이라, 한 JVM 에서 여러 테스트 클래스를 돌리면 마지막에
뜬 스프링 컨텍스트가 앞선 컨텍스트를 덮어쓴다. 그 결과 뒤 클래스가 앞 클래스의
레이아웃을 보게 되어 "cannot create message" 로 실패했다.
(각 클래스는 단독 실행 시에는 모두 통과)
→ build.gradle test 태스크에 forkEvery = 1 추가.
느려지는 부분은 maxParallelForks 로 상쇄 (7분 → 4분 28초).
2. GetTrinomialFunctionTest 기대값 정정 (2건)
JEP addStandardConstants() 에는 true/false 가 없고 Parser 가 이를 Boolean 으로
등록한다(Parser.addBooleanConstants). 테스트 setUp 도 Boolean 을 바인딩해 놓고
결과를 Number 로 단언하고 있어 자기모순이었음 → Boolean 기대로 정정.
3. LayoutRepositoryTest 시드 ID 수정 (1건)
시드 SQL 어디에도 없는 TST_TTST00000002_RES 를 조회하고 있었음
→ init_tseaitr07/08 에 존재하는 TST_TOSSTEST1_TGT 로 변경.
운영 코드 변경 없음 (build.gradle 테스트 설정 + 테스트 코드만).
XmlMapper 사용처는 0건이지만 transformer 의 유일한 jackson 공급원이라 제거가 아닌
치환이 필요하다. compileOnly 라 컴파일은 2.13.1 / 런타임은 2.12.7 인 skew 가 있었고,
이 때문에 2.13 전용 API 가 컴파일만 통과했다
(JacksonUtil.setValue 의 ArrayNode.set(int, String) -> 런타임 NoSuchMethodError).
- SystemKeys: TRANSFROMER_SCIENTIFIC_NORMALIZE 키 및
isScientificNormalizeEnabled() 추가
- JSONMessage.isValid(): flag ON 시 toPlainString()으로 정규화 후 검증
- false positive 방지: 1.23e5(=123000)가 자릿수 제한을 우회하는 문제 차단
- false negative 방지: pointLength=0 필드에서 유효한 지수형 값이 거부되는 문제 해결
- JSONMessageValidationTest: 지수형 시나리오 4개 추가 (정규화 ON/OFF 각 케이스)
- ConcatN: numberOfParameters=-1로 파라미터 수 제한 없이 문자열 연결
- 기존 Concat(2개 고정)을 대체 가능하며 하위 호환성 유지
- ConcatNFunctionTest: JEP 직접 사용, 파라미터 수 변화 검증
- ConcatNParserTest: Parser 클래스 경유, 변수/상수 혼합 표현식 및 성능 검증
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- JSONMessage BigDecimal 자릿수 검사를 setData() 시점으로 통일
- SystemKeys.isValidationEnabled() 하드코딩 버그 수정
- JSONMessageValidationTest 7개 테스트 추가
- JSON_VALIDATION_TEST_PLAN.md 작업 내역 문서화
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- doSetValue()의 TYPE_BIGDECIMAL case에 isValid() 검사 추가
- 자릿수 초과 오류 발생 시점이 getData()에서 setData()로 통일
- 테스트: 자릿수 초과 3건 기대 예외를 InvalidDataTypeException → MessageSetDataException으로 변경
- JSON_VALIDATION_TEST_PLAN.md 내용 최신화
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
[*]있는지 체크하고 예외 발생, Grid to Group 맵핑 해야할 경우가 생겨, 예외 주석처리.
2.Grid to Group 맵핑 Grid기준 첫번째 항목만 맵핑되도록 원래는 Grid가 count수만큼 반복부 돌며, 덮어씌기가
되어 마지막 항목의 값이 맵핑됨.
값맵핑할 타겟 아이템이 이미 값이 설정되어있으면 앞에서 맵핑처리가 이미되었단 뜻이니, return 하도록 처리.