Общее описание
Simple — это язык выражений, созданный для того, чтобы покрыть около 95% всех повседневных задач по маршрутизации и трансформации данных без подключения внешних библиотек . Он идеально подходит для быстрой проверки условий (предикатов) и простых преобразований.
Основной синтаксис и переменные
Simple использует синтаксис ${ } для подстановки переменных. Если выражение состоит из одной переменной, фигурные скобки можно опустить .
Базовые переменные (что можно использовать):
- Тело сообщения:
${body}— всё тело сообщения. - Заголовки:
${header.имя_заголовка}— конкретный заголовок. - Переменные:
${variable.имя_переменной}— конкретная переменная (простая, с указанием типа данных, системная, и т.д.). - Свойства Exchange:
${exchangeProperty.имя}— свойства Exchange. - Адаптация типов:
${bodyAs(String)}— преобразует тело в строку,${mandatoryBodyAs(Integer)}— требует обязательного преобразования в число .
Дополнительные возможности:
- Системные данные:
${sys.имя}(системные свойства),${sysenv.имя}(переменные окружения),${date:now:yyyyMMdd}(текущая дата) . - Константы: Обращение к статическим полям Java через
type:.
Обзор функций
Язык выражений Simple поддерживает различные типы функций. Примеры типов функций:
- Математические:
${sum()},${min()},${max()}, а также инкремент${++value}и декремент${--value}. - Строковые:
${trim()},${toUpperCase()},${startsWith('A')}. - Случайные:
${random(10)}(число от 0 до 9) или${random(5, 10)}.
Операторы сравнения (Предикаты)
Simple поддерживает стандартные операторы и специальные ключевые слова для создания условий, например, в фильтрах .filter().
- Сравнение:
==,>,>=,<,<=,!=. - Проверка строк:
contains,regex(регулярные выражения),in(проверка на вхождение в список). - Типы данных:
is(${body} is 'com.mycompany.MyType'). - Диапазоны:
range(${header.number} range '100..199'). - Логика:
&&(И),||(ИЛИ).
Пример условия: ${header.age} >= 18 && ${body.size} > 0.
Дополнительные возможности
Приведенные ниже операторы обеспечивают удобство работы со сложной логикой:
- Тернарный оператор (
? :): Позволяет писать условия в одну строку.- Пример:
${header.count > 0 ? 'Positive' : 'Zero'}.
- Пример:
- Elvis-оператор (
?:): Возвращает значение по умолчанию, если переменная пуста или равна null.- Пример:
${header.userName ?: 'Guest'}.
- Пример:
- Chain-оператор (
~>): Позволяет последовательно применять функции, делая код чище.- Пример:
${body} ~> ${trim()} ~> ${toUpperCase()}(вместо вложенных функций).
- Пример:
- Init-блоки (
$init{...}init$): Позволяют объявлять переменные в начале выражения, чтобы переиспользовать их.- Пример:
$init{ $nick := ${header.firstName} }init$ Привет, $nick.
- Пример:
Загрузка сценария из внешнего ресурса
Simple позволяет вынести сценарий во внешний файл и настроить его загрузку из такого ресурса, как classpath:, file: или http:. Это делается с помощью следующего синтаксиса: "resource:scheme:location".
Пример ссылки на файл:
.setHeader("myHeader").simple("resource:classpath:mysimple.txt")
Важные замечания
- Для сложной логики: Если выражение становится слишком сложным, рекомендуется рассмотреть использование специализированных языков, таких как Groovy и Java.
- Конфигурация: У Simple есть параметры
resultType(задание класса типа результата) иtrim(авто-удаление начальных и конечных пробелов), которые можно настроить.
В следующих разделах приведено описание различных типов функций, поддерживаемых языком выражений Simple.