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

Другие вопросы по тегам