¿La causa más común de “java.lang.NullPointerException” cuando se trata de archivos XML?

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

  •  01-07-2019
  •  | 
  •  

Pregunta

Mi ventaja más sólida es que el código que se ocupa de los XML entrantes en realidad recibe un archivo no válido/incompleto, por lo que falla el análisis DOM.¿Alguna sugerencia?

¿Fue útil?

Solución

El archivo incompleto es definitivamente el lugar para empezar a buscar.Imprimiría el archivo justo antes del momento en que lo analiza para ver qué se envía al analizador.Si está incompleto será obvio.Si no es válido, tendrás que buscar un poco.

Otros consejos

Mi primera suposición sería que el código que usa DOM trata los elementos que están marcados como opcionales en la DTD como obligatorios.

Editado para agregar:Lo que quiero decir es que a menos que valide con una DTD, no puede esperar que algo como lo siguiente (ejemplo usando dom4j) devuelva nada más que nulo.

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

Por supuesto, lo mismo ocurre si encadenas llamadas de navegación de elementos o, en general, no verificas los valores de retorno antes de usarlos.

Debería tener un seguimiento de la pila que apunte hacia donde se lanza su NPE.Eso debería reducir la cantidad de variables que pueden ser nulas.En lugar de eliminar el depurador o printf, sugiero agregar comprobaciones apropiadas y generar una excepción tan pronto como se pueda detectar el error.Es un buen hábito para evitar problemas misteriosos más adelante.

Idealmente, debería ejecutar su aplicación Java dentro de un depurador, de esta manera, cuando se genera una excepción no detectada, puede examinar la pila de llamadas, las variables, etc. y ver exactamente qué línea causó el bloqueo y tal vez qué datos nulos se utilizaron.

Si no puede usar un depurador por cualquier motivo, entonces compile su aplicación con soporte de depuración, agregue un controlador de excepciones para este error en particular e imprima el seguimiento de la pila.Nuevamente, esto mostrará exactamente qué línea en qué archivo causó el bloqueo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top