骆驼Java DSL选择中的选择

时间:2013-03-13 19:24:00

标签: 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

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

我已经找到了解决方法,将第二个选项放在子路径中并将“direct:SUB_ROUTE”放入其中,但我更愿意使用上面概述的平面结构(如果可以的话)。有没有办法在选择中实现选择,还是只是Java DSL的限制?

1 个答案:

答案 0 :(得分:8)

  

没有放入end()使得它将第二个否则()视为内部选择的扩展。它不是。

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

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

谢谢!