Erreur Java XML Javax.xml.transform.transformèrexception: java.lang.nullpointerException Solution:
Utilisez Java pour faire fonctionner XML. Pendant l'opération XML, la dernière étape est exécutée. Lors de l'utilisation du transformateur pour effectuer une conversion XML, une erreur NullPointerException se produit. Certains des codes qui ont des problèmes sont les suivants:
// convertit transformèrefactory tfactory = transformèrefactory.newinstance (); Transformateur transformateur = tfactory.newTransformrer (); // Fichier source XML inMory Domsource Source = new Domsource (XMLDOC1); // le fichier de fichier XML généré xMLDOC2 = nouveau fichier (OutputPath + generatexmlFileName); StreamResult Result = new StreamResult (XMLDOC2); // convertit transformateur.transform (source, résultat);
Lorsque j'exécute vers la fonction de transformation, j'obtiens l'erreur suivante (c'est relativement long. Puisque j'utilise Swing pour concevoir l'interface graphique, il y aura des erreurs dans l'appel d'événement d'interface graphique):
javax.xml.transform.transformeRexception: java.lang.nullpointerException à com.sun.org.apache.xalan.internal.xsltc.trax.transformempl.transform (transformèrerimpl.java:717) à la com.sun.org.apache.xalan.internal.xsltc.trax.transformmerimpl.transform (TransformERImpl.java:313) à operation.addneuronid.addneuronid (addneuronid.java:273) at Operationui.AddneuronidListener.Constructor2perform (addNeuroniDListener.java:245) sur operationui.addneuronidListener.ActionPerformed (addNeuronidListener.java:85) à javax.swing.abstractbutton.fireaCectionperformed (AbstractButton.java:195) à AT a javax.swing.abstractbutton $ handler.actionperformed (abstractbutton.java:2318) à javax.swing.defaultbuttonmodel.fireActionPerformed (defaultButtonModel.java:387) à javax.swing.defaultbuttonmodel.setRed. javax.swing.plaf.basic.basicbuttonListener.mousselelent (BasicButtonListener.java:236) à java.awt.component.processmousevent (composant.java:6041) à javax.swing.jcomponent.processmeevent (jcomponent.java:365) à java.awt.component.processEvent (composant.java:5806) sur java.awt.continer.processEvent (contener.java:2058) à java.awt.component.dispatchEventimpl (Component.java:4413) java.awt.container.dispatchEventImpl (contener.java:2116) sur java.awt.component.dispatchEvent (composant.java:4243) à java.awt.lightweprather java.awt.lightweightdispatcher.processmousevent (contener.java:3986) sur java.awt.lightwispatcher.dispatchEvent (conteneur.java:3916) à java.awt.contient.dispatchEventimpl (contener.java:2102) à l'affaire java.awt.window.dispatchEventimpl (window.java:2440) sur java.awt.component.dispatchEvent (composant.java:4243) à java.awt.eventqueue.dispatchEvent (EventQueue.java:599) à la java.awt.eventdispatchthread.pumpOneEventForfilters (eventdispatchthread.java:273) à java.awt.eventdispatchthread.pumpentsforfilter (eventdispatchthread.java:183) java.awt.eventdispatchthread.pumpentsforHierarchy (eventdispatchthread.java:173) à java.awt.eventdispatchthread.pumpevents (eventdispatchthread.pumpevents (eventDispatchThread.java:160) ATSEVEnts (eventDispatchThread.java:160) AT java.awt.eventdispatchthread.run (eventdispatchthread.java:121) causée par: java.lang.nullpointerException à com.sun.org.apache.xml.internal.serializer.tounknstream.characters (Tounkinstream.java:317) à la com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:240) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:132) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:94) à com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transformridentinty (transformatrimp.java:662) à la com.sun.org.apache.xalan.internal.xsltc.trax.transformRerimpl.transform (transformERImpl.java:708) ... 29 plus --------- java.lang.nullpointerException à la com.sun.org.apache.xml.internal.serializer.tounknownstream.characters (tounknownstream.java:317) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (DOM2TO.Java:240) attrax. com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:226) com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:132) à com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache (Dom2to.java:94) com.sun.org.apache.xalan.internal.xsltc.trax.transformmerimpl.transformridentity (transformERIMPL.java:662) sur com.sun.org.apache.xalan.internal.xsltc.trax.transformmerimpl.transform (transformèrempl.java:708) sur at com.sun.org.apache.xalan.internal.xsltc.trax.transformmerimpl.transform (TransformERImpl.java:313) à operation.addneuronid.addneuronid (addneuronid.java:273) at Operationui.AddneuronidListener.Constructor2perform (addNeuroniDListener.java:245) sur operationui.addneuronidListener.ActionPerformed (addNeuronidListener.java:85) à javax.swing.abstractbutton.fireaCectionperformed (AbstractButton.java:195) à AT a javax.swing.abstractbutton $ handler.actionperformed (abstractbutton.java:2318) à javax.swing.defaultbuttonmodel.fireActionPerformed (defaultButtonModel.java:387) à javax.swing.defaultbuttonmodel.setRed. javax.swing.plaf.basic.basicbuttonListener.mousselelent (BasicButtonListener.java:236) à java.awt.component.processmousevent (composant.java:6041) à javax.swing.jcomponent.processmeevent (jcomponent.java:365) à java.awt.component.processEvent (composant.java:5806) sur java.awt.continer.processEvent (contener.java:2058) à java.awt.component.dispatchEventimpl (Component.java:4413) java.awt.container.dispatchEventImpl (contener.java:2116) sur java.awt.component.dispatchEvent (composant.java:4243) à java.awt.lightweprather java.awt.lightweightdispatcher.processmousevent (contener.java:3986) sur java.awt.lightwispatcher.dispatchEvent (conteneur.java:3916) à java.awt.contient.dispatchEventimpl (contener.java:2102) à l'affaire java.awt.window.dispatchEventimpl (window.java:2440) sur java.awt.component.dispatchEvent (composant.java:4243) à java.awt.eventqueue.dispatchEvent (EventQueue.java:599) à la java.awt.eventdispatchthread.pumpOneEventForfilters (eventdispatchthread.java:273) à java.awt.eventdispatchthread.pumpentsforfilter (eventdispatchthread.java:183) java.awt.eventdispatchthread.pumpentsforHierarchy (eventdispatchthread.java:173) à java.awt.eventdispatchthread.pumpevents (eventdispatchthread.pumpevents (eventDispatchThread.java:160) ATSEVEnts (eventDispatchThread.java:160) AT java.awt.eventdispatchthread.run (eventdispatchthread.java:121)
Au début, j'ai également été surpris que la fonction de transformation convertit simplement l'arborescence XML en mémoire en fichier, alors pourquoi l'erreur NullPointer se produit-elle? J'ai vérifié Internet et trouvé personne pour répondre. Enfin, j'ai trouvé une réponse très utile dans le blog (http://blog.awe.cz/post/english/beware-of-null-text-nodes/).
En fait, si vous regardez attentivement les informations d'erreur, vous constaterez qu'il y a quelque chose de plus important:
java.lang.nullpointerexceptat com.sun.org.apache.xml.internal.serializer.tounknstream.characters (tounonfoream.java:317) sur com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.pache.
À partir d'ici, nous pouvons voir que c'est parce que les caractères fonctionnent dans le com.sun.org.apache.xml.internal.serializer.tounknownstream.java a une erreur. Le nombre de lignes est 317. Accédez au répertoire d'installation JDK, recherchez SRC et trouvez TounknownStream.java dans le sérialiseur de dossier correspondant. Trouver la fonction suivante.
/ ** * convertit la chaîne en un tableau de caractères et appelle les caractères de la méthode SAX * (char [], int, int); * * @SeE ExtendContentHandler # Caractères (String) * / Public void Caractères (String Chars) lève saxException {final int longueur = chars.length (); if (longueur> m_charsbuff.length) {m_charsbuff = new char [la longueur * 2 + 1]; } chars.getchars (0, longueur, m_charsbuff, 0); this.Characters (m_charsbuff, 0, longueur); } Évidemment, notez que int length = chars.length (); Si les caractères de paramètre sont nuls, une erreur NullPoiterexception se produira lors de l'appel de la fonction de longueur. Couche suivante, fonction d'analyse (ligne 240) du fichier Dom2to.java sous com.sun.org.apache.xalan.internal.xsltc.trax:
case node.text_node: _handler.characters (node.getNodEvalue ()); casser;
Ici, vous pouvez savoir pourquoi la fonction des caractères a des paramètres nuls. La raison en est que ce nœud est le nœud de texte text_node, et il n'y a pas de contenu dans l'appel à ce nœud (null). Lorsque getNodevalue est appelé, null est retourné.
Ascend à la fonction de transformation, le contenu du nœud est nul. Dans la classe Domsource, car il s'agit d'un arbre XML établi en mémoire, c'est certainement que le contenu d'un ou plusieurs éléments ou nœuds de cet arbre XML est nul.
OK, la cause du problème a été trouvée. La solution est très simple. S'il y a des éléments ou des nœuds dans Domsource qui sont nuls, ce doit être lors du fonctionnement de XML ou de la modification du contenu, de l'ajout d'éléments, etc. pour rendre le contenu nul. Donc, ce que vous devez faire maintenant, c'est de trouver le code pour modifier ou ajouter le contenu de l'élément et traiter la possibilité de null. S'il est détecté comme nul, ne modifiez pas le XML ou ajoutez cet élément. Le moyen le plus simple est d'utiliser la déclaration si. Autrement dit, avant SetNodevalue (String Str) ou SetTextContent (String Str), vérifiez d'abord si le paramètre STR est vide (if (str == null)). S'il est vide, cette fonction ne sera pas appelée.
Et dans mon programme, j'ajoute du contenu vide à l'élément. Le code est le suivant: DeviceAndidMap est un hashmap. Quand il appelle, lorsque cette clé primaire n'existe pas, elle renverra null.
String NeuroniDStr = DeviceAndmap.get (nameContent); // Mette à jour Neuronidelem.getFirstChild (). SetNodevalue (NeuroniDStr);
Par conséquent, je peux résoudre le problème en ajoutant une instruction IF. Le code (ce code est dans la boucle pour, alors utilisez Coninue pour sauter cette modification) comme suit:
String NeuroniDStr = DeviceAndmap.get (nameContent); if (neuronidstr == null) {continuer; } // Mettez à jour Neuronidelem.getFirstChild (). SetNodevalue (NeuroniDStr); Problème résolu!
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!