SAAJ
От: VFL Россия  
Дата: 28.11.06 14:44
Оценка:
Имеется рукописный сервис, который разбирает SOAP message следующим образом:

        SOAPBody body = envelope.getBody();
        Iterator it=body.getChildElements();      
        if(it.hasNext())
        {
            SOAPElement parameters=(SOAPElement) it.next();
               it=parameters.getChildElements();
            if(it.hasNext())
            {
                 ...


все хорошо пока SOAPMessage был собран аналогично средствами SAAJ.
Однако, если он содержит символы CR/LF, они распознаются как Text Node
и на строке SOAPElement parameters=(SOAPElement) it.next(); выпадает ClassCastException.

На данный момент написан хак, который позволяет обойти это безобразие:

{
        ...
        SOAPBody body = envelope.getBody();
        Iterator it=body.getChildElements();      
        if(it.hasNext())
        {
            Object next=it.next();
            SOAPElement parameters=ParseAsText(it,next);
            ...
        }
        ...
}

private SOAPElement ParseAsText(Iterator it, Object next)
{
        while(next instanceof Text) next=it.next();
        return (SOAPElement) next;
}



Сомневаюсь, что это оптимальное решение. Соответственно, вопрос:
как эта проблема решается средствами DOM/SAAJ ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.