[JAVA] e.printStackTrace() 결과 아무 내용도 없는 경우 (stacktrace length 0, stacktrace is null)
지난주 금요일 모 사이트 운영에서 NullPointerException 오류가 나서 jsp 단에서 stackTrace를 찍어봤더니 아무것도 찍히지가 않았다.
다시 jsp 를 수정해서 length 를 찍어봤는데 (e.getStackTrace().length) 값이 0 으로 나왔다.
stackTrace 의 길이가 0 이라니… 구글에 아무리 검색해도 그런 현상은 나오지 않았다.
(stacktrace length is zero, stacktrace length 0 등)
로컬에서는 재현이 되지 않아서 운영 클래스를 몽땅 긁어가져와서 로컬환경에 붙여넣기했다.
그리고 나서 이클립스에서 디버그를 탔더니 아래처럼 나왔다.
NullPointerException 인데 stackTrace 는 null !
아니 stackTrace 가 null?
운영에서는 length 를 찍었을 때 0이라고 찍혔는데… (null 인 객체의 length를 찍을 경우 또 다시 NullPointerException이 발생해야 정상이다)
stackTrace가 null 이든 length 0 이든 이해가지 않는 상황인건 분명했다.
(참고로 저 cause 는 찍어봤자 맹탕이다. 똑같이 stackTrace 는 null 이다)
문제가 된 부분은 아래 코드 (그림의 1449라인).
whereValue 벡터의 첫번째 요소가 null 이다.
다시 말해 아래 1499 라인 코드는
null.getClass().getName(); 이 된 것이다.
이 경우 NullPointerException 이 발생하는 건 이해하지만 stackTrace는 존재해야 정상이다.
아무래도 일종의 자바 버그로 보인다.
제네릭이 존재하지 않는 Vector의 요소가 null 인 경우, 그 요소의 클래스를 가져오려고 시도하면(getClass()) stackTrace가 없는 NullPointerException 이 발생하는 것 같다.
개발하다보니 별 이상한 오류를 다 본다…
stackTrace가 비어있는 Exception 이 발생했다고 얘기하면 (또 그 상황을 계속 재현할 수 있다고 하면) 아무도 안 믿을듯…