Использование вложенного EL для динамического чтения значений нумерованных заголовков больше не работает - PullRequest
0 голосов
/ 12 февраля 2020

В качестве минимального примера рассмотрим обмен с несколькими значениями заголовков, такими как:

  • header.test0
  • header.test1
  • header.test2
  • ...

Я понимаю, что такие пронумерованные поля заголовка не идеальны, но я не могу это изменить.

В прошлом (до Верблюд 2.17) Мне удалось l oop для следующих значений (XML DSL):

<loop>
   <simple>${header.myCounter}</simple>
   <log message="${header.test${header.CamelLoopIndex}}"/>
</loop>

Однако после обновления до Camel 2.21 это приводит к следующей ошибке: org.apache.camel.language.simple.types.SimpleIllegalSyntaxException: expected symbol functionEnd but was eol at location 16 test${header

В документации говорится, что простые выражения все еще могут быть вложенными, поэтому я не уверен, почему он перестал работать, и как я могу это исправить. Я полагаю, что моя проблема вызвана тем фактом, что я объединяю текст stati c со значениями Dynami c, в то время как в существующих примерах в качестве имени всегда используется полное значение Dynami c.

Так что мой вопрос является, как правильно читать значения header.test0, header.test1, ... в al oop динамически?

1 Ответ

0 голосов
/ 06 марта 2020

Для тех, у кого есть похожие проблемы:

Проблема не во вложенных выражениях. Проблема заключается в том, что SimpleIllegalSyntaxException будет выброшено, если вы используете вложенное выражение (как в примере) И когда поле заголовка не существует. В более старых версиях Camel несуществующее поле заголовка просто оценивалось бы как «ноль». В более поздней версии выдается исключение.

Принимая во внимание приведенный выше пример, будет сгенерировано исключение, если вы l oop от 0 до 5 и если header.test5 не существует (например).

Null- безопасно "?." здесь не помогает «Решением» является использование try / catch (да, вы можете сделать это в XML DSL) и выполнение соответствующей операции в части «catch», если значение заголовка не существует. Это неуклюже, но позволяет копировать исходное поведение ваших маршрутов в новых версиях Camel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...