2010-09-02 48 views
4

我已經建立了使用JAXP這樣的文件:變壓器的變換會導致致命的錯誤,爲什麼?

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document document = builder.newDocument(); 
Element rootElement = document.createElement("Root"); 

for (MyObject o : myCollection) { 
    Element entry = document.createElement("Entry"); 
    Element entryItem = document.createElement("EntryItem"); 
    entryItem.appendChild(document.createTextNode(o.getProperty())); 

    entry.appendChild(entryItem); 
    rootElement.appendChild(entry); 
} 

document.appendChild(rootElement); 

現在,當我嘗試輸出的XML像這樣的文件:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
DOMSource source = new DOMSource(document); 
StreamResult result = new StreamResult(new StringWriter()); 
transformer.transform(source, result); 
System.out.println(result.getWriter().toString()); 

它分崩離析上與transformer.transform線出現以下錯誤:

FATAL ERROR: 'java.lang.NullPointerException' 
     :null 

我該如何去調試呢?我已確認transformer,sourceresult不爲空。

+0

任何人都想冒險猜測? – jasonh 2010-09-03 16:36:21

回答

0

- 如何查看文檔?

抱歉抱歉,顯然第二部分跟在第一個:)你使用哪個解析器?

2

我猜,這:

entryItem.appendChild(document.createTextNode(o.getProperty())); 

創建了一個空值的文本節點。查看Xerces的代碼(這是Oracle JDK 1.6的默認JAXP實現),我發現在構建文本節點時沒有進行空驗證。我懷疑那會在以後造成Transformer死亡。

要麼是這樣,要麼是有一些JAXp配置問題。

您可能希望將jaxp.debug系統屬性(可用的JDK 1.6+)設置爲獲取某些JAXP跟蹤信息。

+0

對不起,我沒有及時回覆,我一定錯過了SO上的回覆通知。我會回到明天更新這個問題! – jasonh 2010-10-27 23:54:06

相關問題