Имеется рукописный сервис, который разбирает 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 ?