Filter 带运算符的Apache Camel多重筛选器/选择器

Filter 带运算符的Apache Camel多重筛选器/选择器,filter,header,apache-camel,selector,operator-keyword,Filter,Header,Apache Camel,Selector,Operator Keyword,我正在尝试使用过滤器在驼峰路由中过滤来自activeMQ的消息,但当我使用诸如| |或|之类的运算符时,无法使其工作&& 因此,基本上我从activemq接收到一条带有多个头的消息,我希望我的路由按头值过滤消息。但是对于一些头,我希望接受不同的值,所以我需要使用类似头'myHeader'='value1'| |'value2'的东西,但它不起作用 我试过使用过滤器、choice.when和一些简单的代码,但都不起作用 这是我的路线代码,只是过滤部分: // first try

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

因此,基本上我从activemq接收到一条带有多个头的消息,我希望我的路由按头值过滤消息。但是对于一些头,我希望接受不同的值,所以我需要使用类似头'myHeader'='value1'| |'value2'的东西,但它不起作用

我试过使用过滤器、choice.when和一些简单的代码,但都不起作用

这是我的路线代码,只是过滤部分:

// 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") ''')
我试过这三种解决方案,但都不管用。当我删除包含| |运算符的行时,它会工作。所以我不知道该怎么处理。 如果这些条件得到验证,我只想使用我的消息

如果你知道为什么它不起作用,你的帮助将不胜感激

问候,,
Sami

好了,伙计们,我找到了一个解决方案,我使用了filter和simple,但每行不超过2个条件,我使用and and or代替了&&and | |。 以下是工作代码:

.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"'''))
如果你有其他建议,我仍然感兴趣。 谢谢