2017-02-03 3 views
4

J'utilise scala camel dsl et j'ai besoin d'attraper des exceptions.Erreur de journal de chameau

Mon pipeline n'enregistre rien dans handle cas:

s"$ftpSource" 
    .log("File is received") 
    .as(classOf[String]) 
    .attempt{ 
     process(failingProcessor) 
    }.handle(classOf[Exception]) apply { 
     process((exchange: Exchange) => logger.error(s"Error during file reading: ${exchange.in.toString}")) 
    } 

Comment attraper correctement les exceptions à l'aide dsl scala? Et comment spécifier la stratégie de restauration? Je ne veux pas qu'il réessaie en cas d'échec.

Le seul petit exemple pauvre que j'ai trouvé est: https://svn.apache.org/repos/asf/camel/trunk/components/camel-scala/src/test/scala/org/apache/camel/scala/dsl/TryCatchFinallyTest.scala

+0

p.s. seulement "cast" le contenu du fichier dans une chaîne quand le fichier est très petit –

Répondre

2

réponse Opinionated ..

à mon humble avis, vous devriez essayer d'utiliser le chameau comme déclarative langue. Je trouve toujours le « try ... catch » dsl trop impératif

Voici un exemple d'utiliser un gestionnaire d'exceptions plus déclarative

handle[MyException] { 
    log("handling exception") 
    process((e : Exchange) => e.in = "an error occured") 
}.handled 

"jetty:http://localhost:9091/service" ==> { 

    id ("some-error-route") 
    log("processing request") 
    process((e : Exchange) => e.in = e.in[String].reverse) 
    process((_: Exchange) => throw new MyException("Something went wrong")) 
    log("done") 

} 

Je vous recommande de vérifier l'excellent livre Camel In action pour différentes façons d'erreurs de manipulation.

+0

Wow! thx je vais vérifier demain – ipoteka