Java xml error javax.xml.transform.transformerexception: java.lang.nullpointerexception Решение:
Используйте Java, чтобы управлять XML. Во время операции XML последний шаг выполняется. При использовании трансформатора для выполнения конверсии XML возникает ошибка NullPointerException. Некоторые из кодов, у которых есть проблемы, следующие:
// преобразовать трансформаторфакторию tfactory = transformerfactory.newinstance (); Трансформатор Transformer = tfactory.newTransformer (); // в памяти XML-исходный файл domsource source = new domsource (xmldoc1); // сгенерированный файл XML -файла xmldoc2 = новый файл (outputpath+generatexmlfilename); Streamresult result = new StreamResult (xmldoc2); // конвертировать Transformer.Transform (Source, Result);
Когда я бегу к функции преобразования, я получаю следующую ошибку (она относительно длинная. Поскольку я использую Swing для разработки графического интерфейса, в вызове событий графического интерфейса возникнут некоторые ошибки):
javax.xml.transform.transformerexception: java.lang.nullPointerException на com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformerimpl.java:717) в com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformerimpl.java:313) на операции. OperationUi.addneuronidlistener.constructor2perform (addneuroNidListener.java:245) на OpractU javax.swing.abstractbutton $ handler.actionperformed (Abstractbutton.java:2318) на javax.swing.defaultbuttonmodel.firectionperformed (defaultbuttonmodel.java:387) at javax.swing.defaultbuttonmodel.sedpressed at javax.swing.plaf.basic.basicbuttonlistener.mousereleared (basicbuttonlistener.java:236) на java.awt.component.processmouseevent (component.java:6041) на javax.scomponent.processmousevent (Javon.JavaVon. java.awt.component.processevent (component.java:5806) по адресу java.awt.container.processevent (container.java:2058) по адресу java.awt.component.dispatcheventimpl (component.java:4413) java.awt.container.dispatcheventimpl (container.java:2116) по адресу java.awt.component.dispatchevent (component.java:4243) на java.awt.lightweightdispatcher.retargetmouseeverent (container.java:4322) у java.awt.lieweightDispatcher.processMouseEvent (container.java:3986) по адресу java.awt.lightdispatcher.dispatchevent (container.java:3916) на java.awt.container.dispatcheventimp java.awt.window.dispatcheventimpl (window.java:2440) по адресу java.awt.component.dispatchevent (component.java:4243) на java.awt.eventqueue.dispatchevent (EventQueue.java:599) в java.awt.eventdispatchthread.pumponeeventforfilters (eventdispatchthread.java:273) на java.awt.eventdispatchthread.pumpeventsforfilter (eventdispatchthread.java:183) java.awt.eventdispatchthread.pumpeventsforhierarchy (eventdispatchthread.java:173) на java.awt.eventdispatchthread.pumpevents (eventdispatchthread.java:168) at java.awt.eventdispatchthread.pumpevent java.awt.eventdispatchthread.run (eventdispatchthread.java:121), вызванная: java.lang.nullpointerexception на com.sun.org.apache.xml.internal.serializ com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:240) на com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (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.parse (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.parse (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.parse (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.parse (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.transforminidity (transformerimpl.java:662) com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformerimpl.java:708) ... 29 еще --------- java.lang.nullPointerException в sun.org.apache.xml.internal.serializer.tounkstream.characters (tounknowstream.java:317) на com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (dom2to.java:240) на com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.parse (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.parse (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.parse (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.parse (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.parse (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.transformidentity (Transformerimpl.java:662) на com.sun.org.apache.xalan.internal.xsltc. com.sun.org.apache.xalan.internal.xsltc.trax.transformerimpl.transform (transformerimpl.java:313) на операции. OperationUi.addneuronidlistener.constructor2perform (addneuroNidListener.java:245) на OpractU javax.swing.abstractbutton $ handler.actionperformed (Abstractbutton.java:2318) на javax.swing.defaultbuttonmodel.firectionperformed (defaultbuttonmodel.java:387) at javax.swing.defaultbuttonmodel.sedpressed at javax.swing.plaf.basic.basicbuttonlistener.mousereleared (basicbuttonlistener.java:236) на java.awt.component.processmouseevent (component.java:6041) на javax.scomponent.processmousevent (Javon.JavaVon. java.awt.component.processevent (component.java:5806) по адресу java.awt.container.processevent (container.java:2058) по адресу java.awt.component.dispatcheventimpl (component.java:4413) java.awt.container.dispatcheventimpl (container.java:2116) по адресу java.awt.component.dispatchevent (component.java:4243) на java.awt.lightweightdispatcher.retargetmouseeverent (container.java:4322) у java.awt.lieweightDispatcher.processMouseEvent (container.java:3986) по адресу java.awt.lightdispatcher.dispatchevent (container.java:3916) на java.awt.container.dispatcheventimp java.awt.window.dispatcheventimpl (window.java:2440) по адресу java.awt.component.dispatchevent (component.java:4243) на java.awt.eventqueue.dispatchevent (EventQueue.java:599) в java.awt.eventdispatchthread.pumponeeventforfilters (eventdispatchthread.java:273) на java.awt.eventdispatchthread.pumpeventsforfilter (eventdispatchthread.java:183) java.awt.eventdispatchthread.pumpeventsforhierarchy (eventdispatchthread.java:173) на java.awt.eventdispatchthread.pumpevents (eventdispatchthread.java:168) at java.awt.eventdispatchthread.pumpevent java.awt.eventdispatchthread.run (eventdispatchthread.java:121)
Сначала я также был удивлен, что функция преобразования просто преобразует дерево XML в памяти в файл, так почему же возникает ошибка Nullpointer? Я проверил Интернет и не нашел никого, чтобы ответить. Наконец, я нашел очень полезный ответ в блоге (http://blog.awe.cz/post/english/beware-of-null-text-nodes/).
На самом деле, если вы внимательно посмотрите на информацию об ошибках, вы обнаружите, что есть что -то более важное:
java.lang.nullpointerExceptionat com.sun.org.apache.xml.internal.serializer.tounkstream.characters (tounknownstream.java:317) на com.sun.org.apache.xalan.internal.xsltc.trax.dom2to.dom.dom.dom2to.parse (dom2to.java.240).
Отсюда мы видим, что это связано с тем, что символы функционируют в com.sun.org.apache.xml.internal.serializer.tounkstream.java. Количество строк составляет 317. Перейдите в каталог установки JDK, найдите SRC и найдите TounkingStream.java в соответствующем сериализаторе папки. Найдите следующую функцию.
/** * Преобразует строку в массив символов и вызывает символы Sax * (char [], int, int); * * @see extendedContenthAndler#символы (строка) */ public void символы (String chars) бросает SaxException {final int length = chars.length (); if (длина> m_charsbuff.length) {m_charsbuff = new char [длина*2 + 1]; } chars.getChars (0, длина, M_CHARSBUFF, 0); this.characters (m_charsbuff, 0, длина); } Очевидно, обратите внимание, что int length = chars.length (); Если chars параметров является нулевым, при вызове функции длины возникнет ошибка Nullpoiterexception. Следующий слой, функция Parse (строка 240) файла dom2to.java под com.sun.org.apache.xalan.internal.xsltc.trax:
case node.text_node: _handler.characters (node.getnodevalue ()); перерыв;
Здесь вы можете знать, почему функция символов имеет нулевые параметры. Причина в том, что этот узел является текстовым узлом Text_Node, и в вызове этого узла нет содержимого (NULL). Когда называется getNodevalue, нулевой возвращается.
Поднимайтесь на функцию преобразования, содержимое узла является нулевым. В классе Domsource, поскольку это XML -дерево, установленное в памяти, определенно то, что содержание одного или нескольких элементов или узлов в этом дереве XML NULL.
Хорошо, причина проблемы была найдена. Решение очень простое. Если в домесурсе есть элементы или узлы, которые являются нулевыми, это должно быть при использовании XML или изменении контента, добавление элементов и т. Д. Чтобы сделать контент нулевым. Итак, что вам нужно сделать сейчас, так это найти код для изменения или добавления содержимого элемента, а также обработать возможность NULL. Если он обнаружен как нулевый, не изменяйте XML и не добавляйте этот элемент. Самый простой способ - использовать оператор, если. То есть, прежде чем SetNoDevalue (String Str) или SetTextContent (String Str) сначала проверьте, является ли параметр str пустым (if (if == null)). Если он пуст, эта функция не будет вызвана.
И в моей программе я добавляю пустой контент в элемент. Код выглядит следующим образом: DeviceandDidmap - это хэшмап. Когда он вызовет, когда этого первичного ключа не существует, он вернет NULL.
String neuroNidStr = deviceAndidmap.get (nameContent); // Обновление NeuRonideLem.getFirstChild (). SetNoDevalue (NeuroNIDSTR);
Поэтому я могу решить проблему, добавив оператор IF. Код (этот код находится в цикле для цикла, поэтому используйте Coninue, чтобы пропустить эту модификацию) следующим образом:
String neuroNidStr = deviceAndidmap.get (nameContent); if (NeuroNidStr == null) {продолжить; } // Обновление NeuRonideLem.getFirstChild (). SetNoDevalue (NeuRonidStr); Проблема решена!
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!