如何在Camel Route中使用Enum?

时间:2017-03-31 16:04:41

标签: apache-camel

我有以下路线:

.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()}")

有什么想法解决这个问题?

4 个答案:

答案 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()而不是连接所有部分,因为它使简单的语句更具可读性