다음 코드를 실행하여 tomcat 컨텍스트 파일을 사용하여 javax.mail.Session 객체를 얻으려고하면이 오류가 발생합니다. .java.lang.ClassCastException : javax.mail.Session을 javax.mail.Session으로 캐스팅 할 수 없음
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (javax.mail.Session) envCtx.lookup("mail/session");
이것은 context.xml의 리소스 선언입니다.
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"
mail.smtp.host="host"
mail.smtp.user="user"
mail.smtp.password="password"
mail.smtp.auth="false"/>
나는이 때문에 내 응용 프로그램 서버 라이브러리 (바람둥이) 폴더에 내 응용 프로그램 라이브러리 폴더에 javax.mail.Session에 대해 동일한 라이브러리를 필요로 할 수 있습니다 이해, 나는 많은 중복 된 라이브러리 파일을 제거했다 내 응용 프로그램 라이브러리 폴더 (예 : mail.jar)에서 볼 수있는 javax.mail.Session은 라이브러리의 일부로, 지금 나는 여전히이 오류가 발생하고 다른 라이브러리가 무엇인지 모르는 시점에 있습니다 이 문제의 원인인가, 아니면 내가 모르는 다른 문제인가?
이 문제의 근원을 찾기 위해 내가 제안하는 것은 무엇입니까?
감사합니다. 톰캣의 lib 디렉토리와 응용 프로그램 모두 (WEB-INF/lib에) mail.jar
자신의 복사본을 가지고, 그래서 클래스 로더는 당신이에서 mail.jar
을 삭제 두 개의 서로 다른 Session.If를로드 할 수 있기 때문에
tomcat을 다시 시작하십시오. 예외가 여전히 발생하면 javax.mail.Session이 아직 남아있는 장소를 놓친 것입니다. – Henry
문제점에 대한 정확한 해결책을 모르지만 한 가지 더 많은 이유가 있습니다. javax.mail.Session은 2 개의 다른 클래스 로더에 의해로드됩니다 – serejja
Maven을 사용하고 있습니까? –