Я пытаюсь сделать следующее.
OMElement soapEnvelope = new StAXOMBuilder(soapEnvelopXMLFilePath).getDocumentElement();
OMElement firstElement = soapEnvelope.getFirstElement().getFirstElement();
Затем я повторяю дочерние элементы первого элемента как это.
Iterator<OMElement> items = firstElement.getChildren();
while (items.hasNext()) {
OMElement element = items.next();
// ....do some processing here...
}
Но когда я пытаюсь выполнить этот следующий класс, возникает исключение класса.
java.lang.ClassCastException: org.apache.axiom.om.impl.llom.OMTextImpl cannot be cast to org.apache.axiom.om.OMElement
Ошибка возникает, когда items.next()
назначается объекту OMElement
.
Любая идея, почему я получаю это исключение? Я не могу понять какое-либо несоответствие.
Это содержимое моего XML файла образца.
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<ns:MONITOR xmlns:ns="http://try.example.com">
<ns:HOSTS>
<ns:HOST NAME="node1">
<ns:METRIC NAME="metric1" VALUE="1123"/>
<ns:METRIC NAME="metric3" VALUE="456"/>
<ns:METRIC NAME="metric2" VALUE="789"/>
</ns:HOST>
<ns:HOST NAME="node2">
<ns:METRIC NAME="metric1" VALUE="147"/>
<ns:METRIC NAME="metric3" VALUE="258"/>
<ns:METRIC NAME="metric2" VALUE="369"/>
</ns:HOST>
</ns:HOSTS>
<ns:HOSTS>
<ns:HOST NAME="node3">
<ns:METRIC NAME="metric1" VALUE="236"/>
<ns:METRIC NAME="metric3" VALUE="159"/>
<ns:METRIC NAME="metric2" VALUE="478"/>
</ns:HOST>
</ns:HOSTS>
</ns:MONITOR>
</soapenv:Body>
Благодарю.
Используйте getChildElements
вместо getChildren
.
Не каждый узел является элементом. Вы должны бросать детей в OMNode и проверять, являются ли они элементами, Whitespaces подсчитываются как текстовые узлы
OMElement element = (OMElement)items.next();