Преобразование трансформатора вызывает фатальную ошибку, почему? - PullRequest
4 голосов
/ 03 сентября 2010

Я создал документ, используя 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 не равны нулю.

Ответы [ 2 ]

2 голосов
/ 23 октября 2010

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

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

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

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

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

0 голосов
/ 09 октября 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...