2011-09-13 42 views
9

Camel maneja de forma explícita dos 'ámbitos' de la gestión de errores:Camel - El manejo de excepciones en 'sub' rutas

  • Global
  • por la Ruta

El problema que estoy teniendo es excepciones lanzadas en una 'sub ruta'. Por ejemplo, tengo esta ruta:

from("direct:sendToWebservice"). 
    .processRef("massageBeforeSending"). 
    .to("http://webservice.com"). 
    .processRef("massageResponse"); 

Entonces Tengo otras dos rutas que necesitan enviar mensajes al servicio web:

from(direct:fromSystemA"). 
    .errorHandler(deadLetterChannel("direct:TellSystemA")). 
    .to("direct:sendToWebservice"); 

from(direct:fromSystemB"). 
    .errorHandler(deadLetterChannel("direct:TellSystemB")). 
    .to("direct:sendToWebservice"); 

Lo que me gustaría que suceda es, si la ruta del servicio web arroja una excepción, se propaga a la persona que llama y se notificará al sistema A o al sistema B. No veo una manera de lograr esto.

Siento que este sería un caso de uso común - ¿Alguien se ha topado con él antes?

Gracias de nuevo por su tiempo,

Roy

Respuesta

16

obtuvo la respuesta de un colega: El itinerario parcial, necesita tener es el manejo de errores desactivado:

from("direct:sendToWebservice"). 
    .errorHandler(noErrorHandler())  // disables error handling for this route 
    .processRef("massageBeforeSending"). 
    .to("http://webservice.com"). 
    .processRef("massageResponse"); 

Esto obliga camello para propagar el error a la ruta de llamada.