camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <>
Subject Re: Camel Routing based on bean return object
Date Mon, 02 Mar 2009 08:55:56 GMT
On Mon, Mar 2, 2009 at 9:47 AM, ee7arh <> wrote:
> Hi Markus,
> Thanks for advice. Yes that would work but as you pointed out it's not ideal
> since it's then not possible to see where the message will end up just by
> reading the Routing definition. I would like to make my RouteBuilder as
> readable as possible.
> Does you know whether it's possible to cast the "body()" of a message to
> it's base object?
> Perhaps this would work?
> from("jms:queue:queue1").to("bean:myBeanMethod1").choice()
> .when(body().convertTo(MyReturnCodeEnum.class).isEqualTo(MyReturnCodeEnum.ERROR_CODE_1))
> .to("jms:queue:error1Queue")
> .when(body().convertTo(MyReturnCodeEnum.class).isEqualTo(MyReturnCodeEnum.ERROR_CODE_2))
> .to("jms:queue:error2Queue")
> I assumed in above example that the actual object on the "from" queue is the
> MyReturnCodeEnum object now rather than the wrapping object MyReturnObj1
Ah now I got the issue. The predicate being tested using isEqualTo
does not automatic convert to same types.
I worked on that a bit, but then realized we cant make a safe
assumption which side of the operator RIGHT or LEFT should be
converter to the other type.

How should camel know which types is correct.

An example:
The left type (= body) can be an Integer with a value of 1. And the
left side is the enum with the ERROR_CODE_1 value.

The two types are not directly comparable so we need to convert it.
But which type is the best?
- Integer
- Enum

In this case it should be enum, but there could be other situations
where the predicate should test for reverse.

Maybe its possible to add tests for all combinations and return true
if there is a match in one of them?

So you can do the body stuff you do, but I think there is a shorthand

And do a static import of your enum so its shorter to write.

> Thanks
> Andrew
> ee7arh wrote:
>> Hi,
>> I'm getting quite into using the Camel DSL router and got quite far but
>> now have this situation:
>> I have a bean method (myBeanMethod1()) which returns not a boolean but a
>> real object (MyReturnObj1). This object contains an Enum return code
>> (myReturnCode) and I want to do some routing based on this returncode.
>> e.g.
>> // Bean Method
>> public MyReturnObj1 myBeanMethod1();
>> The definition of MyReturnObj1 is
>> public class MyReturnObj1 {
>> protected Enum myReturnCode;
>> }
>> I want to do some routing like this:
>> from("jms:queue:queue1").to("bean:myBeanMethod1").choice()
>> .when(myErrorCode=myReturnCode.ERRROR1).to("jms:queue:error1Queue")
>> .when(myErrorCode=myReturnCode.ERROR2).to("jms:queue:error2Queue")
>> .otherwise().to("jms:queue:unknownErrorQueue");
>> Is it possible to somehow do routing based on bean which returns an
>> object? If I set my "returnCode" into the JMS Header field I could use the
>> header() method to get the values as seen in many examples on Camel
>> website.
>> Advice greatly appreciated.
>> Andrew
> --
> View this message in context:
> Sent from the Camel - Users (activemq) mailing list archive at

Claus Ibsen
Apache Camel Committer

Open Source Integration:

View raw message