You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Christophe Pache <ch...@crossing-tech.com> on 2014/05/23 12:59:23 UTC

error clauses and reste of the route in scala

Hello everyone,

I'm currently working on error clauses and I got some strange behaviour 
with camel in Scala. I would really enjoy having some feedback on what 
I've tried to do because I haven't found any help on that. I saw Java 
example that seamed to work and it's really currious for me.


  My Problem is to separate the exception handling route from the main 
route. I know this is not realistic use. I would like to have a main 
route such as : from(direct).process.to(mock) while allowing the 
IllegalArgumentException to continue the main flow. The following code 
doesn't compile with error "value to is not a member of ?0". When I try 
to separate the route into separated parts, the type gets to Any instead 
of ProcessorDefinition of Any which I thing could be the error. I don't 
get this compilation error if I remove the processor from the route.

     class MyRoute extends RouteBuilder {

       def configure() {

         val exceptionProcessor = new Processor {
           def process(ex: Exchange) {
             throw ex.getIn.getBody(classOf[Exception])
           }
         }

from("direct:input").onException(classOf[IllegalArgumentException])
.continued(true).end().process(exceptionProcessor).to("mock:toto")

       }
     }

Even harder to understand, the following is working well:

def configure() {

         val exceptionProcessor = new Processor {
           def process(ex: Exchange) {
             throw ex.getIn.getBody(classOf[Exception])
           }
         }

         onException(classOf[IllegalArgumentException]).continued(new 
Predicate {
           override def matches(exchange: Exchange): Boolean = {
exchange.getIn().getBody(classOf[Exception]).getMessage.contains("toto")
           }
         })

from("direct:input").process(exceptionProcessor).to("mock:output")
       }
     }

Thanks a lot for any comment/help.

Christophe

Re: error clauses and reste of the route in scala

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

The Camel scala DSL could use some love from some Scala fans. So any
contributions and improvements is welcome.



On Fri, May 23, 2014 at 12:59 PM, Christophe Pache
<ch...@crossing-tech.com> wrote:
> Hello everyone,
>
> I'm currently working on error clauses and I got some strange behaviour with
> camel in Scala. I would really enjoy having some feedback on what I've tried
> to do because I haven't found any help on that. I saw Java example that
> seamed to work and it's really currious for me.
>
>
>  My Problem is to separate the exception handling route from the main route.
> I know this is not realistic use. I would like to have a main route such as
> : from(direct).process.to(mock) while allowing the IllegalArgumentException
> to continue the main flow. The following code doesn't compile with error
> "value to is not a member of ?0". When I try to separate the route into
> separated parts, the type gets to Any instead of ProcessorDefinition of Any
> which I thing could be the error. I don't get this compilation error if I
> remove the processor from the route.
>
>     class MyRoute extends RouteBuilder {
>
>       def configure() {
>
>         val exceptionProcessor = new Processor {
>           def process(ex: Exchange) {
>             throw ex.getIn.getBody(classOf[Exception])
>           }
>         }
>
> from("direct:input").onException(classOf[IllegalArgumentException])
> .continued(true).end().process(exceptionProcessor).to("mock:toto")
>
>       }
>     }
>
> Even harder to understand, the following is working well:
>
> def configure() {
>
>         val exceptionProcessor = new Processor {
>           def process(ex: Exchange) {
>             throw ex.getIn.getBody(classOf[Exception])
>           }
>         }
>
>         onException(classOf[IllegalArgumentException]).continued(new
> Predicate {
>           override def matches(exchange: Exchange): Boolean = {
> exchange.getIn().getBody(classOf[Exception]).getMessage.contains("toto")
>           }
>         })
>
> from("direct:input").process(exceptionProcessor).to("mock:output")
>       }
>     }
>
> Thanks a lot for any comment/help.
>
> Christophe



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/