Java XML Kesalahan javax.xml.transform.transformerexception: java.lang.nullpointerException Solusi:
Gunakan Java untuk mengoperasikan XML. Selama operasi XML, langkah terakhir dieksekusi. Saat menggunakan Transformer untuk melakukan konversi XML, kesalahan NullPointerException terjadi. Beberapa kode yang memiliki masalah adalah sebagai berikut:
// Konversi TransformerFactory tFactory = TransformerFactory.NewInstance (); Transformer transformer = tfactory.newtransformer (); // Sumber Sumber XML In-Memory Sumber DomSource = DomSource Baru (XMLDOC1); // File XML yang dihasilkan xmldoc2 = file baru (outputPath+generateXmlFileName); Hasil StreamResult = StreamResult baru (XMLDOC2); // konversi transformer.transform (sumber, hasil);
Ketika saya menjalankan ke fungsi Transform, saya mendapatkan kesalahan berikut (ini relatif panjang. Karena saya menggunakan ayunan untuk merancang antarmuka grafis, akan ada beberapa kesalahan dalam panggilan acara antarmuka grafis):
javax.xml.transform.transformerexception: java.lang.nullpointerException di com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform (transformerImpl.java:717) di com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transform (transformerImpl.java:313) di Operation.addneuronid.addneuronid (addneuronid.java:273) di OperationUi.addneuronidlistener.constructor2Perform (addneuronidlistener.java:245) di OperationUi.AddneuronidListener.actionPerformed (addneuronidlistener.java:85) di javax.swing.abstracton.fireAabection javax.swing.abstractbutton $ handler.actionPerformed (abstractbutton.java:2318) di javax.swing.defaultbuttonmodel.fireactionPerformed (defaultButtonModel.java:387) di javax.swing.defaultbuttonmodel.java:387) di javax.swing.default.javault.java.Java: di javax.swing.plaf.basic.basicbuttonlistener.mousereleased (basicbuttonlistener.java:236) di java.awt.component.processmouseEvent (component.java:6041) di javax.swing.jcomponent.processous java.awt.component.processEvent (component.java:5806) di java.awt.container.processEvent (container.java:2058) di java.awt.component.dispatchEvenImpl (component.java:4413) di java.awt.container.dispatcheventimpl (container.java:2116) di java.awt.component.dispatchevent (component.java:4243) di java.awt.lightdispatcher.retargetMouseEvent (container.java:4322) at java.awt.lightweightdispatcher.processmouseEvent (container.java:3986) di java.awt.lightwispatcher.dispatchevent (container.java:3916) di java.awt.container.dispatcatcl (container.java:2102) java.awt.window.dispatcheventimpl (window.java:2440) di java.awt.component.dispatchevent (component.java:4243) di java.awt.eventqueue.dispatchevent (eventqueue.java:599) di java.awt.eventdispatchThread.pumponeeventforfilters (eventDispatchthread.java:273) di java.awt.eventdispatchthread.pumpeventsforfilter (eventdispatchthread.java:183) di java.awt.eventdispatchThread.pumpeventsforHierarchy (eventDispatchThread.java:173) di java.awt.eventdispatchThread.pumpevents (eventdispatchrread.java:168) di java.awt.eventdispatchread.pumpevents.pumpatchents.patchevents. java.awt.eventdispatchThread.run (eventDispatchThread.java:121) disebabkan oleh: java.lang.nullpointerException di com.sun.org.apache.xml.internal.serializer.tounknomnelStream.characters (TounnownStream.java:serializer.tounknomnelStream.character com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:240) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:132) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:94) di com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transformityy (transformerimppl.jav.trax. com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform (TransformerImpl.java:708) ... 29 Lainnya --------- java.lang.nullpointerexception di com. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java.xsltc.trax.dom2to.parse (dom2to.java:226) at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:132) di com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:94) at com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transformentity (transformerImpl.java:662) di com.sun.org.apache.xalan.internal.xsltc.trax.transformerformerform (transformform (iMPLTC.TRAX.TRANSFORCR.RRANCHANSFORT (PERANRAV.RANSFRANSFERMER.PLANSFRANSFORT ( com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transform (transformerImpl.java:313) di Operation.addneuronid.addneuronid (addneuronid.java:273) di OperationUi.addneuronidlistener.constructor2Perform (addneuronidlistener.java:245) di OperationUi.AddneuronidListener.actionPerformed (addneuronidlistener.java:85) di javax.swing.abstracton.fireAabection javax.swing.abstractbutton $ handler.actionPerformed (abstractbutton.java:2318) di javax.swing.defaultbuttonmodel.fireactionPerformed (defaultButtonModel.java:387) di javax.swing.defaultbuttonmodel.java:387) di javax.swing.default.javault.java.Java: di javax.swing.plaf.basic.basicbuttonlistener.mousereleased (basicbuttonlistener.java:236) di java.awt.component.processmouseEvent (component.java:6041) di javax.swing.jcomponent.processous java.awt.component.processEvent (component.java:5806) di java.awt.container.processEvent (container.java:2058) di java.awt.component.dispatchEvenImpl (component.java:4413) di java.awt.container.dispatcheventimpl (container.java:2116) di java.awt.component.dispatchevent (component.java:4243) di java.awt.lightdispatcher.retargetMouseEvent (container.java:4322) at java.awt.lightweightdispatcher.processmouseEvent (container.java:3986) di java.awt.lightwispatcher.dispatchevent (container.java:3916) di java.awt.container.dispatcatcl (container.java:2102) java.awt.window.dispatcheventimpl (window.java:2440) di java.awt.component.dispatchevent (component.java:4243) di java.awt.eventqueue.dispatchevent (eventqueue.java:599) di java.awt.eventdispatchThread.pumponeeventforfilters (eventDispatchthread.java:273) di java.awt.eventdispatchthread.pumpeventsforfilter (eventdispatchthread.java:183) di java.awt.eventdispatchThread.pumpeventsforHierarchy (eventDispatchThread.java:173) di java.awt.eventdispatchThread.pumpevents (eventdispatchrread.java:168) di java.awt.eventdispatchread.pumpevents.pumpatchents.patchevents. java.awt.eventdispatchthread.run (eventDispatchThread.java:121)
Awalnya saya juga terkejut bahwa fungsi transformasi hanya mengubah pohon XML dalam memori menjadi file, jadi mengapa kesalahan nullpointer terjadi? Saya memeriksa internet dan tidak menemukan siapa pun untuk menjawab. Akhirnya, saya menemukan jawaban yang sangat berguna di blog (http://blog.awe.cz/post/english/beware-of-null-text-nodes/).
Bahkan, jika Anda melihat dengan cermat informasi kesalahan, Anda akan menemukan bahwa ada sesuatu yang lebih penting:
java.lang.nullpointerExceptionat com.sun.org.apache.xml.internal.serializer.tounknomnelStream.characters (tounnownstream.java:317) di com.sun.org.apache.xalan.internal.xsltc.trax.domoto.apache.xalan.internal.xsltc.trax.dom2to.apache.xalan.internal.xsltc.trax.dom2to
Dari sini, kita dapat melihat bahwa itu karena karakter berfungsi di com.sun.org.apache.xml.internal.serializer.tounknomnelStream.java file memiliki kesalahan. Jumlah baris adalah 317. Pergi ke direktori instalasi JDK, temukan SRC, dan temukan Tounnownstream.java di serializer folder yang sesuai. Temukan fungsi berikut.
/** * Mengubah string ke array karakter dan memanggil metode saksofon * karakter (char [], int, int); * * @See ExtendedContenthandler#karakter (string) */ karakter public void (string chars) melempar saxexception {final int length = chars.length (); if (length> m_charsbuff.length) {m_charsbuff = char baru [panjang*2 + 1]; } chars.getchars (0, panjang, m_charsbuff, 0); this.characters (m_charsbuff, 0, panjang); } Jelas, perhatikan bahwa int int = chars.length (); Jika parameter chars adalah null, kesalahan nullpoiterException akan terjadi saat memanggil fungsi panjang. Lapisan berikutnya, Parse Function (baris 240) dari file dom2to.java di bawah com.sun.org.apache.xalan.internal.xsltc.trax:
case node.text_node: _handler.characters (node.getNodevalue ()); merusak;
Di sini, Anda bisa tahu mengapa fungsi karakter memiliki parameter nol. Alasannya adalah bahwa simpul ini adalah node teks text_node, dan tidak ada konten dalam panggilan ke node ini (null). Ketika getNoDevalue dipanggil, null dikembalikan.
Naik ke fungsi transformasi, konten simpul adalah nol. Di kelas Domsource, karena itu adalah pohon XML yang ditetapkan dalam memori, jelas bahwa kandungan satu atau lebih elemen atau node di pohon XML ini adalah nol.
Oke, penyebab masalah ditemukan. Solusinya sangat sederhana. Jika ada elemen atau node di DomSource yang nol, itu harus saat mengoperasikan XML, atau memodifikasi konten, menambahkan elemen, dll. Untuk membuat konten nol. Jadi yang perlu Anda lakukan sekarang adalah menemukan kode untuk memodifikasi atau menambahkan konten elemen, dan memproses kemungkinan nol. Jika terdeteksi sebagai nol, jangan memodifikasi XML atau menambahkan elemen ini. Cara termudah adalah dengan menggunakan pernyataan IF. Yaitu, sebelum setNodevalue (string str) atau setTextContent (string str), pertama periksa apakah parameter str adalah kosong (if (str == null)). Jika kosong, fungsi ini tidak akan dipanggil.
Dan dalam program saya, saya menambahkan konten kosong ke elemen. Kode ini adalah sebagai berikut: DeviceAndidMap adalah hashmap. Ketika panggilan dapatkan, ketika kunci utama ini tidak ada, itu akan mengembalikan nol.
String neuronidstr = deviceAndidMap.get (namecontent); // perbarui neuronidelem.getFirstChild (). SetNodevalue (neuronidstr);
Oleh karena itu, saya dapat menyelesaikan masalah dengan menambahkan pernyataan IF. Kode (kode ini ada di loop untuk, jadi gunakan coninue untuk melewatkan modifikasi ini) sebagai berikut:
String neuronidstr = deviceAndidMap.get (namecontent); if (neuronidstr == null) {lanjutan; } // Perbarui neuronidelem.getFirstChild (). SetNodevalue (neuronidstr); Masalah terpecahkan!
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!