2013-03-13 24 views
7

Tôi muốn cólạc đà Java DSL Choice trong một Choice

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

nhưng tôi nhận được ngoại lệ thời gian chạy trên endChoice()

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

tôi nhận được biên dịch lỗi thời gian mà không có nó

tôi nghi ngờ kết thúc() là kết thúc sự lựa chọn bên trong và bên ngoài, tôi chỉ muốn nó kết thúc một bên trong.

không đặt vào cuối() làm cho nó xử lý thứ hai khác() như là phần mở rộng của lựa chọn bên trong. Mà nó không phải là.

Tôi đã tìm thấy giải pháp thay thế bằng cách đặt lựa chọn thứ hai trong một tuyến đường phụ và "trực tiếp: SUB_ROUTE" vào trong đó, nhưng tôi muốn sử dụng cấu trúc đơn giản hơn mà tôi đã nêu ở trên nếu có thể. Có cách nào để đạt được Lựa chọn trong Lựa chọn hay đây chỉ là hạn chế của DSL của Java?

Trả lời

6

không đặt vào cuối() làm cho nó xử lý lần thứ hai cách khác() như là phần mở rộng của lựa chọn bên trong. Mà nó không phải là.

Bạn có chắc chắn về điều đó không? Infact, tôi nghĩ rằng việc xóa kết thúc() từ đó sẽ giải quyết vấn đề của bạn. Endchoice() là đủ để cho biết kết thúc của cấu trúc lựa chọn bên trong.

Tôi đã thử mã mẫu với nó và nó hoạt động tốt ..

Cảm ơn!

+0

Tôi nghĩ endChoice() chỉ kết thúc một nhánh đơn lẻ và kết thúc() đã kết thúc toàn bộ cấu trúc. Tôi sẽ thử cái này –

+0

hmm, đã thử và nó hoạt động tốt. đoán tôi không hiểu endChoice() –

+4

vui lòng gửi mã của giải pháp để tham khảo – TecHunter

Các vấn đề liên quan