Наиболее распространенная причина возникновения «java.lang.NullPointerException» при работе с XML? - PullRequest
0 голосов
/ 17 сентября 2008

Мое сильное преимущество заключается в том, что код, который имеет дело с входящими XML-файлами, на самом деле получает недопустимый / неполный файл, следовательно, не выполняет синтаксический анализ DOM. Есть предложения?

Ответы [ 4 ]

2 голосов
/ 17 сентября 2008

Моим первым предположением будет то, что код, использующий DOM, рассматривает элементы, которые помечены как необязательные в DTD, как обязательные.

Отредактировано, чтобы добавить: Я имею в виду, что если вы не проверяете по DTD, вы не можете ожидать, что что-то вроде следующего (пример с использованием dom4j) вернет что-либо, кроме null.

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

То же самое, конечно, верно, если вы объединяете вызовы навигации по элементам вместе или обычно не проверяете возвращаемые значения перед их использованием.

2 голосов
/ 17 сентября 2008

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

1 голос
/ 17 сентября 2008

В идеале вы должны запускать ваше java-приложение внутри отладчика, поэтому, когда выдается необработанное исключение, вы можете изучить колл-стак, переменные и т. Д. И точно узнать, какая строка вызвала сбой, и, возможно, какие данные являются нулевыми, что использовалось.

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

1 голос
/ 17 сентября 2008

У вас должна быть трассировка стека, указывающая, куда вы бросаете NPE. Это должно сузить число переменных, которые могут быть нулевыми. Вместо того, чтобы выводить отладчик или printf, я предлагаю добавить соответствующие проверки и вызвать исключение, при котором ошибка может быть обнаружена. Это хорошая привычка, чтобы избежать загадочных проблем позже.

...