Apache Camel Route - 用于多个HTTP请求的RegEx

时间:2012-05-16 13:55:39

标签: http apache-camel apache-servicemix

如果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 个答案:

答案 0 :(得分:2)

在正则表达式中,您可以添加“或”,以便在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表达式中,您还可以使用二元运算符,并添加第二个表达式。所以它会是这样的:

<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文档中有关Simple表达式的详细信息。请参阅有关运算符的部分:http://camel.apache.org/simple