12

欲しい

_ 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

それなしでコンパイル時エラーが発生します

end()が内側と外側の選択を終了しているのではないかと思います。内側の選択だけを終了させたいのです。

end()を入力しないと、2番目のelse()が内部選択の拡張として扱われます。そうではありません。

2番目の選択肢をサブルートに入れて「direct:SUB_ROUTE」を実行することで回避策を見つけましたが、可能であれば、上記で概説したより単純な構造を使用したいと思います。Choices in Choicesを実現する方法はありますか、それともこれはJava DSLの単なる制限ですか?

4

1 に答える 1

12

end() を入れないと、2 番目の else() を内部選択の拡張として扱います。そうではありません。

よろしいですか?実際、そこから end() を削除すると、問題が解決するはずです。endchoice() は、内部の選択構造の終わりを示すのに十分です。

私はそれでサンプルコードを試しましたが、うまくいきました..

ありがとう!

于 2013-03-14T04:28:36.233 に答える