В итоге проблема заключалась в том, что Bea / Oracle вместо реализации стандартного интерфейса DOM использует собственный закрытый API.Во время отладки моего кода, пытаясь понять, куда вставить другой анализатор XML, я заметил, что текстовые данные узла действительно извлекаются.Он был в защищенной переменной-члене String data
в экземпляре класса weblogic.xml.domimpl.TextImpl
.Так как источник не опубликован, я не мог просто посмотреть в классе, чтобы увидеть, как к этой переменной обращались, поэтому я просмотрел имена методов для чего-то, что выглядело близко.Я нашел метод с именем getData()
.
Вот что моя реализация пыталась сделать раньше (что может или не может быть правильным на основе интерфейса DOM):
public T extractData(Source source) throws IOException {
Node rootNode = ((DOMSource)source)
NodeList nodes = rootNode.getChildElements();
for (int i = 0; i < nodes.getLength(); i++) {
String nodeText = nodes.item(i).getTextContent();
/* Remainder of loop and method elided */
}
}
Что сейчасРабота:
public T extractData(Source source) throws IOException {
Node rootNode = ((DOMSource)source)
NodeList nodes = rootNode.getChildElements();
for (int i = 0; i < nodes.getLength(); i++) {
TextImpl nodeTextImpl = (TextImpl) nodes.item(i).getFirstChild();
String nodeText = nodeTextImpl.getData();
/* Remainder of loop and method elided */
}
}
Я был бы признателен за комментарии от тех, кто более знаком с API Java DOM, особенно комментарии, которые исправят мое использование get*()
методов, доступных в org.w3c.dom.Node
.