Java XML ERROR JAVAX.XML.TRANSFORM.TransformeException: java.lang.nullPointerexception -Lösung:
Verwenden Sie Java, um XML zu betreiben. Während der XML -Operation wird der letzte Schritt ausgeführt. Bei der Verwendung von Transformator zur Durchführung der XML -Konvertierung tritt ein NullPointerexception -Fehler auf. Einige der Codes, die Probleme haben, sind wie folgt:
// transformerFactory tfactory = transformerFactory.NewinStance () konvertieren; Transformator transformator = tfactory.newtransformer (); // In-Memory XML-Quelldatei DomSource Source = new DomSource (xmldoc1); // Die generierte XML -Datei Datei xmldoc2 = neue Datei (Ausgabepath+generatexmlFileName); StreamResult result = new StreamResult (xmldoc2); // transformator.transform (Quelle, Ergebnis) konvertieren;
Wenn ich zur Transformationsfunktion renne, erhalte ich den folgenden Fehler (es ist relativ lang. Da ich Swing verwende, um die grafische Schnittstelle zu entwerfen, gibt es einige Fehler in der grafischen Schnittstellenereignisereignisanruf):
javax.xml.transform.transformeException: java.lang.nullpointerexception unter com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transform (TransformatorImpl.java:717) unter com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformatorImpl.java:313) at operation.addneuronid.addneuronid (addneuronid.java:273) bei Operationui.addneuronidListener.Constructor2perform (addneuronidListener.java:245) at operationui.addneuronidListener.ActionPerformed (addneuronidListener.java:85) unter javax.swing.abractbutton.fireacton) (Abstracton.Avstractbutton.Fireacton) (Abstracton.Avstractbutton.Fireacton) (Abstracton.Avstractbutton.Fireacton). javax.swing.abstractbutton $ Handler.ActionPerformed (AbstractButton.java:2318) unter javax.swing.defaultbuttonModel.fireactionperformed (defaultbuttonModel.java:387) unter javax.swing.defaultbuttonModel.setpressed (defaultbuttonModel.java:242) at javax.swing.plaf.basic.BasicbuttonListener.MouserEst (BasicButtonListen.java:236) bei java.awt.component.procent.component.procponent. javax.swing.jcomponent.processmouseeevent (jcomponent.java:3265) unter java.awt.component.processEvent (component.java:5806) bei java.awt.container.processEvent (Container.java:2058) ATR. java.awt.component.dispatcheventimpl (component.java:4413) unter java.awt.container.dispatcheventimpl (container.java:2116) unter java.awt.component.dispatchevent (component.java:4243) at termt.component.dispatchevent (component.java:4243) at terd.awt.component.dispatchevent (component.java:4243) at termt.component.dispatchEvent (component.java:4243) ATTEM) ATRAUT ATTEM) ATREIDE) ATRAUS ATTEM) ATREIDE) ATRAUSTUM) ATRAUSTUM) ATRABEDIMPL. Java.awt.LightweightDispatcher.RetargetMouseeEvent (Container.java:4322) bei Java.awt.LightweightDispatcher.ProcessMouseEvent (Container.java:3986) at Java.awt.LightDispather.dispatchevent (content.java java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.eventqueue.dispatchEvent (eventQueue.java:599) bei java.awt.eventDispatchthread.pumponeEventforFilters (EventDispatchThread.java:273) bei Java.awt.eventDispatch.pumpventsForventsFilter (EventDispatch.183 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.eventDispatchthread.run (EventDispatchThread.java:121) verursacht durch: java.lang.nullpointerexception bei com.sun.org.apache.xml.internal.Serializer.touns Bekannungstream.characters (touncenStream.java:317) at A at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:240) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:132) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:94) at com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transformidentity (Transformerimpl.java:662) ATRANSFORMILDITY (Transformerimpl.java:662) ATRANSFORMENTHITY (TransformatorImpl. com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformatorImpl.java:708) ... 29 More --------- java.lang.nullpointerexception bei com.sun.org.apache.xml.internal.serializer.tounknowStream.characters (toun bekannte Stream.java:317) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:240) ATRAX. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:226) Attach) Attax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:132) unter com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (Dom2to.java:94) at ATRAX.DOM2TO.PARSE (DOMR2to.java:94) Attax at ATLTC.TRAX. com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transformIdentity (TransformerimPl.Java:662) bei com.sun.org.apache.xalan.internal.xsltc.trax.transformer.transform (Transformerimpleform (Transformerimpleform) (Transformerimpleform (TransformerimPl.Transforme com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformatorImpl.java:313) at operation.addneuronid.addneuronid (addneuronid.java:273) bei Operationui.addneuronidListener.Constructor2perform (addneuronidListener.java:245) at operationui.addneuronidListener.ActionPerformed (addneuronidListener.java:85) unter javax.swing.abractbutton.fireacton) (Abstracton.Avstractbutton.Fireacton) (Abstracton.Avstractbutton.Fireacton) (Abstracton.Avstractbutton.Fireacton). javax.swing.abstractbutton $ Handler.ActionPerformed (AbstractButton.java:2318) unter javax.swing.defaultbuttonModel.fireactionperformed (defaultbuttonModel.java:387) unter javax.swing.defaultbuttonModel.setpressed (defaultbuttonModel.java:242) at javax.swing.plaf.basic.BasicbuttonListener.MouserEst (BasicButtonListen.java:236) bei java.awt.component.procent.component.procponent. javax.swing.jcomponent.processmouseeevent (jcomponent.java:3265) unter java.awt.component.processEvent (component.java:5806) bei java.awt.container.processEvent (Container.java:2058) ATR. java.awt.component.dispatcheventimpl (component.java:4413) unter java.awt.container.dispatcheventimpl (container.java:2116) unter java.awt.component.dispatchevent (component.java:4243) at termt.component.dispatchevent (component.java:4243) at terd.awt.component.dispatchevent (component.java:4243) at termt.component.dispatchEvent (component.java:4243) ATRE ATTEM) ATREIDE) ATRAUT ATTEILEN) ATRAUS ATTEM) ATRAUSTUM) ATRAPINGIMPL. Java.awt.LightweightDispatcher.RetargetMouseeEvent (Container.java:4322) bei Java.awt.LightweightDispatcher.ProcessMouseEvent (Container.java:3986) at Java.awt.LightDispather.dispatchevent (content.java java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.eventqueue.dispatchEvent (eventQueue.java:599) bei java.awt.eventDispatchthread.pumponeEventforFilters (EventDispatchThread.java:273) bei Java.awt.eventDispatch.pumpventsForventsFilter (EventDispatch.183 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.eventDispatchthread.run (EventDispatchThread.java:121)
Zuerst war ich auch überrascht, dass die Transformationsfunktion den XML -Baum im Speicher nur in eine Datei umwandelt. Warum tritt der Nullpointer -Fehler also auf? Ich überprüfte das Internet und fand niemanden, der antwortete. Schließlich fand ich im Blog eine sehr nützliche Antwort (http://blog.awe.cz/post/english/beware-of-null-text-nodes/).
Wenn Sie sich die Fehlerinformationen sorgfältig ansehen, werden Sie feststellen, dass es etwas Wichtigeres gibt:
java.lang.nullpointerexceptionat com.sun.org.apache.xml.internal.Serializer.tounknowstream.characters (tounknowstream.java:317) unter com.sun.org.apache.xalan.internal.xSltc.Trax.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2to.dom2tO.
Von hier aus können wir sehen, dass die Zeichen in der Datei com.sun.org.apache.xml.internal.Serializer.org.apache.xml.internal.Serializer.tounknowStream.java -Datei einen Fehler haben. Die Anzahl der Zeilen beträgt 317. Gehen Sie zum JDK -Installationsverzeichnis, finden Sie SRC und finden Sie im entsprechenden Ordner Serializer. Finden Sie die folgende Funktion.
/** * konvertiert die Zeichenfolge in ein Zeichen -Array und ruft die SAX -Methode auf * Zeichen (char [], int, int); * * @see extendedContentHandler#Zeichen (Zeichenfolge) */ public void Zeichen (String chars) löst SaxException aus {endgültig int länge = chars.length (); if (Länge> m_charsbuff.length) {m_charsbuff = new char [length*2 + 1]; } chars.getchars (0, Länge, m_charsbuff, 0); this.characters (m_charsbuff, 0, Länge); } Beachten Sie natürlich, dass int länge = chars.length (); Wenn die Parameterzeichen null sind, tritt ein NullPoiterexception -Fehler beim Aufrufen der Längenfunktion auf. Nächste Schicht, Parse -Funktion (Zeile 240) der DOM2to.java -Datei unter com.sun.org.apache.xalan.internal.xsltc.trax:
case node.text_node: _handler.characters (node.getNodeValue ()); brechen;
Hier können Sie wissen, warum die Zeichenfunktion NULL -Parameter enthält. Der Grund dafür ist, dass dieser Knoten der Textknoten text_node ist und es keinen Inhalt im Anruf zu diesem Knoten (NULL) gibt. Wenn GetNodeValue aufgerufen wird, wird Null zurückgegeben.
In die Transformationsfunktion steigen, der Knoteninhalt ist null. In der DomSource -Klasse ist es definitiv, dass der Inhalt eines oder mehrerer Elemente oder Knoten in diesem XML -Baum ein XML -Baum ist, da es sich um einen im Gedächtnis festgelegten XML -Baum handelt.
Ok, die Ursache des Problems wurde gefunden. Die Lösung ist sehr einfach. Wenn in DomSource Elemente oder Knoten vorhanden sind, muss dies beim Betrieb von XML oder beim Ändern von Inhalten, Hinzufügen von Elementen usw. sein, um den Inhalt null zu machen. Sie müssen also jetzt den Code finden, um den Elementinhalt zu ändern oder hinzuzufügen und die Möglichkeit von Null zu verarbeiten. Wenn es als NULL erkannt wird, ändern Sie das XML nicht oder fügen Sie dieses Element hinzu. Der einfachste Weg ist die Verwendung von IF -Anweisung. Das heißt, vor dem SetNoDeValue (String Str) oder SetTextContent (String Str) prüfen Sie zunächst, ob der Parameter str -Straftel leer ist (if (str == null)). Wenn es leer ist, wird diese Funktion nicht aufgerufen.
Und in meinem Programm füge ich dem Element leere Inhalte hinzu. Der Code lautet wie folgt: DeviceAnDIDMap ist eine Hashmap. Wenn es aufgerufen wird, gibt es bei diesem Primärschlüssel NULL zurück.
String NeuronIdstr = DeviceAnDIdMap.get (namensContent); // NeuronIdelem.getFirstchild (). SetNodeValue (NeuronIdstr) aktualisieren;
Daher kann ich das Problem lösen, indem ich eine Anweisung hinzufüge. Der Code (dieser Code befindet sich in der für Schleife. Verwenden Sie also Coninue, um diese Änderung zu überspringen) wie folgt:
String NeuronIdstr = DeviceAnDIdMap.get (namensContent); if (neuronidstr == null) {Fortsetzung; } // NeuronIdelem.getFirstchild (). SetNodeValue (neuronidstr); Problem gelöst!
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!