Java XML Erro javax.xml.transform.TransformErexception: java.lang.nullPointerException Solução:
Use Java para operar XML. Durante a operação XML, a última etapa é executada. Ao usar o transformador para executar a conversão XML, ocorre um erro de NullPointerException. Alguns dos códigos que têm problemas são os seguintes:
// Converter transformerFactory TFactory = TransformerFactory.NewInstance (); Transformador transformador = tfactory.newtransformer (); // in-Memory XML Origem File DomSource Source = new DomSource (XMLDOC1); // o arquivo xml gerado xml xmldoc2 = novo arquivo (outputPath+generatexmlfilename); Resultado de StreamResult = new StreamResult (XMLDOC2); // converte o transformador.transform (fonte, resultado);
Quando eu executo a função de transformação, recebo o seguinte erro (é relativamente longo. Como eu uso o swing para projetar a interface gráfica, haverá alguns erros na chamada de evento de interface gráfica):
javax.xml.transform.TransformException: java.lang.nullpointerException em com.sun.org.apache.xalan.internal.xslltc.trax.transformerimpl.transform (transformerimpl.java:717) AT com.sun.org.apache.xalan.internal.xslltc.trax.transformerimpl.transform (transformerimpl.java:313) em Operação.addneuronid.addneuronid (addneuronid.java:273) em Operationui.addneurOnidListener.Constructor2Perform (addNeuronidListener.java:245) em Operationui.addneuronidlistener.actionPerformed (addNeuronidlisten.java:85) at Javax.swing.abStractButton.FireMer.Java:85) AT Javax.swing.abStractButton.FireLper.Java:85) AT Javax.swing.abStractButton.FireLper.Java:85) AT Javax.swing.abStractButton.FireLper.Java:85) AT Javax.swing.abStractButton.FireMer.Java:85) Javax.swing.abstractButton $ handler.actionPerformed (abstractButton.java:2318) em javax.swing.defaultButtonmodel.fireactionPerformed (defaultButtonmodel.java:387) AT JAVAX.DAFAULTBUTTTNMETSET. em javax.swing.plaf.basic.basicbuttonListener.MouseReled (BasicButtonListener.java:236) em java.awt.component.processmouseevent (component.java:6041) em javax.swing.ncomporent.process. java.awt.component.processent (component.java:5806) em java.awt.container.processevent (container.java:2058) em java.awt.component.dispatchEventImpl (componente.java:413) java.awt.container.dispatchEventImpl (container.java:2116) em java.awt.component.dispatchEvent (component.java:4243) em java.awt.lightweightdispatcher.retargetMouSouvevente (contendere.java:432) java.awt.lightweightdispatcher.processmouseevent (container.java:3986) em java.awt.lightweightDispatcher.dispatchEvent (container.java:3916) em java.awt.container.dispatchEventImpl (container.java) java.awt.window.dispatchEventImpl (window.java:2440) em java.awt.component.dispatchEvent (component.java:4243) em java.awt.eventqueue.dispatchEvent (eventqueue.java:599) java.awt.eventdispatchthread.pumponeeventFilters (eventdispatchthread.java:273) em java.awt.eventdispatchthread.pumpeventsforfilter (eventdispatchthread.java:183) em java.awt.eventdispatchthread.pumpeventsforhierarchy (eventdispatchthread.java:173) em java.awt.eventdispatchthread.pumpEvents (EventDispatchThread.java:168) at Java.awspEngthethethread.pumpiMread.java:168) at Java.ancheispdisphined.pumpead.pumpiMead.pumpiMead.Java:168) AT Java.awispDispDead.PumpeRead.PumpiMead.PumPuMead.Java:168) AT Java.AngPonspThEad.pumpead.pumpiMeades java.awt.EventDispatchThread.run(EventDispatchThread.java:121)Caused by: java.lang.NullPointerException at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(ToUnknownStream.java:317) at com.sun.org.apache.xalan.internal.xslltc.trax.dom2to.parse (dom2to.java:240) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2TO.parse (domégio.xalan.internal.xsltc.trax.dom2to.parse (domicina.Java:226) com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslltc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domic.java:132) 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) at com.sun.org.apache.xalan.internal.xslltc.trax.transformerimpl.transform (Transformerimpl.java:708) ... 29 mais --------- java.lang.nullpointerException em com.sun.org.apache.xml.internal.serializer.tounknownstream.characters (tounknownstream.java:317) em com.sun.org.apache.xalan.internal.xsltc.trax.d2to.parse (doms com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslntc.trax.dom2to.parse (dom2to.java:226) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.xalan.internal.xsltc.trax.dom2to.parse (domicina.java.java:226) com.sun.org.apache.xalan.internal.xslltc.trax.dom2to.parse (dom2to.java:132) em com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (domicina.Java:94) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708) at com.sun.org.apache.xalan.internal.xslltc.trax.transformerimpl.transform (transformerimpl.java:313) em Operação.addneuronid.addneuronid (addneuronid.java:273) em Operationui.addneurOnidListener.Constructor2Perform (addNeuronidListener.java:245) em Operationui.addneuronidlistener.actionPerformed (addNeuronidlisten.java:85) at Javax.swing.abStractButton.FireMer.Java:85) AT Javax.swing.abStractButton.FireLper.Java:85) AT Javax.swing.abStractButton.FireLper.Java:85) AT Javax.swing.abStractButton.FireLper.Java:85) AT Javax.swing.abStractButton.FireMer.Java:85) Javax.swing.abstractButton $ handler.actionPerformed (abstractButton.java:2318) em javax.swing.defaultButtonmodel.fireactionPerformed (defaultButtonmodel.java:387) AT JAVAX.DAFAULTBUTTTNMETSET. em javax.swing.plaf.basic.basicbuttonListener.MouseReled (BasicButtonListener.java:236) em java.awt.component.processmouseevent (component.java:6041) em javax.swing.ncomporent.process. java.awt.component.processent (component.java:5806) em java.awt.container.processevent (container.java:2058) em java.awt.component.dispatchEventImpl (componente.java:413) java.awt.container.dispatchEventImpl (container.java:2116) em java.awt.component.dispatchEvent (component.java:4243) em java.awt.lightweightdispatcher.retargetMouSouvevente (contendere.java:432) java.awt.lightweightdispatcher.processmouseevent (container.java:3986) em java.awt.lightweightDispatcher.dispatchEvent (container.java:3916) em java.awt.container.dispatchEventImpl (container.java) java.awt.window.dispatchEventImpl (window.java:2440) em java.awt.component.dispatchEvent (component.java:4243) em java.awt.eventqueue.dispatchEvent (eventqueue.java:599) java.awt.eventdispatchthread.pumponeeventFilters (eventdispatchthread.java:273) em java.awt.eventdispatchthread.pumpeventsforfilter (eventdispatchthread.java:183) em java.awt.eventdispatchthread.pumpeventsforhierarchy (eventdispatchthread.java:173) em java.awt.eventdispatchthread.pumpEvents (EventDispatchThread.java:168) at Java.awspEngthethethread.pumpiMread.java:168) at Java.ancheispdisphined.pumpead.pumpiMead.pumpiMead.Java:168) AT Java.awispDispDead.PumpeRead.PumpiMead.PumPuMead.Java:168) AT Java.AngPonspThEad.pumpead.pumpiMeades java.awt.eventdispatchthread.run (eventdispatchthread.java:121)
No começo, também fiquei surpreso que a função de transformação apenas converte a árvore XML na memória em um arquivo, então por que o erro NullPointer ocorre? Eu verifiquei a Internet e não encontrei ninguém para responder. Finalmente, encontrei uma resposta muito útil no blog (http://blog.awe.cz/post/english/beware-of-null-text-nodes/).
De fato, se você observar cuidadosamente as informações de erro, descobrirá que há algo mais importante:
java.lang.nullPointerExceptionat com.sun.org.apache.xml.internal.serializer.tounknownstream.characters (tounknownstream.java:317) at com.sun.org.apache.xalan.intern.xslltc.traxdom2to.org.apache.xalan.intern.intern.xslltc.traxdom2to.
A partir daqui, podemos ver que é porque os caracteres funcionam no com.sun.org.apache.xml.internal.serializer.tounknownstream.java o arquivo tem um erro. O número de linhas é 317. Vá para o diretório de instalação do JDK, encontre SRC e encontre TounknownStream.java no serializador de pasta correspondente. Encontre a seguinte função.
/** * converte a string em uma matriz de caracteres e chama o método sax * caracteres (char [], int, int); * * @See ExtendedContentHandler#caracteres (String) */ Public void caracteres (string chars) lança saxException {final int length = chars.length (); if (comprimento> m_charsbuff.length) {m_charsBuff = new char [comprimento*2 + 1]; } chars.getchars (0, comprimento, m_charsBuff, 0); this.Characters (m_charsBuff, 0, comprimento); } Obviamente, observe que int length = chars.length (); Se o parâmetro chars for nulo, ocorrerá um erro NullPoiteRexception ao chamar a função de comprimento. Próxima camada, função Parse (linha 240) do arquivo dom2to.java sob com.sun.org.apache.xalan.internal.xslntc.trax:
case node.text_node: _handler.Characters (node.getNodEvalue ()); quebrar;
Aqui, você pode saber por que a função dos caracteres tem parâmetros nulos. O motivo é que esse nó é o nó de texto text_node e não há conteúdo na chamada para este nó (nulo). Quando o GetNodEvalue é chamado, Null é devolvido.
Ascendam à função de transformação, o conteúdo do nó é nulo. Na classe Domsource, como é uma árvore XML estabelecida na memória, é definitivamente que o conteúdo de um ou mais elementos ou nós nesta árvore XML é nulo.
OK, a causa do problema foi encontrada. A solução é muito simples. Se houver elementos ou nós no Domsource que sejam nulos, deve ser ao operar XML ou modificar o conteúdo, adicionar elementos etc. para tornar o conteúdo nulo. Portanto, o que você precisa fazer agora é encontrar o código para modificar ou adicionar o conteúdo do elemento e processar a possibilidade de nulo. Se for detectado como nulo, não modifique o XML ou adicione este elemento. A maneira mais fácil é usar se a instrução. Ou seja, antes do SetNodEvalue (String str) ou SetTextContent (String str), verifique se o parâmetro str está vazio (se (str == null)). Se estiver vazio, essa função não será chamada.
E no meu programa, adiciono conteúdo vazio ao elemento. O código é o seguinte: DeviceAndIdMap é um hashmap. Quando liga, quando essa chave primária não existe, ela retornará nulo.
String neuronidstr = deviceandIDMap.get (namecontent); // Atualize neuronidelem.getfirstchild (). SetNodEvalue (neuronidstr);
Portanto, posso resolver o problema adicionando a instrução IF. O código (este código está no loop for, então use Coninue para pular esta modificação) da seguinte forma:
String neuronidstr = deviceandIDMap.get (namecontent); if (neuronidstr == null) {continua; } // Atualize neuronidElem.getFirstChild (). SetNodEvalue (neuronidstr); Problema resolvido!
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!