Java xml error javax.xml.transform.TransformerException: java.lang.NullPointerException

  • 2020-05-19 04:47:32
  • OfStack

Java xml error: javax.xml.transform.TransformerException: java.lang.NullPointerException solution:

Java is used to operate XML. In the process of operating XML, the last step is performed. NullPointerException error occurs when Transformer is used to convert XML.


 // conversion  
TransformerFactory tFactory =TransformerFactory.newInstance(); 
Transformer transformer = tFactory.newTransformer(); 
// Need to convert in memory XML The source file  
DOMSource source = new DOMSource(xmlDoc1); 
// The generated xml file  
File xmlDoc2 = new File(outPutPath+generateXmlFileName); 
StreamResult result = new StreamResult(xmlDoc2); 
// conversion  
transformer.transform(source, result); 

The following error occurs when running the transform function (it is long, because I designed the graphical interface with SWING, so there will be some graphical interface event call errors) :


javax.xml.transform.TransformerException: java.lang.NullPointerException
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(TransformerImpl.java:717)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(TransformerImpl.java:313)
    at operation.AddNeuronID.addNeuronId(AddNeuronID.java:273)
    at operationUI.AddNeuronIDListener.constructor2Perform(AddNeuronIDListen
er.java:245)
    at operationUI.AddNeuronIDListener.actionPerformed(AddNeuronIDListener.j
ava:85)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:19
95)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
a:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242
)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6041)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322
)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    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(EventDispatchThre
ad.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.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)
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.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.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java
:226)
    at 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)
    at 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)
    at 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)
    at 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)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
mIdentity(TransformerImpl.java:662)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(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.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.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java
:226)
    at 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)
    at 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)
    at 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)
    at 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)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
mIdentity(TransformerImpl.java:662)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(TransformerImpl.java:708)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transfor
m(TransformerImpl.java:313)
    at operation.AddNeuronID.addNeuronId(AddNeuronID.java:273)
    at operationUI.AddNeuronIDListener.constructor2Perform(AddNeuronIDListen
er.java:245)
    at operationUI.AddNeuronIDListener.actionPerformed(AddNeuronIDListener.j
ava:85)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:19
95)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
a:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242
)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6041)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322
)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    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(EventDispatchThre
ad.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.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)

At first, I was also surprised that the transform function only converted the XML tree into a file in memory. Why did the nullPointer error occur? Check online 1, few people find the answer, finally in (http: / / blog. awe. cz post/english/beware - of - null - text - nodes /) found in the blog quite a useful answer.

In fact, if you look carefully at the error message, you will find that one message is more important:


java.lang.NullPointerException
at 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:240)

Can be seen from here is as com. sun. org. apache. xml. internal. serializer. ToUnknownStream. java file characters error function, and row number is 317, the jdk installation directory, find src, to found the corresponding folder serializer ToUnknownStream. java, find the following function


/** 
  * Converts the String to a character array and calls the SAX method 
  * characters(char[],int,int); 
  * 
  * @see ExtendedContentHandler#characters(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);  
  }  

Obviously, notice that int length = chars.length (); If the parameter chars is null, an nullpoiterException error occurs when calling the length function. To 1 layer, com. sun. org. apache. xalan. internal. xsltc. trax DOM2TO. Under java file parse function (240) :


case Node.TEXT_NODE: 
    _handler.characters(node.getNodeValue()); 
    break; 

Here you can see why the characters function takes the null parameter. The reason is that this node is a text node TEXT_NODE, and there is no content in the node called (null). When getNodeValue is called, null is returned.

When you go up to the transform function, the content of the node is null. In the DOMSource class, since it is an XML tree established in memory, it must be that one or more elements or nodes in the XML tree are null.

OK, the cause of the problem is found. The solution is very simple, DOMSource has elements or nodes of null, and that 1 must be operating on XML, or modifying the content, adding elements, etc., to make the content null. So what we need to do now is to find the code that modifies or adds element content, and deal with the possible occurrence of null. If null is detected, we will not modify XML or add this element. The easiest way is to use the if statement. That is, before setNodeValue(String str) or setTextContent(String str), check whether the parameter str is empty (if(str == null), and if it is empty, this function is not called.

In my program, I do add empty content to the element. The code is as follows: deviceAndIDMap is an HashMap, and when it calls get, it returns null when this primary key does not exist.


String neuronIdStr = deviceAndIDMap.get(nameContent); 
// update  
neuronIdElem.getFirstChild().setNodeValue(neuronIdStr); 

So I add 1 to the if statement to solve the problem. The code (this code is in the for loop, so coninue is used to skip this modification) is as follows:


String neuronIdStr = deviceAndIDMap.get(nameContent); 
if(neuronIdStr == null) 
{ 
   continue; 
} 
// update  
neuronIdElem.getFirstChild().setNodeValue(neuronIdStr); 
               

Problem solved!

Thank you for reading, I hope to help you, thank you for your support of this site!


Related articles: