如何在Camel Route中使用Enum?

Nac*_*hoB 5 apache-camel

我有以下路线:

.choise()
   .when()
      .simple("${body.messageType} == 105")
          .to(...)
   .when()
      .simple("${body.messageType} == 106")
          .to(...)
Run Code Online (Sandbox Code Playgroud)

我想用这个枚举来比较。

  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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试做这样的事情,但它不起作用..

.simple("${body.messageType} == ${type:myPackage.Code.CODE_A.value()}")
Run Code Online (Sandbox Code Playgroud)

有办法解决这个问题吗?

Vya*_*nis 6

根据http://camel.apache.org/simple.html你可以使用

.simple("${body.messageType} == ${type:myPackage.Code.CODE_A}")
Run Code Online (Sandbox Code Playgroud)

在示例中,您尝试过使用

myPackage.Code.value()
Run Code Online (Sandbox Code Playgroud)

不是

myPackage.Code.CODE_A
Run Code Online (Sandbox Code Playgroud)


Nac*_*hoB 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(...)
Run Code Online (Sandbox Code Playgroud)

谢谢!