Я бы порекомендовал распечатать необработанный текст ответа:
println "XML was ${resp.data.text}"
Если предположить, что напечатанная строка XML соответствует вашим ожиданиям (хотя это и странно, так как нет узлов Envelope или Body), тогда вам следуетвозможность удалить Territories из ваших ссылок на XML.При синтаксическом анализе с помощью XmlSlurper корневым узлом является GPathResult.
assert "Territories" == xml.name()
println "State were ${xml.State.text()}"
println "City were ${xml.Territory.City.text()}"
println "County were ${xml.Territory.County.text()}"
Также просто хотел указать, что тип носителя SOAP 1.2 - это «application / soap + xml».
ОБНОВЛЕНИЕ:
Таким образом, похоже, что XmlSlurper, когда переменная выводится на печать, отбрасывает SOAP и оценивает самый внутренний узел (), фактически не переходя к этому узлу,Это ожидаемое поведение?
Да, метод toString () для GPathResult просто печатает все текстовые узлы, а не фактические элементы или атрибуты.С HTTPBuilder вы можете распечатать необработанный текст ответа, используя:
println resp.data.text
Мне не удалось найти более совершенный и современный вызов SOAP и выполнить анализ с использованием httpBuilder, поэтому я предположил, что XML будетправильный тип контента.Но, похоже, мне просто нужно принять ТЕКСТ и разобрать тело самому, что кажется хромым.Есть ли лучший способ обработки ответов SOAP с помощью httpBuilder?
ContentType.XML в порядке, проблема заключается в том, как ответ SOAP позволяетвеб-сервис возвращается.Веб-служба отправляет обратно результаты Territories в виде закодированной строки в элементе GetTerritoriesResult , а не как часть фактического XML-ответаэтот HTTPBuilder автоматически анализирует вас (это не проблема с тем, как HTTPBuilder обрабатывает его).Поскольку данные, которые вам действительно нужны, находятся в этой зашифрованной строке, вам необходимо проанализировать текстовый узел GetTerritoriesResult самостоятельно.
response.success = { resp, xml ->
println "XML was ${resp.data.text}"
def territories = new XmlSlurper().parseText(
xml.Body.GetTerritoriesResponse.GetTerritoriesResult.text()
)
println "State were ${territories.State}"
println "City was ${territories.Territory.City}"
println "County was ${territories.Territory.County}"
}