2010-09-02 2 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, source и result не имеют значения.

+0

Кто-нибудь хочет угадать догадки? – jasonh

ответ

0

- Как насчет документа?

Ой, извините, очевидно, вторая часть следует за первым :) Какой парсер вы используете?

2

Я предполагаю, что это:

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

создал текстовый узел с нулевым значением. Глядя на код Xerces (который является реализацией JAXP по умолчанию, поставляемой с JDK 1.6 от Oracle), я не вижу нулевой проверки, сделанной во время построения текстового узла. Я подозреваю, что это позже приводит к смерти Transformer.

Либо это, либо проблема с конфигурацией JAXp.

Возможно, вы захотите установить системное свойство jaxp.debug (доступно JDK 1.6+), чтобы получить информацию отслеживания JAXP.

+0

Извините, я не ответил на это раньше, я, должно быть, пропустил уведомление о ответах на SO. Я вернусь к обновлению вопроса завтра! – jasonh

Смежные вопросы