Java DSL中的Camel Choice语句中的Choice。

13

I want to have

_ 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()正在结束内部和外部choice,但我只想结束内部的那个。

不放置end()会使它将第二个otherwise()视为内部选择的扩展。但它并不是。

我已经通过将第二个选择放入子路由并“direct:SUB_ROUTE”进入其中来找到了解决方法,但如果可能的话,我更喜欢使用上面概述的更简单的结构。是否有一种实现选择在选择中的方式,还是这只是Java DSL的限制?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
12
不加 end() 会使第二个 otherwise() 被视为内部选择的扩展。但实际上它不是内部选择的一部分。 你确定吗?事实上,我认为从那里删除 end() 应该可以解决你的问题。endchoice() 已足以表示内部选择构造的结尾。 我试过一段代码,它运行良好。 谢谢!

1
我认为endChoice()只结束了选择的一个分支,而end()则结束了整个结构。我会尝试一下。 - user1743310
嗯,我尝试了一下,它运行得很好。我猜我没有理解 endChoice()。 - user1743310
谢谢 @U2one,通过删除结尾并保留外部endChoice(),帮助关闭了内部的end choice。 - gubs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,