我有以下路线:
.choise()
.when()
.simple("${body.messageType} == 105")
.to(...)
.when()
.simple("${body.messageType} == 106")
.to(...)
我想用这个枚举进行比较。
package myPackage;
public enum Code {
CODE_A("105"),
CODE_B("106")
private String value;
Code(String value) {
this.value = value;
}
public String value() {
return value;
}
}
我试图做这样的事情,但它不起作用..
.simple("${body.messageType} == ${type:myPackage.Code.CODE_A.value()}")
有什么想法解决这个问题?
答案 0 :(得分:2)
根据http://plnkr.co/edit/tmgKh22PftNMua0Pdmjo,你可以使用
.simple("${body.messageType} == ${type:myPackage.Code.CODE_A}")
在示例中,您尝试过使用
myPackage.Code.value()
不
myPackage.Code.CODE_A
答案 1 :(得分:0)
您可以使用Groovy表达式解决它。将camel-groovy
添加到pom / gradle。
使用以下表达式:
.when().groovy("body.messageType == myPackage.CODE_A.value()")
答案 2 :(得分:0)
我通过以下方式解决了这个问题:
.setHeader("codeA",constant(myPackage.Code.CODE_A.value()))
.setHeader("codeB",constant(myPackage.Code.CODE_B.value()))
.choise()
.when()
.simple("${body.messageType} == ${header.codeA}")
.to(...)
.when()
.simple("${body.messageType} == ${header.codeB}")
.to(...)
谢谢!
答案 3 :(得分:0)
我的简单语法如下:
//one value
simple(String.format("${body.key} == '%1s'", Code.CODE_A.value())
// multiple values using 'in' operator
simple(String.format("${body.key} in '%1s,%2s'", Code.CODE_A.value(), Code.CODE_B.value())
我喜欢使用String.format()而不是连接所有部分,因为它使简单的语句更具可读性