Java XMLエラーjavax.xml.transform.transformerexception:java.lang.nullpointerexceptionソリューション:
Javaを使用してXMLを操作します。 XML操作中に、最後のステップが実行されます。トランスを使用してXML変換を実行すると、nullpointerexceptionエラーが発生します。問題があるコードの一部は次のとおりです。
// TransformerFactory tFactory = TransformerFactory.NewInstance()を変換します。トランストランス= tfactory.newtransformer(); //メモリーXMLソースファイルdomsource source = new domsource(xmldoc1); //生成されたXMLファイルxmldoc2 = newファイル(outputpath+generatexmlfilename); StreamResult result = new StreamResult(xmldoc2); // Transformer.Transform(ソース、結果)を変換します。
変換関数に実行すると、次のエラーが表示されます(比較的長いです。Swingを使用してグラフィカルインターフェイスを設計するため、グラフィカルインターフェイスイベントコールにいくつかのエラーが発生します):
javax.xml.transform.transformerexception:java.lang.nullpointerexception at com.sun.org.apache.xalan.internal.xsltc.transformerimpl.transform(transferimpl.java:717)at com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform(transformerimpl.java:313)Operation.addneuronid.addneuronid(addneuronid.java:273)at Operationui.addneuronidlistener.constructor2perform(addneuronidlistener.java:245)at Operationui.addneuronidlistener.actionperformed(addneuronidlistener.java:85)at javax.swing.button.fireforformed.fireforformed.futton.futton.futton.futton.futton.futton.futton.futton.futton.futton.futton.button. javax.swing.abstractbutton $ handler.actionperformed(abstractbutton.java:2318)at javax.swing.defaulttonmodel.fireAuttionPerformed(defaultbuttonmodel.java:387)at javax.swing.defaulttonmodel.model.mava javax.swing.plaf.basic.basicbuttonlistener.mousereleased(basicbuttonlistener.java:236)at java.awt.component.processmouseEvent(component.java:6041)at javax.swing.jcomponent.processmouseevent.jcompent.jcompont java.awt.component.processevent(component.java:5806)at java.awt.container.processevent(container.java:2058)at java.awt.component.dispatcheventimpl(component.java:4413) java.awt.container.dispatcheventimpl(container.java:2116)at java.awt.component.dispatchevent(component.java:4243)at java.awt.lightweightdispatcher.retgetmousevent(container.java:4322)at java.awt.lightweightdispatcher.processmousevent(container.java:3986)at java.awt.lightweightdispatcher.dispatchevent(container.java:3916)at java.awt.awt.container.diseventimpl(container.java:202)at java.awt.window.dispatcheventimpl(window.java:2440)at java.awt.component.dispatchevent(component.java:4243)at java.awt.eventqueue.dispatchevent(eventqueue.java:599)at java.awt.eventdispatchthread.pumponeeventforfilters(eventdispatchthread.java:273)at java.awt.eventdispatchthread.pumpeventsforfilter(eventdispatchthread.java:183)at java.awt.eventdispatchthread.pumpeventsforhierarchy(eventdispatchthread.java:173)at java.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:168)at java.awt.awt.eventdispatchthread.pumpatchthread.pumpatchthread.pumpatchthread.pumpatchthread.pumpatchThread. Java.awt.eventdispatchthread.run(eventdispatchthread.java:121)で原因:java.lang.nullpointerexception at com.sun.org.apache.xml.internal.Serializer.TounknownStream.Characters(TunknownStream.java:317) com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:240) at com.sun.org.apache.xalan.internal.xsltc.trax.doM2TO.parse(DOM2TO.java:226) at com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:132)のcom.sun.org.apache.xalan.internal.xsltc.dom2to.parse(dom2to.java:226)のparse(dom2to.java:226) com.sun.or.xsltc.dom2to.parse(dom2to.java:94)at com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transformpl.transformpertity(transformerimpl.java:662)at com.internal.xsltc.dom2to.parse(dom2to.java:94)のparse(dom2to.java:94)dom2to.parse(dom2to.java:94)のdom2to.parse(dom2to.java:94)のparse(dom2to.java:94) com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform(transformerimpl.java:708)... 29 more --------- Java.lang.nullpointerexception at com.sun.org.apache.xml.internal.serializer.tounknownStream.characters(tounknownStream.java:317)at com.sun.org.apache.apache.xalan.internal.xsltc.trax.dom2to.parse(dom2to.java:240)at com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.org.org.apache.apache.calan.internal.xsltc.trax.dom2to.parse(dom2to.java:226)のcom.sunal.xsltc.dom2to.parse(dom2to.java:226)のcom.internal.xsltc.dom2to.parse(dom2to.java:226) com.sun.or.xsltc.dom2to.parse(dom2to.java:132)のcom.sun.org.apache.apache.calan.internal.xsltc.trax.dom2to.phase(dom2to.java:94)at com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transformidentity(transformerimpl.java:662)at com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform(Transfurenimpl.java:708) com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform(transformerimpl.java:313)Operation.addneuronid.addneuronid(addneuronid.java:273)at Operationui.addneuronidlistener.constructor2perform(addneuronidlistener.java:245)at Operationui.addneuronidlistener.actionperformed(addneuronidlistener.java:85)at javax.swing.button.fireforformed.fireforformed.futton.futton.futton.futton.futton.futton.futton.futton.futton.futton.futton.button. javax.swing.abstractbutton $ handler.actionperformed(abstractbutton.java:2318)at javax.swing.defaulttonmodel.fireAuttionPerformed(defaultbuttonmodel.java:387)at javax.swing.defaulttonmodel.model.mava javax.swing.plaf.basic.basicbuttonlistener.mousereleased(basicbuttonlistener.java:236)at java.awt.component.processmouseEvent(component.java:6041)at javax.swing.jcomponent.processmouseevent.jcompent.jcompont java.awt.component.processevent(component.java:5806)at java.awt.container.processevent(container.java:2058)at java.awt.component.dispatcheventimpl(component.java:4413) java.awt.container.dispatcheventimpl(container.java:2116)at java.awt.component.dispatchevent(component.java:4243)at java.awt.lightweightdispatcher.retgetmousevent(container.java:4322)at java.awt.lightweightdispatcher.processmousevent(container.java:3986)at java.awt.lightweightdispatcher.dispatchevent(container.java:3916)at java.awt.awt.container.diseventimpl(container.java:202)at java.awt.window.dispatcheventimpl(window.java:2440)at java.awt.component.dispatchevent(component.java:4243)at java.awt.eventqueue.dispatchevent(eventqueue.java:599)at java.awt.eventdispatchthread.pumponeeventforfilters(eventdispatchthread.java:273)at java.awt.eventdispatchthread.pumpeventsforfilter(eventdispatchthread.java:183)at java.awt.eventdispatchthread.pumpeventsforhierarchy(eventdispatchthread.java:173)at java.awt.eventdispatchthread.pumpevents(eventdispatchthread.java:168)at java.awt.awt.eventdispatchthread.pumpatchthread.pumpatchthread.pumpatchthread.pumpatchthread.pumpatchThread. at java.awt.eventdispatchthread.run(eventdispatchthread.java:121)
最初は、変換関数がメモリ内のXMLツリーをファイルに変換するだけであることに驚いたのに、なぜnullpointerエラーが発生するのですか?私はインターネットをチェックしましたが、誰も答えることができませんでした。最後に、ブログ(http://blog.awe.cz/post/english/beware-of-null-text-nodes/)で非常に便利な答えを見つけました。
実際、エラー情報を注意深く見ると、もっと重要なことがあることがわかります。
java.lang.nullpointerexception com.sun.org.apache.xml.internal.serializer.tounknownStream.Characters(tounknownStream.java:317)at com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse(dom2to.java)
ここから、文字がcom.sun.org.apache.xml.internal.serializer.tounknownStream.javaファイルの関数にエラーがあるためです。行の数は317です。JDKインストールディレクトリに移動し、SRCを見つけて、対応するフォルダーシリアナーでtounknownStream.javaを見つけます。次の関数を見つけます。
/** *文字列を文字アレイに変換し、saxメソッドを呼び出します *文字(char []、int、int); * * @see extendedContentHandler#文字(String) */ public void Characters(string chars)throws saxexception {final int length = chars.length(); if(length> m_charsbuff.length){m_charsbuff = new char [length*2 + 1]; } chars.getchars(0、length、m_charsbuff、0); this.characters(m_charsbuff、0、length); }明らかに、int length = chars.length();パラメーターcharsがnullの場合、長さ関数を呼び出すときにnullpoiterexceptionエラーが発生します。次のレイヤー、com.sun.org.apache.xalan.internal.xsltc.traxのdom2to.javaファイルの解析関数(行240):
case node.text_node:_handler.characters(node.getNodevalue());壊す;
ここでは、文字関数にヌルパラメーターがある理由を知ることができます。その理由は、このノードがテキストノードText_Nodeであり、このノードへの呼び出し(null)にコンテンツがないためです。 GetNodevalueが呼ばれると、Nullが返されます。
変換関数に昇ると、ノードコンテンツはnullです。 Domsourceクラスでは、メモリに確立されたXMLツリーであるため、このXMLツリーの1つ以上の要素またはノードの内容がヌルであることは間違いありません。
OK、問題の原因が見つかりました。ソリューションは非常にシンプルです。 nullの要素またはノードがdomsourceにある場合、xmlを操作するとき、またはコンテンツを変更したり、要素を追加したりする場合は、コンテンツをnullにする必要があります。したがって、今やらなければならないのは、要素コンテンツを変更または追加するコードを見つけ、nullの可能性を処理することです。 nullとして検出された場合は、XMLを変更したり、この要素を追加したりしないでください。最も簡単な方法は、IFステートメントを使用することです。つまり、setNodevalue(string str)またはsetTextContent(string str)の前に、最初にパラメーターstrが空であるかどうかを確認します(if(str == null))。空の場合、この関数は呼び出されません。
そして、私のプログラムでは、空のコンテンツを要素に追加します。コードは次のとおりです。DEVICENDIDMAPはハッシュマップです。コールすると、この主なキーが存在しない場合、nullを返します。
string neuronidstr = deviceandidmap.get(namecontent); // Neuronidelem.getFirstChild()。setNodevalue(neuronidstr)を更新します。
したがって、IFステートメントを追加することで問題を解決できます。次のように、コード(このコードはfor loopにあるため、コーンを使用してこの変更をスキップします):次のようになります。
string neuronidstr = deviceandidmap.get(namecontent); if(neuronidstr == null){継続; } // Neuronidelem.getFirstChild()。setNodevalue(neuronidstr)を更新します。問題が解決しました!
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!