Cause la plus courante de & # 8220; java.lang.NullPointerException # 8221; lorsqu'il s'agit de XML?

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

  •  01-07-2019
  •  | 
  •  

Question

Mon argument principal est que le code qui traite les fichiers XML entrants reçoit en réalité un fichier non valide / incomplet, d'où l'échec de l'analyse DOM. Des suggestions?

Était-ce utile?

La solution

Le fichier incomplet est certainement le meilleur endroit pour commencer à chercher. J'imprimais le fichier juste avant le point où vous l'avez analysé pour voir ce qui était envoyé à l'analyseur. Si c'est incomplet, ce sera évident. Si ce n'est pas valide, vous aurez un peu de recherche à faire.

Autres conseils

Ma première hypothèse serait que le code utilisant DOM utilise les éléments marqués comme optionnels dans la DTD comme étant obligatoires.

Édité pour ajouter: Ce que je veux dire, c’est que, sauf si vous validez par une DTD, vous ne pouvez pas vous attendre à ce que ce qui suit (exemple avec dom4j) renvoie autre chose que null.

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

Il en va de même si vous enchaînez les appels de navigation entre éléments ou si vous ne vérifiez généralement pas les valeurs renvoyées avant de les utiliser.

Vous devriez avoir une trace de pile pointant vers l'endroit où votre NPE est lancé. Cela devrait limiter le nombre de variables pouvant être nulles. Plutôt que d’obtenir le débogueur ou printf, je suggère d’ajouter des vérifications appropriées et de lever une exception lorsque l’erreur peut être détectée. C'est une bonne habitude à prendre pour éviter des problèmes mystérieux plus tard.

Idéalement, vous devriez exécuter votre application java dans un débogueur. Ainsi, lorsqu'une exception non interceptée est levée, vous pouvez examiner le nombre d'appels, les variables, etc. et voir exactement quelle ligne a provoqué le blocage et éventuellement les données nulles utilisées.

Si vous ne pouvez pas utiliser un débogueur pour quelque raison que ce soit, compilez votre application avec la prise en charge du débogage, ajoutez un gestionnaire d'exceptions pour cette erreur particulière et imprimez la trace de la pile. Encore une fois, cela montrera exactement quelle ligne dans quel fichier a causé le crash.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top