2013-03-13 15 views
7

Ich möchteKamel Java DSL Wahl in einer Wahl

haben
_ 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() 

aber ich Runtime-Ausnahme auf dem EndChoice()

java.lang.ClassCastException: org.apache.camel.model.SplitDefinition cannot be cast to org.apache.camel.model.ChoiceDefinition 

I Zeitfehler erhalten kompilieren, ohne es

I suspect end() beendet die innere und äußere Wahl, ich will nur, dass es die innere beendet.

nicht setzen das Ende() macht es behandeln die zweite andernfalls() als eine Erweiterung der inneren Wahl. Was es nicht ist.

Ich habe eine Umgehungslösung gefunden, indem ich die zweite Option in eine Unterroute und "direkt: SUB_ROUTE" einfügen, aber ich würde lieber die einfachere Struktur verwenden, die ich oben beschrieben habe, wenn ich könnte. Gibt es eine Möglichkeit Choices in Choices zu erreichen oder ist dies nur eine Einschränkung des Java DSL?

Antwort

6

nicht setzen das Ende() macht es behandeln die zweite andernfalls() als eine Erweiterung der inneren Wahl. Was es nicht ist.

Sind Sie sich sicher? Infact, ich denke, das Entfernen des Endes() von dort sollte dein Problem lösen. Das endchoice() reicht aus, um das Ende des Konstrukts der inneren Wahl anzuzeigen.

habe ich mit ihm einen Beispielcode versuchen und es funktioniert gut ..

Dank!

+0

Ich dachte, die endChoice() endete nur einen einzigen Zweig einer Wahl und das Ende() beendete die gesamte Struktur. Ich werde es versuchen. –

+0

hmm, versuchte es und es hat gut funktioniert. rate ich habe nicht verstanden endChoice() –

+4

Bitte senden Sie den Code der Lösung als Referenz – TecHunter