반응형

예외 상황1

 

원인


심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer] with root cause

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

 

클래스 형 변환(캐스팅) 연산을 잘못 했을 때 발생한 예외

 

HashMap 있는 숫자값으로 이루어진 Object(Wrapper) 정수형 DTO 언박싱 하려다가 예외문이다.

 

Object 객체를 int 바로 넣을려고 했다가 나온 예외다.

 

 

해결 시도


Integer.parseInt(Object)

parseInt() 사용하면 당연하게 알았지만..

 

심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer] with root cause

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

 

 

 

해결


((Long) userService.getAttendanceList(currentUser)).intValue();

 

해결 코드 문법

HashMap<String, Object> result = new HashMap<>();
Dto_graph dto = new Dto_graph();

result = menuservice.serviceCount();
dto.setnServiceCount( ((Long) result.get("cnt1")).intValue() );
dto.setnFreeVMCount( ((Long) result.get("cnt2")).intValue()) ;
dto.setnVMCount( ((Long) result.get("cnt3")).intValue() );

 

예외 상황 정리

1.캐스팅 관련 예외 (잘못된 형변환)

 

 

예외 상황2

 

원인


참조한 라이브러리 안의 클래스가 중복되어 정확한 경로를 찾지 못하여 발생하는 것이다.

 

Java로 만든 프로그램 배포를 위해 톰캣(WAS)로 패키징을 하는 경우가 많다.

 

이 때 이클립스에서 잘 작동하던 프로그램이 패키징을 하고 나면 다음과 같은 에러가 발생할 때가 있다.

java.lang.ClassCastException : A cannot be cast to B

 

해결


톰캣은 최상위 lib 디렉터리에 톰캣 관련 라이브러리를 넣고 WEB-INF 밑의 lib 디렉터리에 자바 라이브러리를 넣는다.

 

에러의 원인은 참조한 라이브러리 안의 클래스가 중복되어 정확한 경로를 찾지 못하여 발생하는 것이다.

 

따라서 두개의 lib 디렉터리 중 한군데에만 적용을 시켜주면 해결이 된다.

 

 

예외 상황2 정리

1.참조하는 라이브러리 경로 문제.

2.멀쩡하던게 다른데로 옮겼다고 예외가 뜨면 경로 문제가 대부분이다.

반응형

'java' 카테고리의 다른 글

[Java] 오버로딩(Overloading)과 오버라이딩(Overriding)  (0) 2019.10.30
[Java] parseInt()와 intValue()  (0) 2019.10.29
[Java] 상속  (0) 2019.10.27
[Java] 추상 클래스  (0) 2019.10.26
[Java] 예약어 정리  (2) 2019.10.23

+ Recent posts