Wie debugge ich ein XML-Objekt, das beim Schreiben in eine Zeichenfolge einen Transformationsfehler verursacht?

8

Ich habe ein XML-Objekt und wenn ich es transformiere mit

%Vor%

Ich erhalte einen Fehler bei einem meiner Objekte. Wenn ich einen Haltepunkt verwende und das XML-Objekt durchschaue, kann ich nicht sagen, warum, obwohl die TransformerException sagt, dass die enthaltene Ausnahme eine Nullzeiger-Ausnahme ist. Es funktioniert auf anderen verwandten Objekten, die ich in demselben Programm habe, aber ich habe keine Ahnung, wie man das debuggt.

[[EDIT]] Hier ist der Stack-Trace:

%Vor%     
vextorspace 05.02.2012, 15:23
quelle

3 Antworten

15

Ich vermute, dass der Fehler bei einem Ihrer Objekte liegt, entweder weil das Objekt kein gültiger XML-Code ist oder weil der XML-Code einen leeren (Null-) Textknoten und keinen leeren String-Wert enthält.

siehe java.lang.NullPointerException

at com.sun.org.apache.xml.internal.serializer. ToUnknownStream.characters(ToUnknownStream.java:338)

Gestützt auf den Link in @Sajan Chandrans Kommentar:

Ссылка

Wenn Sie sich das ansehen, sehen Sie den Code.

%Vor%

Das Problem mit char.length() ist Null wegen eines Null-Text-Knotens.

Um dies zu beheben, stellen Sie einfach sicher, dass alle XML-Knoten einen String-Wert und keinen Nullwert haben.

Wenn dies nicht funktioniert, können Sie ein Beispiel für das XML-Objekt bereitstellen, durch das die Ausnahme ausgelöst wird. Außerdem können Sie überprüfen, ob das Objekt gültiges XML ist und ob Zeichenentitäten usw. richtig codiert sind.

    
Fraser 14.02.2012, 20:27
quelle
4

Grundsätzlich stimmen Sie mit den anderen Antworten überein, außer:

Das Problem wäre, dass Sie in Ihrer Datenstruktur doc oder e einen Textknoten mit dem Zeicheninhalt null ( nicht leer) haben.

Während Kirans Post (verlinkt von Sajan) hilfreich ist, bin ich mir ziemlich sicher, dass er sich irrte, weil "die chars.length () Null war, weil eine Null-Textknoten-Einfügung versucht wurde." Die chars.length() war nicht Null; Der Aufruf von chars.length() hat eine NPE ausgelöst, weil chars null war.

Um das Problem zu finden, fügen Sie hier einen Methodenaufruf hinzu:

%Vor%

Definieren Sie dann checkForNullTextNodes(node) zu: (Pseudocode)

  • gehe durch den Baum mit n für jeden Knoten
  • Prüfe jeden Textknoten auf Nullzeichendaten

z. (immer noch Halb-Pseudocode)

%Vor%

Das sollte Ihnen helfen herauszufinden, wo sich Textknoten mit Null-Zeichen-Inhalt befinden, was Ihnen helfen soll herauszufinden, woher sie kommen. Wo werden diese doc oder e Strukturen überhaupt erstellt?

    
LarsH 14.02.2012 23:19
quelle
4

Ich stimme der anderen Antwort zu, hier ist der Code, den ich verwendet habe, um die null Knoten loszuwerden

%Vor%     
John Fa 23.08.2012 08:25
quelle

Tags und Links