Po pierwsze, tak, szukałem i, tak, przeczytałem ten sam dokument Apache, na który wskazuje każdy punkt. :-) Myślę, że jest trochę zamieszania i myślę, że znam odpowiedź, więc pozwól mi przedstawić przykład tego, co uważałem za poprawne, podążaj za tym, co myślę, że jest odpowiedź. Dzięki. Aha, i wiem, że niektóre z linii endChoice() nie są bezwzględnie konieczne i że Camel to zrozumie, ale lubię klocki, które mają być czysto wytyczone, chyba że istnieją powody, aby ich nie używać.Camel end vs endChoice - nie jest to zwykłe zapytanie
.choice()
.when(X1)
// do stuff
.choice()
.when(Y)
//do more stuff
.endChoice() // close inner when block
.end() // close inner choice block
.endChoice() // close first outer when
.when(X2)
// do other stuff
.endChoice() // close second outer when
.end() // close outer choice
Więc moje oryginalne spojrzenie na API, myślałem, że koniec() był do zamykania rzeczy jak wybór i split i tym endChoice() zostało do zamykania możliwości wyboru, kiedy i jak inaczej. Wygląda bardziej na to, że ten drugi jest faktycznie endem(), który zwraca ChoiceDefinition. Co sprawia, że nazwa jest trochę lepsza.
Ale jeśli wyjmę koniec() oznaczony jako "zamknij wewnętrzny blok wyboru", oznacza to, że kontynuuję do następnego wiersza, endChoice(). Czy to powoduje zamknięcie bloku wewnętrznego wyboru? Biorąc to pod uwagę, czas (X2) nadal znajduje się w bloku, gdy (X1). Tak, myślę, że muszę zastąpić end() z endChoice() zamiast usuwania go. Tak więc wynik będzie wyglądał następująco:
.choice()
.when(X1)
// do stuff
.choice()
.when(Y)
//do more stuff
.endChoice() // close inner when block
.endChoice() // close inner choice block
.endChoice() // close first outer when
.when(X2)
// do other stuff
.endChoice() // close second outer when
.end() // close outer choice
Czy to sposób radzenia sobie z tym w Camel? Czy jest prostszy sposób, którego mi brakuje? Dziękuję za Twój czas.
Dobra rada, staram się również nie zagnieździć wyborów. Twoi koledzy lub twoja przyszłość będą Ci wdzięczni;). – helpermethod