我尝试使用Java Enum对象设置标头,但在Camel蓝图中,它会自动转换为字符串,而不是用作Enum对象。 在蓝图中我有这条路线:
<route id="doOperationARoute">
<from uri="timer://MNG?delay=5s&repeatCount=1" />
<setHeader headerName="operationName">
<simple>${type:my.pkg.EnumOperations.OP_A}</simple>
</setHeader>
<log message="${headers}" />
<to uri="bean:myProcessor" />
</route>
Java枚举:
package my.pkg;
public enum EnumOperations{
OP_A
}
处理器:
public class MyProcessor implements Processor{
@Override
public void process(Exchange exc) throws Exception {
//HERE I RECEIVE THE CAST ERROR (String cannot be casted to EnumOperation)
EnumOperations operation=(EnumOperations)exc.getIn().getHeader("operationName");
switch (operation) {
case OP_A:
break;
default:
break;
}
}
}
我搜索了简单的文档,但没有找到。有什么想法吗?
答案 0 :(得分:0)
您可以通过两种方式执行此操作:
1)在你的proccessor中获得类型为
的headrEnumOperations operation = exc.getIn().getHeader("operationName", EnumOperations.class);
2)使用bean代替Camel Proccessor并使用@header传递枚举
class Bean {
public void methodName (@Header("operationName") EnumOperations operation){
switch (operation) {
case OP_A:
break;
default:
break;
}
}
}