diff --git a/Foundation/org.egovframe.rte.fdl.security/src/main/java/org/egovframe/rte/fdl/security/userdetails/util/CamelCaseUtil.java b/Foundation/org.egovframe.rte.fdl.security/src/main/java/org/egovframe/rte/fdl/security/userdetails/util/CamelCaseUtil.java index 02516b47..b4bef39a 100755 --- a/Foundation/org.egovframe.rte.fdl.security/src/main/java/org/egovframe/rte/fdl/security/userdetails/util/CamelCaseUtil.java +++ b/Foundation/org.egovframe.rte.fdl.security/src/main/java/org/egovframe/rte/fdl/security/userdetails/util/CamelCaseUtil.java @@ -37,6 +37,12 @@ private CamelCaseUtil() { } public static String convert2CamelCase(String underScore) { + // null 또는 빈 문자열은 변환할 대상이 없으므로 그대로 반환한다. + // (빈 문자열일 때 isSkipCase의 charAt(0)에서 StringIndexOutOfBoundsException이, + // null일 때 NullPointerException이 발생하던 문제를 방지한다.) + if (underScore == null || underScore.isEmpty()) { + return underScore; + } if (isSkipCase(underScore)) { return underScore; } diff --git a/Foundation/org.egovframe.rte.fdl.security/src/test/java/org/egovframe/rte/fdl/security/userdetails/CamelCaseUtilTest.java b/Foundation/org.egovframe.rte.fdl.security/src/test/java/org/egovframe/rte/fdl/security/userdetails/CamelCaseUtilTest.java index 07eae3c3..622077d9 100755 --- a/Foundation/org.egovframe.rte.fdl.security/src/test/java/org/egovframe/rte/fdl/security/userdetails/CamelCaseUtilTest.java +++ b/Foundation/org.egovframe.rte.fdl.security/src/test/java/org/egovframe/rte/fdl/security/userdetails/CamelCaseUtilTest.java @@ -10,6 +10,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * CamelCase 유틸리티 테스트 (JUnit 5) @@ -29,4 +30,14 @@ public void convert2CamelCase() { assertEquals("Column1Test", CamelCaseUtil.convert2CamelCase("_column_1_test_")); } + /** + * 빈 문자열은 charAt(0)에서, null은 NullPointerException이 발생하던 것을 + * 그대로 반환하도록 가드를 추가했다. + */ + @Test + public void convert2CamelCaseEmptyAndNull() { + assertEquals("", CamelCaseUtil.convert2CamelCase("")); + assertNull(CamelCaseUtil.convert2CamelCase(null)); + } + } diff --git a/Persistence/org.egovframe.rte.psl.dataaccess/src/main/java/org/egovframe/rte/psl/dataaccess/util/CamelUtil.java b/Persistence/org.egovframe.rte.psl.dataaccess/src/main/java/org/egovframe/rte/psl/dataaccess/util/CamelUtil.java index 20a5b6f6..33c10acf 100755 --- a/Persistence/org.egovframe.rte.psl.dataaccess/src/main/java/org/egovframe/rte/psl/dataaccess/util/CamelUtil.java +++ b/Persistence/org.egovframe.rte.psl.dataaccess/src/main/java/org/egovframe/rte/psl/dataaccess/util/CamelUtil.java @@ -44,6 +44,12 @@ private CamelUtil() { * @return Camel 표기법 변수명 */ public static String convert2CamelCase(String underScore) { + // null 또는 빈 문자열은 변환할 대상이 없으므로 그대로 반환한다. + // (빈 문자열일 때 charAt(0)에서 StringIndexOutOfBoundsException이, + // null일 때 indexOf 호출에서 NullPointerException이 발생하던 문제를 방지한다.) + if (underScore == null || underScore.isEmpty()) { + return underScore; + } // '_' 가 나타나지 않으면 이미 camel case 로 가정함. // 단 첫째문자가 대문자이면 camel case 변환 (전체를 소문자로) 처리가 // 필요하다고 가정함. --> 아래 로직을 수행하면 바뀜 diff --git a/Persistence/org.egovframe.rte.psl.dataaccess/src/test/java/org/egovframe/rte/psl/dataaccess/utils/CamelUtilTest.java b/Persistence/org.egovframe.rte.psl.dataaccess/src/test/java/org/egovframe/rte/psl/dataaccess/utils/CamelUtilTest.java index e31f5ebc..42c6d123 100755 --- a/Persistence/org.egovframe.rte.psl.dataaccess/src/test/java/org/egovframe/rte/psl/dataaccess/utils/CamelUtilTest.java +++ b/Persistence/org.egovframe.rte.psl.dataaccess/src/test/java/org/egovframe/rte/psl/dataaccess/utils/CamelUtilTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; public class CamelUtilTest { @@ -18,4 +19,14 @@ public void testConvert2CamelCase() { assertEquals("uppercase", CamelUtil.convert2CamelCase(upperCaseString)); } + /** + * 빈 문자열은 charAt(0)에서, null은 indexOf 호출에서 예외가 발생하던 것을 + * 그대로 반환하도록 가드를 추가했다. + */ + @Test + public void testConvert2CamelCaseEmptyAndNull() { + assertEquals("", CamelUtil.convert2CamelCase("")); + assertNull(CamelUtil.convert2CamelCase(null)); + } + }