Примеры выражений на языке Simple
Вы можете использовать Simple для простых конкатенаций текста, например:
from("direct:hello")
.transform().simple("Hello ${header.user} how are you?")
.to("mock:reply");
Обратите внимание, что следует использовать заполнители ${ } в выражении, чтобы правильно его разобрать.
Пример ниже использует команду date для вывода текущей даты.
from("direct:hello")
.transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.")
.to("mock:reply");
В приведенном ниже примере мы вызываем язык bean для вызова метода bean, который будет включен в возвращаемую строку:
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator}")
.to("mock:reply");
Где orderIdGenerator — это идентификатор bean, зарегистрированного в реестре.
Если мы хотим объявить, какой метод вызывать для генератора идентификаторов заказа, мы должны добавить префикс .method name, как показано ниже, где мы вызываем метод generateId.
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
.to("mock:reply");
Мы можем использовать опцию ?method=methodname, которая знакома нам по самому компоненту Bean:
from("direct:order")
.transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
.to("mock:reply");
Вы также можете преобразовать тело запроса в нужный тип, например, чтобы убедиться, что это строка, сделайте следующее:
<transform>
<simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>
Есть несколько типов, для которых есть сокращенная запись, поэтому мы можем использовать String вместо java.lang.String. Это: byte[], String, Integer, Long. Все остальные типы должны использовать свое полное имя, например org.w3c.dom.Document.
Также можно найти значение в Map заголовка:
<transform>
<simple>The gold value is ${header.type[gold]}</simple>
</transform>
В приведенном выше коде мы ищем заголовок с именем type, рассматриваем его как java.util.Map и затем ищем значение по ключу gold. Если заголовок не может быть преобразован в Map, выбрасывается исключение. Если заголовок с именем type не существует, возвращается null.
Функции можно вкладывать друг в друга, как показано ниже:
<setHeader name="myHeader">
<simple>${properties:${header.someKey}}</simple>
</setHeader>