java xml出错,Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException...

Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException解决办法:

利用Java操作XML,在操作XML过程中,执行到最后一步,在利用Transformer进行XML转换时出现NullPointerException错误,出问题的部分代码如下:

//转换

TransformerFactory tFactory =TransformerFactory.newInstance();

Transformer transformer = tFactory.newTransformer();

//需要转换的内存中XML源文件

DOMSource source = new DOMSource(xmlDoc1);

//生成的xml文件

File xmlDoc2 = new File(outPutPath+generateXmlFileName);

StreamResult result = new StreamResult(xmlDoc2);

//转换

transformer.transform(source, result);

运行到transform函数时出现以下错误(比较长,由于我是利用SWING设计图形界面的,所以会有一些图形界面事件调用的错误):

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)

一开始我也感到奇怪,transform函数只是把在内存中的XML树转换成文件,为何会出现nullPointer错误呢。上网查了一下,没什么人找到答案,最后在(http://blog.awe.cz/post/english/beware-of-null-text-nodes/)这个blog中找到相当有用的答案.

其实认真看看出错的信息,会发现有个信息比较重要:

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)

从这里可以看出是由于com.sun.org.apache.xml.internal.serializer.ToUnknownStream.java文件中的characters函数出错,所在行数是317,到jdk安装目录,找到src,到相应的文件夹serializer中找到ToUnknownStream.java,找到以下函数

