2017-01-13 5 views
0

Java Enumオブジェクトを使用してヘッダを設定しようとしていますが、Camelの青写真ではEnumオブジェクトとして使用される代わりに自動的に文字列に変換されます。私はこのルートを持っている青写真で :Camel blueprint:ヘッダのenums値

<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; 
     } 
    } 
} 

私はシンプルなドキュメントで検索したが、何も見つかりませんでした。何か案が?あなたは2つの方法でこれを行うことができます

+1

、のgetHeader(...)は、文字列を返します。 EnumOperations.valueOf(exc.getIn()。getHeader( "operationName")) ' – alexbt

+0

Enumをインスタンス化する方法はありません。青写真のヘッダーに?ありがとう – ainos984

答えて

0

:あなたのproccessorで

1)は、クラス型

EnumOperations operation = exc.getIn().getHeader("operationName", EnumOperations.class); 

2でHEADRを取得)キャメルProccessor場合は代わりに豆を使用して列挙型を渡します@headerあなたのメッセージが示すように

class Bean { 

    public void methodName (@Header("operationName") EnumOperations operation){ 
    switch (operation) { 
     case OP_A: 
      break; 
     default: 
      break; 
     } 
    } 

}