에러 메시지
StackTrace: java.lang.reflect.InvocationTargetException
Caused by: java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverterOGS.getInstance(I)Loracle/sql/converter/CharacterConverters;
at oracle.sql.converter.CharacterConverterFactoryOGS.make(CharacterConverterFactoryOGS.java:48)
at oracle.sql.CharacterSetWithConverter.getInstance(CharacterSetWithConverter.java:92)
at oracle.sql.CharacterSetFactoryThin.make(CharacterSetFactoryThin.java:123)
at oracle.sql.CharacterSet.make(CharacterSet.java:440)
at oracle.jdbc.driver.DBConversion.<init>(DBConversion.java:145)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:890)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:268)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:439)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
...
영업관리 프로그램을 실행하여 로그인을 하던 도중 위와 같은 에러를 만났다.
라이브러리 설정이 잘못되어 있었기 때문에 발생한 에러였다.
NoSuchMethodError는 특정 메서드가 존재하지 않음을 나타내며,
내 경우에서는 Oracle JDBC 드라이버와 관련된 문제일 확률이 높다.
특히 CharacterConverterOGS.getInstance(I) 메서드가 존재하지 않는다는 것을 나타낸다.
JDBC 드라이버를 확인해야 하는데,
나는 최신 드라이버를 불러오지 않고, 이전 드라이버를 불러와서 해당 에러가 생겼었다.
이 문제를 해결하기 위해서는 다음을 확인해봐야한다.
1) JDBC 드라이버 확인
- ojdbcXX.jar 파일을 확인하되, 가장 최신의 드라이버가 포함되어 있는가?
- 중복되거나 다른 버전의 드라이버가 포함되어 있지는 않은가?
2) classpath 확인
- ERP 프로젝트 및 MiddleWare 프로젝트의 Java Build Path에서 올바른 ojdbcXX.jar 파일이 추가되어 있는가?
3) Elipse에서 프로젝트 클린 및 빌드
- Elipse에서 프로젝트 clean 후 재빌드하기
4) Java 버전 확인
- JDK나 JRE 버전이 두개의 프로젝트 모두 일치하는지
1. 원인
결론적으로 말하자면 나의 경우, 구형 ojdbc 드라이버를 포함시킨게 잘못이었다.
해당 드라이버는 미들웨어 프로젝트에 포함되어야 하는 구조였는데,
미들웨어 프로젝트 내 라이브러리 파일에는 아래의 드라이버들이 포함되어 있다.
- ojdbc14.jar : Java 1.4에 맞춰 설계된 드라이버로 가장 구형이다.
- ojdbc6.jar : Java 6에 맞춰 설계된 드라이버
- ojdbc8.jar : Java 8에 맞춰 설계된 드라이버로 가장 최신형이다.
해당 프로젝트는 Java 8을 사용하고 있으며,
Java Compiler와 Java Build Path의 Libraries에서는 모두 JRE 1.8을 사용하고 있다.
따라서 자바 8에 적절한 최신형 드라이버 ojdbc8.jar만 추가하여 실행시키면 된다.
2. 결론
1) ojdbc14.jar, ojdbc6.jar 모두 제거하고 ojdbc8.jar 드라이버만 추가시킨다.
2) 프로젝트 클린
3) 프로젝트 실행
▶ Eclipse 프로젝트 클린
1) Project > Clean 클릭
2) 클린할 프로젝트 체크 후 Clean