2013-03-13 11 views
7

chcę miećwielbłąd Java DSL Choice w wyborze

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

ale otrzymuję wyjątek czasu wykonywania na endChoice()

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

otrzymuję błąd kompilacji czas bez niego

I podejrzany koniec() kończy się wewnętrznym i zewnętrznym wyborem, chcę tylko, aby zakończył ten wewnętrzny.

niezłożenie na koniec() sprawia, że ​​traktuje drugi w inny sposób() jako rozszerzenie wewnętrznego wyboru. Który nie jest.

Znalazłem obejście, wstawiając do niego drugi wybór w podpowiedzi i "bezpośredni: SUB_ROUTE", ale wolałbym użyć prostej struktury, którą opisałem powyżej, jeśli mógłbym. Czy istnieje sposób na dokonanie Wyborów w Wybraniach, czy jest to tylko ograniczenie Java DSL?

Odpowiedz

6

niezłożenie w końcu() sprawia, że ​​traktuje drugi w inny sposób() jako rozszerzenie wewnętrznego wyboru. Który nie jest.

Jesteś tego pewien? Rzeczywiście myślę, że usunięcie końcówki() powinno rozwiązać problem. Endchoice() wystarczy, aby wskazać koniec konstrukcji z wewnętrznym wyborem.

Próbowałem przykładowy kod z nim i to działa dobrze ..

Dzięki!

+0

Myślałem, że endChoice() zakończył tylko jedną gałąź wyboru i koniec() zakończył całą strukturę. Spróbuję tego. –

+0

hmm, wypróbowałem to i wszystko działało dobrze. domyślam się, że nie rozumiem endChoice() –

+4

proszę przesłać kod rozwiązania dla odniesienia – TecHunter