A causa mais comum de “Java.lang.NullPointerException” ao lidar com XMLs?
Pergunta
Meu liderança mais forte é que o código que lida com os XMLs de entrada está realmente recebendo um arquivo inválido / incompleta, portanto, não a análise DOM. Alguma sugestão?
Solução
arquivo incompleto é definitivamente o lugar para começar a procurar. Eu imprimir o arquivo logo antes do ponto em que analisá-lo para ver o que está sendo enviado para o analisador. Se é incompleta será óbvio. Se for inválido, você terá um pouco de pesquisa para fazer.
Outras dicas
Meu primeiro palpite seria que o código-usando DOM está tratando elementos que são marcados como opcional na DTD como obrigatório.
Editado para adicionar: O que quero dizer é que se você validar contra um DTD, você não pode esperar algo como o seguinte (exemplo usando dom4j) para retornar nada, mas null.
doc.selectSingleNode("//some/element/in/a/structure");
O mesmo é certamente verdade se você estiver elemento de encordoamento de navegação convoca, ou geralmente não verificar valores de retorno antes de usá-los.
Você deve ter um apontador rastreamento de pilha para onde você NPE é lançada. Isso deve diminuir o número de variáveis ??que podem ser nulos. Ao invés de obter o depurador ou fora printf, sugiro a adição de controlos adequados e lançar uma exceção em que, logo que o erro pode ser detectado. É um bom hábito de entrar para evitar problemas misteriosos mais tarde.
Idealmente, você deve estar executando o aplicativo java dentro de um depurador, assim quando uma exceção não capturada é jogado você pode examinar a pilha de chamadas, variáveis, etc e ver exatamente qual linha causou o acidente e, talvez, que os dados é nulo que se acostumou.
Se você não pode usar um depurador por qualquer motivo, em seguida, compilar o aplicativo com suporte a depuração, e adicionar um manipulador de exceção para este erro particular, e imprimir o rastreamento de pilha. Novamente, isso vai mostrar exatamente o que linha em que arquivo causou o acidente.