Перейти к основному содержимому
Руководство администратора
How To статьи
Установка и настройка
Компоненты
Руководство пользователя
Начало работы

Блоки инициализации

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

Объявление блока инициализации $init{ ... }init$ может быть изменено в будущем.

Блок инициализации объявляется следующим образом:

$init{
// init block
// goes here
// ...
}init$
// here is the regular simple expression

Обратите внимание, как в блоке используются маркеры $init{ ... }init$, чтобы указать начало и конец блока.

Внутри блока инициализации вы можете присваивать локальные переменные в синтаксисе $key := <statement>;, где вы можете использовать Simple для вычисления значения переменной.

Каждый оператор должен заканчиваться точкой с запятой и новой строкой (;\n). Это делает блок инициализации более похожим на язык программирования Java, и это также было необходимо для работы внутреннего простого парсера.

Вот несколько примеров:

$init{
$cheese := 'Hello ${body}';
$minAge := 18;
$foo := ${upper('Hello $body}'};
$bar := ${header.code > 999 ? 'Gold' : 'Silver'};
}init$

Вы можете использовать комментарии в стиле Java в блоке инициализации, используя // comment here:

$init{
// минимальный возраст для вождения
$minAge := 18;
// поприветствуй моего друга
$foo := ${upper('Hello $body}'};
// либо золото, либо серебро
$bar := ${header.code > 999 ? 'Gold' : 'Silver'};
}init$

Локальные переменные можно легко использовать в языке Simple, применяя синтаксис ${variable.foo} или сокращенный синтаксис $foo.

Например, как показано ниже, где выполняется базовое сопоставление JSon:

$init{
$greeting := ${upper('Hello $body}'}
$level := ${header.code > 999 ? 'Gold' : 'Silver'}
}init$
{
"message": "$greeting",
"status": "$level"
}

Присвоенные переменные из блока инициализации сохраняются как variables в Exchange, что позволяет использовать переменные далее в маршрутах.

Например:

- from:
uri: direct:welcome
steps:
- transform:
simple:
expression: |-
$init{
$greeting := ${upper('Hello $body}'};
$level := ${header.code > 999 ? 'Gold' : 'Silver'};
}init$
{
"message": "$greeting",
"status": "$level"
}
- to:
uri: kafka:welcome
- log:
message: "Sending welcome email to customer with status ${variable.level}"

Обратите внимание, как мы можем ссылаться на переменную ($level) в операторе логирования, используя стандартный синтаксис ${variable.xxx}.

Вместо того чтобы встраивать простой сценарий в маршрут, вы можете вынести его во внешний файл, например mymapping.txt, и затем ссылаться на файл, например resource:classpath:mymapping.txt, где файл находится в корневом classpath (также может находиться в подпакетах).