变形金刚的变形会导致致命错误,为什么?

时间:2010-09-02 23:56:02

标签: java xml jaxp

我使用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

我该如何调试?我确保transformersourceresult不为空。

2 个答案:

答案 0 :(得分:2)

我猜这个:

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

创建了一个空值的文本节点。查看Xerces的代码(这是Oracle JDK 1.6附带的默认JAXP实现),我发现在构造文本节点时没有完成空验证。我怀疑这会导致Transformer死亡。

要不然,或者存在一些JAXp配置问题。

您可能希望设置jaxp.debug系统属性(可用JDK 1.6+)以获取一些JAXP跟踪信息。

答案 1 :(得分:0)

- 文件怎么样?

哎呀对不起,显然第二部分是第一部分:)你使用哪种解析器?