Apache Camel多个过滤器/选择器与操作员

时间:2015-03-10 11:00:12

标签: filter header apache-camel selector operator-keyword

我正在尝试使用过滤器过滤来自我的Camel Route中的activeMQ的消息,但是当我使用诸如||之类的运算符时,我无法使其工作或&&

所以基本上我从activemq收到一条带有几个标题的消息,我希望我的路由按标题值过滤消息。但对于某些标题我想接受不同的值,所以我需要使用类似"标题(' myHeader' =' value1' ||' value2&#39 ;)"但它没有用。

我尝试使用filter(),choice()。when()和一些Simple()代码无效。

这是我的Route代码(只是过滤部分):

// first try                        
.filter(header("CACT").isEqualTo("OBS"))
.filter(header("CDPO").in("SAT", "LYO"))
.filter(header("CDDO").isEqualTo("OBSDOM"))
.filter(header("NAME").isEqualTo("SORSTK"))
.filter(header("FLUX").isNull() || header("FLUX").isEqualTo("SCICS"))

// second try           
.choice()
    .when(header("CACT").isEqualTo("OBS") && 
          header("CDPO").in("SAT", "LYO") && 
          header("CDDO").isEqualTo("OBSDOM") && 
          header("NAME").isEqualTo("SORSTK") &&
          (header("FLUX").isNull() || header("FLUX").isEqualTo("SCICS"))

// third try
.filter().simple('''${in.header[CACT]} == ("OBS") && 
                    ${in.header[CDPO]} == ("LYO" || "SAT") &&
                    ${in.header[CDDO]} == ("OBSDOM") &&
                    ${in.header[NAME]} == ("SORSTK") &&
                    (${in.header[FLUX]} != (null) || ${in.header[FLUX]} == "SAT") ''')

我尝试了这三种解决方案,但没有一种方法可行。当我删除具有||的行时操作员,它工作。所以我不知道如何处理。 如果这些条件得到验证,我只想消费我的信息。

如果您知道为什么它不起作用,那么您的帮助将会受到欢迎。

此致 萨米

1 个答案:

答案 0 :(得分:0)

好的家伙我找到了一个解决方案,我使用了filter()和simple(),但是不超过2个条件,我使用了#34;和#34;和"或"而不是"&&"和" ||"。 这是工作代码:

.filter(simple('''${header.CACT} == "OBS"'''))
.filter(simple('''${header.CDPO} == "SAT" or ${header.CDPO} == "LYO"'''))
.filter(simple('''${header.CDDO} == "OBSDOM" and ${header.NAME} == "SORSTK"'''))
.filter(simple('''${header.FLUX} == null or ${header.FLUX} == "SCICS"'''))

如果您有其他建议,我仍然感兴趣。 感谢。