Java XML Error javax.xml.transform.transformerException: java.lang.nullpointerException Solución:
Use Java para operar XML. Durante la operación XML, se ejecuta el último paso. Cuando se usa Transformer para realizar la conversión XML, se produce un error de NullPointerException. Algunos de los códigos que tienen problemas son los siguientes:
// convertir transformerFactory tfactory = transformerFactory.newinStance (); Transformer transformer = tfactory.newtransformer (); // archivo de origen XML en memoria DOMSource Source = new Domsource (XMLDOC1); // El archivo XML generado archivo xmldoc2 = nuevo archivo (outputPath+generateXmlFileName); Resultado streamResult = new StreamResult (xmlDoc2); // convertir transformer.transform (fuente, resultado);
Cuando ejecuto la función de transformación, obtengo el siguiente error (es relativamente largo. Dado que uso Swing para diseñar la interfaz gráfica, habrá algunos errores en la llamada de evento de la interfaz gráfica):
javax.xml.transform.transformerException: java.lang.nullpointerexception en com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transform (transformerImpl.Java:717) AT com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformerimpl.java:313) en la operación.addneuronid.addneuronid (addneuronid.java:273) AT operationui.addneuronidListener.Constructor2Perform (addneuronidListener.java:245) en OperationUi.addneuronidListener.ActionPerFormed (addNeuronIdListener.Java:85) en javax.swing.abstractbutton.Inspere -realizado javax.swing.abstractButton $ handler.actionperformed (abstractButton.java:2318) en javax.swing.defaultButtonmodel.fireActionPerformed (defaultButtonModel.Java:387) en javax.swing.defaultbuttonmodel.setProced (defaultButButTonModelmodel javax.swing.plaf.basic.basicButtonListener.Mousereleaded (BasicButtonListener.Java:236) en java.awt.component.processMouseEvent (componente.java:6041) en javax.swing.jcomponent.processMouseevent (je java.awt.component.processevent (componente.java:5806) en java.awt.container.processevent (contenedor.java:2058) en java.awt.component.dispatcheventImpl (componente.java:4413) java.awt.container.dispatcheventImpl (Container.java:2116) en java.awt.component.dispeChevent (componente.java:4243) en java.awt.lightweightdispatcher.etargetmouseevent (contenedor.Java:4322) AT java.awt.lightweightdispatcher.processmousevent (Container.java:3986) en java.awt.lightweightdispatcher.dispatchevent (contenedor.java:3916) en java.awt.container.dispatcheventImpl (contenedor.Java:2102) AT java.awt.window.dispatcheventImpl (Window.java:2440) en java.awt.component.dispatchevent (componente.java:4243) en java.awt.eventqueue.dispatchevent (eventqueue.java:599) en java.awt.eventdispatchthread.pumponeeventforfilters (eventDispatchthread.java:273) en 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.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.eventdispatchthread.run (eventDispatchthread.java:121) Causado por: java.lang.nullpointerexception en com.sun.org.apache.xml.internal.serializer.toun stream.characters (tounknownstream.Java:317) At com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:240) en com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) en com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) en 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) en 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) en 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) en 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) en 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) ... 29 más --------- java.lang.nullpointerException en com.sun.org.apache.xml.internal.serializer.toun conocido com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:226) en 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) en 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) en 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) en 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:132) en com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:94) com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.TransformIdentity (transformerImpl.java:662) en com.sun.org.apache.xalan.internal.xsltc.trax.transformerImpl.transform (transform.java:708) com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformerimpl.java:313) en la operación.addneuronid.addneuronid (addneuronid.java:273) AT operationui.addneuronidListener.Constructor2Perform (addneuronidListener.java:245) en OperationUi.addneuronidListener.ActionPerFormed (addNeuronIdListener.Java:85) en javax.swing.abstractbutton.Inspere -realizado javax.swing.abstractButton $ handler.actionperformed (abstractButton.java:2318) en javax.swing.defaultButtonmodel.fireActionPerformed (defaultButtonModel.Java:387) en javax.swing.defaultbuttonmodel.setProced (defaultButButTonModelmodel javax.swing.plaf.basic.basicButtonListener.Mousereleaded (BasicButtonListener.Java:236) en java.awt.component.processMouseEvent (componente.java:6041) en javax.swing.jcomponent.processMouseevent (je java.awt.component.processevent (componente.java:5806) en java.awt.container.processevent (contenedor.java:2058) en java.awt.component.dispatcheventImpl (componente.java:4413) java.awt.container.dispatcheventImpl (Container.java:2116) en java.awt.component.dispeChevent (componente.java:4243) en java.awt.lightweightdispatcher.etargetmouseevent (contenedor.Java:4322) AT java.awt.lightweightdispatcher.processmousevent (Container.java:3986) en java.awt.lightweightdispatcher.dispatchevent (contenedor.java:3916) en java.awt.container.dispatcheventImpl (contenedor.Java:2102) AT java.awt.window.dispatcheventImpl (Window.java:2440) en java.awt.component.dispatchevent (componente.java:4243) en java.awt.eventqueue.dispatchevent (eventqueue.java:599) en java.awt.eventdispatchthread.pumponeeventforfilters (eventDispatchthread.java:273) en 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.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.eventdispatchthread.run (eventDispatchthread.java:121)
Al principio también me sorprendió que la función de transformación solo convierta el árbol XML en la memoria en un archivo, entonces, ¿por qué ocurre el error NullPointer? Revisé Internet y no encontré a nadie para responder. Finalmente, encontré una respuesta muy útil en el blog (http://blog.awe.cz/post/english/beware-of-null-text-nodes/).
De hecho, si observa cuidadosamente la información de error, encontrará que hay algo más importante:
java.lang.nullpointerexceptionat com.sun.org.apache.xml.internal.serializer.toun conocido
Desde aquí, podemos ver que se debe a que los caracteres funcionan en el archivo com.sun.org.apache.xml.internal.serializer.toun conocido por el archivo de java tiene un error. El número de líneas es 317. Vaya al directorio de instalación de JDK, encuentre SRC y busque tounknownstream.java en el serializador de carpeta correspondiente. Encuentra la siguiente función.
/** * convierte la cadena en una matriz de caracteres y llama al método sax * caracteres (char [], int, int); * * @see ExtendedContentHandler#caracteres (string) */ public void caracteres (string chars) lanza saxException {final int long = charsength (); if (longitud> m_charsbuff.length) {m_charsbuff = new Char [longitud*2 + 1]; } charsgetchars (0, longitud, m_charsbuff, 0); this.characters (m_charsbuff, 0, longitud); } Obviamente, tenga en cuenta que int long = charshong (); Si el parámetro Chars es nulo, se producirá un error de NullPoereRexception al llamar a la función de longitud. Siguiente capa, función de análisis (línea 240) del archivo dom2to.java en com.sun.org.apache.xalan.internal.xsltc.trax:
case node.text_node: _handler.characters (node.getNodeValue ()); romper;
Aquí, puede saber por qué la función de los caracteres tiene parámetros nulos. La razón es que este nodo es el nodo de texto text_node, y no hay contenido en la llamada a este nodo (nulo). Cuando se llama a GetNodeValue, se devuelve NULL.
Ascender a la función de transformación, el contenido del nodo es nulo. En la clase Domsource, dado que es un árbol XML establecido en la memoria, definitivamente es que el contenido de uno o más elementos o nodos en este árbol XML es nulo.
Ok, se encontró la causa del problema. La solución es muy simple. Si hay elementos o nodos en Domsource que son nulos, debe ser al operar XML, o modificar contenido, agregar elementos, etc. para que el contenido sea nulo. Entonces, lo que debe hacer ahora es encontrar el código para modificar o agregar el contenido del elemento, y procesar la posibilidad de NULL. Si se detecta como nulo, no modifique el XML ni agregue este elemento. La forma más fácil es usar la declaración IF. Es decir, antes de SetNodeValue (String Str) o SetTextContent (String Str), primero verifique si el parámetro STR está vacío (if (str == null)). Si está vacío, no se llamará a esta función.
Y en mi programa, agrego contenido vacío al elemento. El código es el siguiente: Deviate yMap es un hashmap. Cuando llame, cuando esta clave principal no existe, devolverá NULL.
String neuronidStr = DeviateAndidMap.get (nameContent); // actualizar neuronidelem.getFirstChild (). SetNodeValue (neuronidstr);
Por lo tanto, puedo resolver el problema agregando la declaración IF. El código (este código está en el bucle for, así que use coninue para omitir esta modificación) de la siguiente manera:
String neuronidStr = DeviateAndidMap.get (nameContent); if (neuronidstr == null) {continuar; } // actualizar neuronidelem.getFirstChild (). SetNodeValue (neuronidstr); ¡Problema resuelto!
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!