티스토리 뷰
톰캣 9 환경에서 Apache POI의 workbook.close() 호출 시 java.lang.ClassCastException이 발생하는 것은 주로 라이브러리 버전 불일치(Conflict) 또는 클래스 로딩 순서 문제로 인해, 같은 클래스임에도 다른 로더에 의해 로드되어 발생하는 문제입니다.
주요 원인과 해결 방안은 다음과 같습니다.
1. 주요 원인
- 라이브러리 중복 (가장 흔한 원인): WEB-INF/lib 폴더에 있는 POI 관련 JAR 파일(poi-ooxml, poi, xmlbeans 등)이 톰캣 서버의 lib 디렉토리나 다른 곳에 중복으로 존재하여 버전 충돌이 발생합니다.
- 버전 불일치: poi-ooxml 버전과 poi 버전이 다르거나, xmlbeans 버전이 맞지 않는 경우입니다.
- 톰캣 클래스 로더 충돌: 톰캣은 톰캣 자체 라이브러리(Common)와 웹 애플리케이션 라이브러리(WEB-INF/lib)를 분리하여 로드하는데, 이 과정에서 동일한 클래스가 다른 버전을 가질 때 발생합니다.
2. 해결 방안
(1) 라이브러리 버전 통일 및 중복 제거
- 프로젝트의 pom.xml (Maven) 또는 build.gradle (Gradle)에서 모든 POI 관련 라이브러리(poi, poi-ooxml, poi-ooxml-schemas, xmlbeans)의 버전을 동일한 버전으로 통일합니다.
- WEB-INF/lib 내부에 혹시 다른 버전의 POI JAR 파일이 중복으로 들어가 있지 않은지 확인하고 제거합니다.
(2) 톰캣 lib 디렉토리 확인
- TOMCAT_HOME/lib 디렉토리에 POI 관련 JAR 파일이 있다면 제거합니다.
- 반드시 프로젝트의 WEB-INF/lib 안에 있는 라이브러리를 사용하도록 합니다.
(3) 소스 코드 확인: Workbook 생성 방식 변경
- InputStream을 통해 Workbook을 생성했다면, close() 시점에 InputStream이 이미 닫혀 있어 에러가 날 수 있습니다.
- File 객체를 직접 사용하여 Workbook을 생성하는 방식이 더 안정적입니다.
java
// 권장 방식 Workbook wb = WorkbookFactory.create(new File("path/to/file.xlsx")); // ... 작업 ... wb.close();
(4) 최신 버전으로 업데이트
- 사용 중인 Apache POI 버전이 너무 낮다면 최신 버전(예: 4.x 또는 5.x)으로 업데이트하여 버그를 해결합니다.
요약
대부분의 경우 WEB-INF/lib 폴더 내에 다른 버전의 Apache POI JAR 파일이 혼재되어 있는 것이 원인입니다. 관련 JAR 파일들을 삭제하고 동일한 버전을 다시 넣어주면 해결됩니다.
'자바(Java)' 카테고리의 다른 글
| javax.mail.MessagingException: Unkown SMTP host: nested exception is: java.net.UnkownHostException (0) | 2025.10.23 |
|---|---|
| svn 세팅, 사용자 추가 방법 (0) | 2025.09.17 |
| svn dump format': No such file or directory (0) | 2025.09.17 |
| 자바 playwright 브라우저가 닫히는 경우 (0) | 2025.09.04 |
| 자바 이클립스 playwright offline 에서 설치하는 방법 feat. maven (0) | 2025.07.29 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 스크래핑
- XE
- 파이썬
- 파싱
- 프로씨
- php
- JDBC
- 플러터
- 이클립스
- C언어
- Python
- XE3
- 인포믹스
- 포인터
- 문자열
- 라이믹스
- ocjap
- 오라클
- 자바 smtp
- 자바
- KG
- xe애드온
- esql
- C
- EC
- proc
- MySQL
- ocajp
- xe addon
- webix
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함

