Apache Camel Route - RegEx для нескольких HTTP-запросов
Вот пример для маршрутизации сообщения, если USER_AUDIT
Транзакция со списком http запросов:http://www.blabla.com/dothis/USER_AUDIT?AA=aa&BB=bb
<when>
<simple>${in.header.CamelHttpPath} regex '(?i)/USER_AUDIT'</simple>
<bean ref="transactionList" method="get" />
<bean ref="transactionTransform" method="convert" />
</when>
Теперь я хочу направить другие транзакции, видите, CARD_VER
по тому же маршруту. Есть ли такой синтаксис, как:
<simple>${in.header.CamelHttpPath} regex '(?i)/USER_AUDIT' || '(?i)/CARD_VER'</simple> ?
1 ответ
В регулярное выражение вы можете добавить "или", чтобы вы могли сопоставить, если любой из 2 совпадает. Но тогда вам нужно немного reg exp ninja, чтобы сделать это. Это было бы что-то похожее
'(?i)/[USER_AUDIT|CARD_VER]'
Но проверьте JavaDoc для регулярного выражения: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html. И другие документы о том, как делать регулярные выражения. Также есть плагины, которые вы можете установить в своих редакторах Java, где вы можете на лету испытывать регулярные выражения, чтобы выяснить, какой шаблон вам подходит.
Однако в Простом выражении в Camel вы также можете использовать бинарные операторы и добавить второе выражение. Так что это будет что-то вроде:
<simple>${in.header.CamelHttpPath} regex '(?i)/USER_AUDIT' ||
${in.header.CamelHttpPath} regex '(?i)/CARD_VER'</simple>
В Camel 2.8.x или старше у вас может быть только 1 бинарный оператор, но начиная с Camel 2.9 вы можете иметь столько, сколько захотите.
Подробности см. В документации Camel для простого выражения. Смотрите раздел об операторах по адресу: http://camel.apache.org/simple