Наиболее распространенная причина появления “java.lang.NullPointerException” при работе с XML-файлами?

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-приложение внутри отладчика, таким образом, при возникновении неперехваченного исключения вы можете изучить callstack, переменные и т.д. И точно увидеть, какая строка вызвала сбой, и, возможно, какие данные являются null, которые были использованы.

Если вы по какой-либо причине не можете использовать отладчик, скомпилируйте свое приложение с поддержкой отладки, добавьте обработчик исключений для этой конкретной ошибки и распечатайте трассировку стека.Опять же, это точно покажет, какая строка в каком файле вызвала сбой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top