XML을 처리할 때 "java.lang.NullPointerException"이 발생하는 가장 일반적인 원인은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/85370

  •  01-07-2019
  •  | 
  •  

문제

나의 가장 강력한 단서는 들어오는 XML을 처리하는 코드가 실제로 유효하지 않거나 불완전한 파일을 수신하여 DOM 구문 분석에 실패한다는 것입니다.어떤 제안이 있으십니까?

도움이 되었습니까?

해결책

불완전한 파일은 확실히 살펴보기 시작하는 곳입니다.파서에 무엇이 전송되는지 확인하기 위해 파싱하는 지점 직전에 파일을 인쇄하겠습니다.불완전하다면 분명할 것입니다.유효하지 않은 경우 약간의 검색이 필요합니다.

다른 팁

내 첫 번째 추측은 DOM을 사용하는 코드가 DTD에서 선택 사항으로 표시된 요소를 필수 요소로 처리하고 있다는 것입니다.

다음을 추가하도록 편집되었습니다.내 말은 DTD에 대해 유효성을 검사하지 않는 한 다음과 같은 것(dom4j를 사용하는 예)이 null 이외의 항목을 반환할 것이라고 기대할 수 없다는 것입니다.

doc.selectSingleNode("//some/element/in/a/structure");

요소 탐색 호출을 함께 문자열로 묶거나 일반적으로 사용하기 전에 반환 값을 확인하지 않는 경우에도 마찬가지입니다.

NPE가 발생한 위치를 가리키는 스택 추적이 있어야 합니다.그러면 null이 될 수 있는 변수의 수가 줄어들 것입니다.디버거나 printf를 가져오는 대신 적절한 검사를 추가하고 오류가 감지되는 즉시 예외를 발생시키는 것이 좋습니다.나중에 알 수 없는 문제를 피하기 위해 들어가는 것이 좋은 습관입니다.

이상적으로는 디버거 내에서 Java 애플리케이션을 실행해야 합니다. 따라서 포착되지 않은 예외가 발생하면 호출 스택, 변수 등을 검사하고 충돌을 일으킨 줄과 사용된 null 데이터를 정확히 확인할 수 있습니다.

어떤 이유로든 디버거를 사용할 수 없는 경우 디버깅 지원을 사용하여 애플리케이션을 컴파일하고 이 특정 오류에 대한 예외 처리기를 추가하고 스택 추적을 인쇄합니다.다시 말하지만, 이는 충돌을 일으킨 파일의 정확히 어떤 줄을 보여줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top