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

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

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
主站蜘蛛池模板: 国产成人亚洲精品一区二区在线看 | 欧美精品99 | haodiaose在线精品免费观看 | 黄漫免费观看 | 逼毛片| 成人啪啪漫画羞羞漫画www网站 | 91啦在线视频| 黑人与欧洲女子性大战 | 激情亚洲天堂 | 日本十大顶级绝伦推理片 | 久久免费看少妇高潮A片特爽 | 91免费播放人人爽人人快乐 | 国产免费好大好硬视频 | 男女男精品视频网站 | 国产91精品在线观看 | 99精品观看 | 日本xnxnxnxnxn护士 | 无码国产成人777爽死在线观看 | 日本成年片高清在线观看 | 国产成人手机在线好好热 | 国产激情一区二区三区成人91 | 情侣奴伺候女王第2部分小说 | 秘书小说阿蛮 | 乖女的嫩奶水h文孕妇 | 欧美日韩中文字幕在线视频 | 国产精品第四页 | 国产香蕉97碰碰久久人人 | 国产一区二区三区毛片 | 特级淫片欧美高清视频蜜桃 | 亚洲国产日韩成人综合天堂 | 精品久久久久久综合网 | 日韩精品一区二区三区老鸭窝 | 午夜在线播放免费人成无 | 草草精品视频 | wankz视频 | 成人久久18免费网站入口 | 99精品偷自拍 | 1024在线视频精品免费 | 91精品啪在线观看国产老湿机 | 高h全肉动漫在线观看免费 高h辣h双处全是肉军婚 | 青青精品视频 |