2013-03-13 6 views
7

私は選択肢でラクダのJava DSLの選択

_ from(A) 
_ .split()... 
_ .choice() //Choice 1 
_ .when(predicate) 
_  .process() 

_  .choice() // Choice 2 
_  .when(x) 
_   .to(X) 
_  .otherwise() 
_   .to(Y) 
_  .end() // to terminate inner choice 

_ .endchoice() // tell camel we're back in the outer-choice - gets exception 
_ .otherwise() // Choice 1 
_  .to(Z) 
_ .end() 

を持つようにしたいが、私はendChoice(上の実行時例外を取得)

java.lang.ClassCastException: org.apache.camel.model.SplitDefinition cannot be cast to org.apache.camel.model.ChoiceDefinition 

私はそれなし時エラーをコンパイルし得る

I疑わしいend()は内側と外側の選択を終了しています、私は内側のものを終了するだけです。

end()に入れていない場合は、otherwise()をinner-choiceの拡張として扱います。それはない。

私はサブルートに2番目の選択肢を入れて「直接:SUB_ROUTE」という形で回避策を見つけましたが、可能であれば上記で概説したより単純な構造を使用することをお勧めします。 Choices in Choicesを達成する方法はありますか、これはJava DSLの単なる制限ですか?

答えて

6

end()に入れないと、それ以外の2番目の()が内部選択の拡張として扱われます。それはない。

あなたは本当ですか?事実、私はあなたの問題を解決する必要がありますからend()を削除すると思います。 endchoice()は内部選択構造の終わりを示すのに十分です。

..

おかげで、私はそれで、サンプルコードを試してみましたし、それが正常に働いていました!

+0

私は、endChoice()が選択した1つの分岐を終了し、end()が構造全体を終了したと考えました。私はこれを試してみる。 –

+0

うーん、それを試して、それは正常に働いた。私は理解していないと思うチョイス() –

+4

参照のためのソリューションのコードを提出してください – TecHunter

関連する問題