org.apache.axiom.om.impl.llom.OMTextImpl не может быть приведен к org.apache.axiom.om.OMElement

1

Я пытаюсь сделать следующее.

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>

Благодарю.

  • 0
    опубликуйте образец ввода xml
  • 0
    Ты это пробовал? OMElement element = (OMElement)items.next();
Показать ещё 2 комментария
Теги:
axiom

2 ответа

4
Лучший ответ

Используйте getChildElements вместо getChildren.

  • 0
    Большое спасибо. Такой простой, но точный ответ. Оно работает! :)
2

Не каждый узел является элементом. Вы должны бросать детей в OMNode и проверять, являются ли они элементами, Whitespaces подсчитываются как текстовые узлы

  • 0
    Я думаю, что вы сказали, правильно. Все дочерние узлы не рассматривались как элементы, которые вызвали проблему. Использование предложения @ Andreas, которое гарантирует, что будут взяты только элементы, решает проблему. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню