[JAVA] e.printStackTrace() 결과 아무 내용도 없는 경우 (stacktrace length 0, stacktrace is null)

[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 이 발생했다고 얘기하면 (또 그 상황을 계속 재현할 수 있다고 하면) 아무도 안 믿을듯…