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