一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - Java xml出現錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException

Java xml出現錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException

2020-07-08 14:18masson32 JAVA教程

這篇文章主要介紹了Java xml出現錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException的相關資料,需要的朋友可以參考下

Java xml出現錯誤 javax.xml.transform.TransformerException: java.lang.NullPointerException解決辦法:

利用Java操作XML,在操作XML過程中,執行到最后一步,在利用Transformer進行XML轉換時出現NullPointerException錯誤,出問題的部分代碼如下:

?
1
2
3
4
5
6
7
8
9
10
//轉換
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設計圖形界面的,所以會有一些圖形界面事件調用的錯誤):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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中找到相當有用的答案.

      其實認真看看出錯的信息,會發現有個信息比較重要:

?
1
2
3
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,找到以下函數

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
  * 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行):

?
1
2
3
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.

?
1
2
3
String neuronIdStr = deviceAndIDMap.get(nameContent);
//更新
neuronIdElem.getFirstChild().setNodeValue(neuronIdStr);

    因此我加一下if語句,就可以解決問題了,代碼(此代碼是在for循環中的,因此用coninue來跳過本次的修改)如下:

?
1
2
3
4
5
6
7
8
String neuronIdStr = deviceAndIDMap.get(nameContent);
if(neuronIdStr == null)
{
   continue;
}
//更新
neuronIdElem.getFirstChild().setNodeValue(neuronIdStr);
              

    問題解決!

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:http://blog.csdn.net/masson32/article/details/4517643

延伸 · 閱讀

精彩推薦
  • JAVA教程java和matlab畫多邊形閉合折線圖示例講解

    java和matlab畫多邊形閉合折線圖示例講解

    由于要將“哈密頓回路問題(TSP)”的求解中間結果表示出來,查了一下使用程序畫多邊形圖形。現在在總結一下,這個圖是“由給定節點首尾相連的”閉合...

    java教程網4392019-11-10
  • JAVA教程java中url漢字編碼互相轉換實例

    java中url漢字編碼互相轉換實例

    這篇文章介紹了java中url漢字編碼互相轉換實例,有需要的朋友可以參考一下 ...

    java教程網1682019-10-17
  • JAVA教程linux下執行java程序的sh腳本分享

    linux下執行java程序的sh腳本分享

    這篇文章主要介紹了linux下執行java程序的sh腳本,僅供參考,但是設置的時候環境變量是最重要的,我就是環境變量一直不對,總是按網上查到的來,不明...

    hebedich1472019-11-29
  • JAVA教程Hibernate的Annotation版Hello world實例

    Hibernate的Annotation版Hello world實例

    這篇文章主要介紹了Hibernate的Annotation版Hello world實現方法,詳細分析了Annotation的具體使用步驟與Hello world實現方法,需要的朋友可以參考下 ...

    胡笑語3942020-04-11
  • JAVA教程java設計模式之簡單工廠模式簡述

    java設計模式之簡單工廠模式簡述

    這篇文章主要為大家詳細介紹了java設計模式之簡單工廠模式,簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類的實例...

    廖為鵬2492020-06-04
  • JAVA教程Java 中的注解詳解及示例代碼

    Java 中的注解詳解及示例代碼

    本文主要介紹Java 中的注解,這里提供了詳細的相關資料,及示例代碼,幫助大家學習理解,有興趣的小伙伴可以參考下 ...

    anquye2001462020-06-09
  • JAVA教程java異步方式實現登錄

    java異步方式實現登錄

    這篇文章主要為大家詳細介紹了java異步方式實現登錄的相關資料,感興趣的朋友可以參考一下 ...

    舊夢vs逆愛2732020-05-04
  • JAVA教程Java跳出多重嵌套循環代碼實例

    Java跳出多重嵌套循環代碼實例

    這篇文章主要介紹了Java跳出多重嵌套循環,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小...

    程序猿||攻城獅1682019-06-19
主站蜘蛛池模板: 91影视永久福利免费观看 | 午夜欧美精品久久久久久久 | 精品国产91久久久久久久a | 男生和老师一起差差差 | 桃色综合网 | 摄像头东北对白清晰 | 国产特黄a级在线视频 | 国产亚洲精品九九久在线观看 | 男女姓交大视频免费观看 | 亚洲成人福利网站 | 视频一区二区 村上凉子 | 调教人妖| 骚虎tv| 九九精品视频在线观看 | 色先锋影音资源 | 国产男女爱视频在线观看 | 欧美三级不卡在线观线看高清 | 亚洲AV 无码AV 中文字幕 | 色鬼网| 国产自拍啪啪 | 亚洲2017天堂色无码 | 国产高清不卡码一区二区三区 | 精彩国产萝视频在线 | 国产真实伦对白在线播放 | 国产露脸对白刺激3p在线 | 欧美日韩亚洲另类人人澡 | 免费精品视频在线 | 国产高清露脸学生在线观看 | 大陆国产vs国产对白 | 丁香六月婷婷激情 | 国产在线播放91 | 久久精品国产久精国产果冻传媒 | 特黄特级高清免费视频毛片 | 日本福利视频一区 | 国产精品亚洲一区二区 | 交欧美 | 日日本老女人 | 日韩欧美一区二区在线 | 天天狠天天透天干天天怕处 | 9l国产精品久久久久麻豆 | 欧美va在线 |