У меня есть сложный маршрут верблюда, который начинается с маршрута инициализации, который пытается установить заголовки с информацией из XML, используемой в качестве входных.
Интересно, как маршрут не может анализировать содержимое XML с помощью XPath.
Перед вызовом маршрута я распечатываю информацию xml в своем java JUNIT, и она печатается правильно со всеми тегами xml.
Итак, я знаю, что информация отправляется, как я и ожидал.
Но этот маршрут, который должен устанавливать заголовки с помощью XPath, возвращает пустое значение для любого выражения, которое я пытаюсь использовать! Я даже использовал инструмент XPath, чтобы помочь мне (https://codebeautify.org/Xpath-Tester), чтобы проверить, была ли ошибка кодирования xpath, но я получаю оттуда результаты, которые хочу.
Итак, предположим, у меня есть XML как:
<bic:Test>
<bic:context>
<bic:memberCode>GOOGLE</bic:memberCode>
</bic:context>
</bic:Test>
Итак, со строкой ниже:
<setHeader headerName = "myHeader">
<xpath resultType = "java.lang.String">//<anyTag>/text()</xpath>
</setHeader>
или
<setHeader headerName = "myHeader">
<xpath resultType = "java.lang.String">//<anyTag></xpath>
</setHeader>
Увижу заголовок с пустым содержимым.
Я пробовал так много разных вещей, что, наконец, решил распечатать весь контент, используя выражение XPath как /.
Он будет печатать только контент («GOOGLE»), но не теги.
Не могли бы вы мне помочь?
Заранее спасибо!
Вероятно, это проблема, связанная с пространством имен. Вы должны определить пространство имен bic в контексте верблюда, а затем использовать его в выражении xpath.
Взгляните на документацию в https://github.com/apache/camel/blob/master/camel-core/src/main/docs/xpath-language.adoc и, в частности, на пример «Использование конфигурации XML»
Также посмотрите «Аудит пространства имен для облегчения отладки» для получения дополнительной информации об отладке проблем, связанных с пространством имен в camel.
Действительно, в объявлении пространства имен была ошибка. Очень полезная ссылка. Большое спасибо!