2012-03-08 2 views
2

오늘 문제가 생겼습니다.클래스를로드 한 확장 클래스의 클래스 캐스트 예외

abc.ClassA a = (abc.ClassA) request.getsession().getAttribute(); 

여기에서 클래스 캐스트 예외가 발생합니다.

abc.ClassA은 프로젝트 빌드 경로의 jar 파일에서 참조됩니다.

다른 클래스 로더로로드되는 클래스에 대해 읽었을 때 그 문제가있을 수 있습니다.

+0

전체 스택 추적을 표시하십시오. – skaffman

+0

http://stackoverflow.com/questions/826319/classcastexception-when-casting-to-the-same-class – Jayan

+0

java.lang.ClassCastException : vss.YearMakeModel을 vss.YearMakeModel로 캐스팅 할 수 없습니다. \t at com.gm. nvls.controller.WidgetController.getMake (WidgetController.java:271) \t com.gm.nvls.controller.WidgetController.doPost (WidgetController.java:83) \t at com.gm.nvls.controller.WidgetController.doGet WidgetController.java:423) javax.servlet.http.HttpServlet.service에서 \t (HttpServlet.java:707) javax.servlet.http.HttpServlet.service에서 \t (HttpServlet.java:820) \t에서 weblogic.servlet .internal.StubSecurityHel $ ServletServiceAction.run 당 (StubSecurityHelper.java:227) –

답변

1

클래스가 두 개의 다른 클래스 로더에 의해로드되었습니다.
나는 당신의 항아리가 클래스 로더 계층 구조에 두 번 위치한 같아요 (? 전쟁)를 한 번 어딘가에 부모 경로 (? 웹 로직의 LIB)와 한 번 아이에

이 가장 좋은 해결책은 클래스 경로에 한 번만 항아리를두고있다 .

불가능할 경우 클래스 로더의 클라이언트 우선/클라이언트 마지막 동작을 변경하려고 할 수 있습니다.

팁 : 문제를 해결하고 문제가되는 클래스 로더를 쉽게 얻을 수 있습니다. 디버거에서 문제가되는 줄에서 멈추고 request.getsession().getAttribute().getClass().getClassloader()abc.ClassA.class.getClassloader()

관련 문제