2013-03-13 26 views
7

Voglio averecammello Java DSL scelta in una scelta

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

ma ottengo un'eccezione di runtime sul endChoice()

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

ottengo errore di compilazione tempo senza di essa

I sospetto fine() sta finendo la scelta interiore ed esteriore, voglio solo che finisca quella interiore.

non inserendo la fine() lo rende il secondo altrimenti() come estensione della scelta interiore. Quale non è.

Ho trovato una soluzione alternativa inserendo la seconda scelta in una sotto-rotta e "diretta: SUB_ROUTE", ma preferirei usare la struttura più semplice che ho delineato sopra se potessi. C'è un modo per raggiungere Choices in Choices o è solo una limitazione del DSL Java?

risposta

6

non mettere alla fine() rende il secondo altrimenti() come estensione della scelta interiore. Quale non è.

Ne sei sicuro? Infatti, penso che rimuovere la fine() da lì dovrebbe risolvere il tuo problema. Endchoice() è sufficiente per indicare la fine del costrutto di scelta interna.

ho provato un codice di esempio con esso e che stava lavorando bene ..

Grazie!

+0

Ho pensato che endChoice() ha terminato un singolo ramo di una scelta e il fine() ha terminato l'intera struttura. Ci proverò. –

+0

hmm, l'ho provato e ha funzionato bene. suppongo che non ho capito endChoice() –

+4

per favore invia il codice della soluzione per riferimento – TecHunter