/**

* 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);

}

很明显,注意int length = chars.length(); 如果参数chars是null的话,调用length函数就会出现nullpoiterException错误。再上一层,com.sun.org.apache.xalan.internal.xsltc.trax下的DOM2TO.java文件的parse函数(240行):

case Node.TEXT_NODE:

_handler.characters(node.getNodeValue());

break;

在这里,就可以知道characters函数为什么出现null参数了。原因是此结点是文本结点TEXT_NODE,而调用本结点中没有内容(null),当调用getNodeValue时,返回null.

上升到transform函数,出现结点内容为null,那在DOMSource类中,由于它是在内存中建立起来的XML树,所以肯定是这个XML树中的有一个或多个元素或结点的内容为null。

OK,问题原因找到。解决办法很简单,DOMSource中有元素或结点为null,那一定是在操作XML时,或者是修改内容,添加元素等等操作,使内容变为null。所以现在需要做的就是找到修改或添加元素内容的代码,把有可能出现null的情况进行处理,如果检测到为null,则不修改XML或不添加此元素。最简单的方法就是用if语句。即setNodeValue(String str)或setTextContent(String str)之前,先查看参数str是否为空(if(str == null)),如果空则不调用此函数。

而在我的程序中,确实我是把空的内容加入到元素中。代码如下:deviceAndIDMap是一个HashMap,当它调用get时,不存在此主键时,会返回null.

String neuronIdStr = deviceAndIDMap.get(nameContent);

//更新

neuronIdElem.getFirstChild().setNodeValue(neuronIdStr);

因此我加一下if语句,就可以解决问题了,代码(此代码是在for循环中的,因此用coninue来跳过本次的修改)如下:

String neuronIdStr = deviceAndIDMap.get(nameContent);

if(neuronIdStr == null)

{

continue;

}

//更新

neuronIdElem.getFirstChild().setNodeValue(neuronIdStr);

问题解决!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu磁盘扩容及启动问题整理

参考:Ubuntu磁盘扩容及启动问题整理 作者:一只青木呀 发布时间: 2020-12-08 10:42:19 网址:https://blog.csdn.net/weixin_45309916/article/details/110850358 也可参照正点原子的:Ubuntu磁盘空间不足?一招…

函数求值需要运行所有线程_精读《深度学习 - 函数式之美》

1 引言函数式语言在深度学习领域应用很广泛,因为函数式与深度学习模型的契合度很高,The Beauty of Functional Languages in Deep Learning — Clojure and Haskell 就很好的诠释了这个道理。通过这篇文章可以加深我们对深度学习与函数式编程的理解。2…

IOS(常用移动终端设备) push实现通知中心

参考文章: http://blog.csdn.net/zhuqilin0/article/details/6527113 http://www.dozer.cc/2013/03/push-notifications-server-side-implement/ http://blog.sina.com.cn/s/blog_71ce775e0101b43e.html PushSharp:https://github.com/Redth/PushShar…

Ubuntu下无法看到共享文件夹的解决办法

参考:Ubuntu下无法看到共享文件夹的解决办法 作者:一只青木呀 发布时间:2020-08-07 10:09:04 网址:https://blog.csdn.net/weixin_45309916/article/details/107856157 今天早上起来突然发现共享文件夹的查看不到了,找…

MySQL提供了以下三种方法用于获取数据库对象的元数据

MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用SHOW语句获取元数据 MySQL用show语句获取元数据是最常用的方法&a…

laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档

发行版本说明由 学院君 创建于5年前, 最后更新于 11个月前版本号 #219641 views23 likes0 collects支持政策LTS版本,比如Laravel 5.1,将会提供两年的bug修复和三年的安全修复支持。这些版本将会提供最长时间的支持和维护。对于其他通用版本,只…

NYOJ-522 Interval

Interval 时间限制&#xff1a;2000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述There are n(1 < n < 100000) intervals [ai, bi] and m(1 < m < 100000) queries, -100000 < ai < bi < 100000 are integers.Each query contains an inte…

实现图书增删的代码_不仅仅是图书信息管理系统

点击蓝字 关注我们不仅仅是图书信息管理系统基于双链表&#xff0c;采用面向对象编程方法制作的图书管理系统❞效果演示root用户&#xff1a;账号&#xff1a;0&#xff0c;密码&#xff1a;0普通用户&#xff1a;账号&#xff1a;1001&#xff0c;密码&#xff1a;666666图书信…

HDU1846 - Brave Game【巴什博弈】

十年前读大学的时候&#xff0c;中国每年都要从国外引进一些电影大片&#xff0c;其中有一部电影就叫《勇敢者的游戏》&#xff08;英文名称&#xff1a;Zathura&#xff09;&#xff0c;一直到现在&#xff0c;我依然对于电影中的部分电脑特技印象深刻。 今天&#xff0c;大家…

Ubuntu18.04换源更新国内源

参考&#xff1a;Ubuntu18.04更新国内源 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-05 10:24:11 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107808268 树莓派换源博文&#xff1a;https://blog.csdn.net/zhuguanlin121/article/d…

php中解析数组,在PHP中解析多维数组

您应该在将数据解析为Smarty之前准备好数据。你可以这样做&#xff1a;$result array(array(name > Hockey Team 1, category_id > 1),array(name > Hockey Team 2, category_id > 2),array(name > Hockey Team 3, category_id > 3),array(name > Footba…

了解jQuery并掌握jQuery对象和DOM对象的区别

jQuery的优势&#xff1a; 开源--开放源代码 轻量级 强大的选择器 出色的DOM操作(对DOM元素的一个增删改查) 完善的Ajax&#xff0c;出色的浏览器兼容性&#xff0c;丰富的插件支持&#xff0c;完善的文档&#xff08;说明书&#xff09; 链式操作方式&#xff0c; 写得少&…

linux下复制

复制文件 cp - i file tofile 复制目录 cp - r dic todic转载于:https://www.cnblogs.com/Hero-Qiang/archive/2013/03/20/2971579.html

rh php56 php,在全球范围内提供RHSCL PHP的最佳方法

我使用以下网址安装了RHSCL 2&#xff1a;使用RedHat订阅管理器.然后我运行yum删除php *,然后是yum install rh-php56一切顺利,除非现在找不到PHP.然后我运行find / -name php并在以下目录中找到rh-php56&#xff1a;/var/opt/rh/rh-php56/lib/php/opt/rh/rh-php56/register.co…

Vmware15的安装(ps解决:重装Vmware出现无法安装服务Vmware Authorization Service)

参考&#xff1a;Linux之Vmware的安装 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-09 22:13:14 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107238658 目录1.前言2.打开Vmware虚拟机安装包安装解决&#xff1a;重装Vmware出现无法…

python多线程模块_python 多线程模块参考

threading.active_count() 返回当前处于 active 状态的线程的数目 threading.current_thread() 返回调用者当前的 Thread 对象 threading.get_ident() 返回当前线程的“thread identifier”属性&#xff08;3.3新增&#xff09; threading.enumerate() 返回当前处于 active 状态…

谈谈即时通讯开发平台

由于即时通讯系统的复杂性和对服务器稳定性的很高要求&#xff0c;一般即时通讯系统开发至少需要1年左右的时间&#xff0c;而这还只是测试版&#xff0c;离"稳定"还有一定距离&#xff0c;而这时匆匆上马的不稳定的系统会让你失去用户&#xff0c;您也不可能召集上万…

内存,RAM(DDR),ROM(EEPROM、flash),存储卡(emmc,sd,tf)以及Cache的区别与联系

参考&#xff1a;内存&#xff0c;RAM&#xff0c;ROM&#xff0c;Cache的区别与联系 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-09-26 09:55:40 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108808106 参考&#xff1a;EEPROM和flash…

PHP数据库可视化分析工具,5个MySQL GUI工具推荐,帮助你进行数据库管理

MySQL的数据库管理工具非常多&#xff0c;有哪些优秀的GUI工具可以帮助提高工作效率?不妨看一看这5个MySQL GUI工具。1、Navicat for MySQLNavicat for MySQL是数据库管理工具&#xff0c;与MySQL&#xff0c;MariaDB和云数据库兼容&#xff0c;是目前非常受欢迎的数据库前端用…

idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas

本文适合有 Java 基础知识的人群。本文作者&#xff1a;HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》系列&#xff0c;今天给大家带来一款阿里开源的 Java 诊断利器 Arthas 项目—— Arthas项目源码地址&#xff1a;https://github.com/alibaba/arthas一、简介 为什么要…