[
https://issues.apache.org/jira/browse/CAMEL-16825?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17603787#comment-17603787
]
Dirk Vanhaute commented on CAMEL-16825:
---------------------------------------
Hi Claus, I believe this is what you are looking for:
[https://github.com/apache/camel/pull/5890]
It does what I explained here :
{quote}WhenDefinition and OtherwiseDefinition are indeed on top of
ChoiceDefinition.
It is a special construction. It is a child of choice, and
ChoiceDefinition.when creates the new WhenDefinition or OtherwiseDefinition,
but returns the current ChoiceDefinition instead.
Thus, indeed, I agree, endChoice should test first on being on level
ChoiceDefinition and, if so, decide we're fine, not end the choice, but just
return itself.
{quote}
But since the original test failed, I am not sure this is a correct analysis of
what happened.
What I explained further is in CAMEL-4050, endParent was created in
ProcessorDefinition and overridden in WhenDefinition but not in
OtherDefinition. It might be this whole parent thing that makes it impossible
to use endChoice in a nested choice where it is not necessarry ( see my first
example for a test ).
> can not use endChoice() in nest choice DSL
> ------------------------------------------
>
> Key: CAMEL-16825
> URL: https://issues.apache.org/jira/browse/CAMEL-16825
> Project: Camel
> Issue Type: Improvement
> Components: camel-core, eip
> Affects Versions: 3.6.0, 3.11.0
> Reporter: tang honggang
> Priority: Minor
> Fix For: 3.x
>
>
> I want to use nest choice DSL to finish some job, but it doesn't work well in
> my test case. When I use endChoice() in the inner choice clause, it return
> back to the outer choice definition actually.
> And this is the test case:
> ProcessorDefinition<?> end = from("timer:foo?period=5000&synchronous=true")
> .transform(simple("${random(1000)}"))
> .choice()
> .when(simple("${body} > 500"))
> .log("High number ${body}")
> .choice()
> .when(simple("${body} > 750"))
> .log("High number >750 ${body}")
> .endChoice()
> .otherwise()
> .log("High number <750 ${body}")
> .endChoice()
> .endChoice()
> .otherwise()
> .log("Low number ${body}")
> .endChoice();
>
> Though in this case, I can fix the problem by not use endChoice(), I see the
> code of endChoice(). I found that change the sequence of the two judgement
> below can fix my problem, but I am not sure the influence. So I hope you can
> give me an answer, thx!
> // are we nested choice?
> ProcessorDefinition<?> def = this;
> if (def.getParent() instanceof WhenDefinition) {
> return (ChoiceDefinition) def.getParent().getParent();
> }
> // are we already a choice?
> if (def instanceof ChoiceDefinition) {
> return (ChoiceDefinition) def;
> }
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)