La causa più comune di "java.lang.NullPointerException" quando si ha a che fare con XML?

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

  •  01-07-2019
  •  | 
  •  

Domanda

Il mio indizio più forte è che il codice che si occupa degli XML in entrata sta effettivamente ricevendo un file non valido/incompleto, quindi fallendo l'analisi del DOM.Eventuali suggerimenti?

È stato utile?

Soluzione

Il file incompleto è sicuramente il punto in cui iniziare a cercare.Stamperei il file subito prima del punto in cui lo analizzi per vedere cosa viene inviato al parser.Se è incompleto sarà ovvio.Se non è valido, dovrai fare una piccola ricerca.

Altri suggerimenti

La mia prima ipotesi sarebbe che il codice che utilizza il DOM tratti gli elementi contrassegnati come opzionali nella DTD come obbligatori.

Modificato per aggiungere:Ciò che intendo è che, a meno che non si convalidi rispetto a un DTD, non puoi aspettarti che qualcosa di simile (esempio utilizzando dom4j) restituisca altro che null.

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

Lo stesso vale ovviamente se si mettono insieme le chiamate di navigazione degli elementi o in generale non si controllano i valori restituiti prima di utilizzarli.

Dovresti avere un'analisi dello stack che punta al punto in cui viene lanciato il tuo NPE.Ciò dovrebbe ridurre il numero di variabili che possono essere nulle.Piuttosto che estrarre il debugger o printf, suggerisco di aggiungere controlli appropriati e lanciare un'eccezione non appena l'errore può essere rilevato.È una buona abitudine acquisire per evitare problemi misteriosi in seguito.

Idealmente dovresti eseguire la tua applicazione Java all'interno di un debugger, quindi quando viene generata un'eccezione non rilevata puoi esaminare lo stack di chiamate, le variabili, ecc. e vedere esattamente quale riga ha causato l'arresto anomalo e forse quali dati sono nulli che sono stati utilizzati.

Se non puoi utilizzare un debugger per qualsiasi motivo, compila la tua applicazione con il supporto per il debug e aggiungi un gestore di eccezioni per questo particolare errore e stampa l'analisi dello stack.Ancora una volta, questo mostrerà esattamente quale riga in quale file ha causato l'arresto anomalo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top