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

Строковые функции

Bercut ESB поддерживает функции работы со строковыми и текстовыми значениями.

ФункцияТип ответаОписание
capitalize()StringПреобразует первую букву каждого слова в теле сообщения в верхний регистр.
Например, ${capitalize('hello world')} возвращает Hello World.
capitalize(exp)StringПреобразует первую букву каждого слова в выражении в верхний регистр.
concat(exp,exp,separator)StringВыполняет конкатенацию строк с использованием двух выражений (по умолчанию тело сообщения) с необязательным разделителем.
В Java вы бы использовали оператор +, например String s = "Hello" + " world";.
Простая функция работает так:${concat('Hello ',${body})}. Обратите внимание, как вы можете использовать вложенные функции, включив другую функцию в качестве параметра (в примере - ${body}). В примере добавлен пробел после "Hello ", но вы также можете использовать параметр-разделитель, например ${concat('Hello',${body},' ')}.
join(separator,prefix,exp)StringОбъединяет элементы коллекции (списка, массива и т. д.) в единую строку. Позволяет гибко настраивать формат итоговой строки: задавать разделитель между элементами, префикс перед каждым элементом и использовать выражение для преобразования элементов перед объединением. Разделителем по умолчанию является запятая. Префикс необязателен. Join по умолчанию использует тело сообщения в качестве источника. Можно сослаться на другой источник (simple language), например на заголовок, через параметр exp. Например, join('&','id=','${header.ids}').
Другой пример: если тело сообщения содержит список [A, B, C], то ${join()} вернет A,B,C. Чтобы использовать точку с запятой в качестве разделителя, вы бы использовали ${join(;)}. Аргумент prefix можно использовать для добавления префикса к каждому значению, так, например, ${join(&,id=)} вернет id=A&id=B&id=C.
lowercase()StringПреобразует тело сообщения в нижний регистр.
Таким образом, ${lowercase('Hello World) } возвращает hello world.
lowercase(exp)StringПреобразует выражение в нижний регистр.
uppercase()StringПреобразует тело сообщения в верхний регистр.
Таким образом, ${uppercase('Hello World) } возвращает HELLO WORLD.
uppercase(exp)StringПреобразует выражение в верхний регистр.
normalizeWhitespace()StringНормализует пробелы в теле сообщения, удаляя лишние пробелы.
Вы можете использовать эту функцию для "очистки" значения путем удаления лишних пробелов так, чтобы между словами везде был ровно один пробел, а также удалены значения от начальных и конечных пробелов.
Предположим, тело сообщения — это строковое значение " Hello big World ", тогда ${normalizeWhitespace()} вернет Hello big World.
normalizeWhitespace(exp)StringНормализует пробелы в выражении, удаляя лишние пробелы.
pad(exp,width,separator)StringДополняет выражение дополнительными символами и возвращает копию строки с дополнительными символами заполнения, если необходимо, чтобы ее общее количество символов было не менее абсолютного значения параметра width. Если ширина отрицательная, то дополнение производится справа, иначе слева. Необязательный разделитель определяет символ(ы) заполнения. Если не указан, по умолчанию используется пробел. Если тело сообщения содержит foo, то ${pad(5)} вернет "foo ", а ${pad(-5)} вернет " foo", и ${pad(-5,'@')} вернет @@foo.
replace(from,to)StringЗаменяет все строковые значения в теле сообщения. Чтобы упростить замену одинарных и двойных кавычек, вы можете использовать экранированные значения XML: " для двойной кавычки, ' для одинарной кавычки и ∅для пустого значения.
Например, тело сообщения содержит Hello a how are you, тогда ${replace(a,b)} вернет Hello b how bre you. Функция replace имеет специальную поддержку для замены двойных и одинарных кавычек.
replace(from,to,exp)StringЗаменяет все строковые значения в заданном выражении. Чтобы упростить замену одинарных и двойных кавычек, вы можете использовать экранированные значения XML: " для двойной кавычки, ' для одинарной кавычки и ∅ для пустого значения.
safeQuote()StringВозвращает тело сообщения в безопасно экранированном виде, если необходимо.
safeQuote(exp)StringВозвращает выражение в безопасно экранированном виде, если необходимо.
substring(num1)StringВозвращает подстроку тела сообщения. Если число положительное, возвращаемая строка обрезается с начала. Если число отрицательное, возвращаемая строка обрезается с конца.
substring(num1,num2)StringВозвращает подстроку тела сообщения. Если число положительное, возвращаемая строка обрезается с начала. Если число отрицательное, возвращаемая строка обрезается с конца.
Функцииsubstring, substringBefore и substringAfter — это схожие функции для возврата подстроки заданного значения.
substring(num1,num2,exp)StringВозвращает подстроку заданного выражения. Если число положительное, возвращаемая строка обрезается с начала. Если число отрицательное, возвращаемая строка обрезается с конца.
substringAfter(after)StringВозвращает подстроку тела сообщения, которая идет после строки-разделителя after. Возвращает null, если ничего не идет после строки-разделителя after.
substringAfter(exp,after)StringВозвращает подстроку выражения, которая идет после строки-разделителя after. Возвращает null, если ничего не идет после строки-разделителя after.
substringBefore(before)StringВозвращает подстроку тела сообщения, которая идет до строки-разделителя before. Возвращает null, если ничего не идет до строки-разделителя before.
substringBefore(exp,before)StringВозвращает подстроку выражения, которая идет до строки-разделителя before. Возвращает null, если ничего не идет до строки-разделителя before.
substringBetween(after,before)StringВозвращает подстроку тела сообщения, которая находится между before и after. Возвращает null, если между ними ничего нет.
substringBetween(exp,after,before)StringВозвращает подстроку выражения, которая находится между before и after. Возвращает null, если между ними ничего нет.
trim()StringФункция trim обрезает тело сообщения, удаляя все начальные и конечные пробелы.
trim(exp)StringФункция trim обрезает выражение, удаляя все начальные и конечные пробелы.
unquote()StringВозвращает тело сообщения с удаленными начальными/конечными кавычками.
unquote(exp)StringВозвращает выражение с удаленными начальными/конечными кавычками.
quote()StringВозвращает тело сообщения в виде строки в двойных кавычках.
Если значение находится в одинарных кавычках, оно будет преобразовано в двойные.
quote(exp)StringВозвращает выражение в виде строки в двойных кавычках.

Примеры использования функций substring и trim

Функции substring, substringBefore и substringAfter — это схожие функции для возврата подстроки заданного значения.

Предположим, тело сообщения содержит ABCDEFGHIJK, тогда ${substring(3)} вернет DEFGHIJK, а ${substring(-3)} вернет ABCDEFGH. Если вы хотите обрезать первый и последний символы, вы можете использовать ${substring(1,-1)}, вернет BCDEFGHIJ.

Теперь предположим, что тело сообщения содержит Hello great big World how are you.

Тогда ${substringBefore('World')} вернет "Hello great big ". А ${substringAfter('World')} вернет " how are you". И ${substringBetween('great','how')} вернет " big World ".

Функция trim обрезает значение, удаляя начальные и конечные пробелы. Таким образом, предыдущий пример также можно обрезать, вложив функцию: ${trim(${substringBetween('great','how')})}, который вернет "big World".

Чтобы упростить обрезку текста сообщения, можно использовать функцию substring. Например, если текст сообщения содержит следующие 10 букв: ABCDEFGHIJ, то:

<setBody>
<simple>${substring(3)}</simple>
</setBody>

Тогда тело сообщения после substring будет DEFGHIJ. Если вы хотите обрезать с конца, используйте отрицательные значения, например substring(-3).

Вы также можете обрезать с обоих концов одновременно, например substring(1,-1), которая обрежет первый и последний символы в строке.

Если число больше длины тела сообщения, возвращается пустая строка, например substring(99).

Вместо тела сообщения в качестве входных данных может быть вложено простое выражение, например, с использованием переменной, как показано ниже:

<setBody>
<simple>${substring(1,-1,${variable.foo})}</simple>
</setBody>

Пример использования функций quote

Функция quote гарантирует, что возвращаемое значение заключено в двойные кавычки. Если значение находится в одинарных кавычках, оно будет преобразовано в двойные.

Если тело сообщения содержит Hello World, то ${quote()} вернет "Hello World". А при использовании ${quote('Hi from me')} вернется "Hi from me".

Функция safeQuote экранирует значение в зависимости от его типа (использует ту же логику, что и функция kindOfType). По сути, значения null, логические или числовые значения не экранируются, а все остальное — да. Функция safeQuote полезна при работе с данными JSon.

Например, при сопоставлении JSon с JSon вы можете извлечь значения из исходного документа, чтобы включить их в вывод, но значения могут требовать или не требовать экранирования. Затем вы можете использовать оператор цепочки ~> для вызова функции safeQuote, как показано ниже:

{
"id": ${jsonpath($.id)} ~> ${safeQuote()},
"total": ${jsonpath($.amount)} ~> ${safeQuote()}
}

Пример использования функции replace

С помощью функции replace можно упростить процесс замены всех одинарных и двойных кавычек в теле сообщения, используя синтаксис экранирования XML. Это избавит вас от необходимости заключать двойные или одинарные кавычки в кавычки, что может привести к путанице, ведь вам может понадобиться экранировать и сами кавычки. Вместо этого можно использовать синтаксис экранирования XML, где двойная кавычка обозначается как &quot;, а одинарная — как &apos; (да, так и называется).

Например, чтобы заменить все двойные кавычки на одинарные:

from("direct:order")
.transform().simple("${replace(&quot; , &apos;)}")
.to("mock:reply");

И чтобы заменить все одинарные кавычки на двойные:

<setBody>
<simple>${replace(&apos; , &quot;)}</simple>
</setBody>

Или чтобы удалить все двойные кавычки:

<setBody>
<simple>${replace(&quot; , &empty;)}</simple>
</setBody>