Apache camel 选择中的camel Java DSL选择

Apache camel 选择中的camel Java DSL选择,apache-camel,Apache Camel,我想要 _ from( A ) _ .split()... _ .choice() //Choice 1 _ .when( predicate ) _ .process() _ .choice() // Choice 2 _ .when( x ) _ .to( X ) _ .otherwise() _ .to( Y ) _ .end() // to terminate inner choice _ .

我想要

_ 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()上得到运行时异常

如果没有它,我会得到编译时错误

我怀疑end()结束了内部和外部选择,我只希望它结束内部选择

不放入end()使它将第二个否则()视为内部选择的扩展。但事实并非如此

我已经找到了解决办法,将第二个选择放在一个sub route中,并将“direct:sub_route”放在其中,但如果可以的话,我更愿意使用上面概述的更简单的结构。是否有一种方法可以在选择中实现选择,或者这只是JavaDSL的一个限制

不放入end()使它将第二个否则()视为内部选择的扩展。但事实并非如此

你确定吗?事实上,我认为从那里删除end()应该可以解决您的问题。endchoice()足以指示内部选择构造的结束

我用它尝试了一个示例代码,它运行得很好


谢谢

我认为endChoice()只结束了一个选项的一个分支,而end()结束了整个结构。我试试这个。嗯,试过了,效果很好。我想我不明白endChoice()谢谢@uOne,通过移除末端并保留外部endChoice()也帮助关闭了内部endChoice
java.lang.ClassCastException: org.apache.camel.model.SplitDefinition cannot be cast to org.apache.camel.model.ChoiceDefinition