Camel blueprint:标题中的枚举值

时间:2017-01-13 15:53:52

标签: java enums apache-camel blueprint-osgi

我尝试使用Java Enum对象设置标头,但在Camel蓝图中,它会自动转换为字符串,而不是用作Enum对象。 在蓝图中我有这条路线:

    <route id="doOperationARoute">
        <from uri="timer://MNG?delay=5s&amp;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;  
        }   
    }
}

我搜索了简单的文档,但没有找到。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式执行此操作:

1)在你的proccessor中获得类型为

的headr
EnumOperations 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;  
        }   
   }

}