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() 使其将第二个 else() 视为内部选择的扩展。它不是。

我通过将第二个选择放在子路由中并将“direct:SUB_ROUTE”放入其中找到了解决方法,但如果可以的话,我更愿意使用上面概述的更简单的结构。有没有办法在选择中实现选择,或者这只是 Java DSL 的限制?

4

1 回答 1

12

不放入 end() 使其将第二个 else() 视为内部选择的扩展。它不是。

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

我确实尝试了一个示例代码,它工作正常..

谢谢!

于 2013-03-14T04:28:36.233 回答