Thanks very much Claus, adding endChoice() at the end of the filter works 
perfectly.


On 20 Apr 2012, at 08:14, Claus Ibsen wrote:

> Hi
> 
> Have you seen this FAQ.
> http://camel.apache.org/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.html
> 
> Also if you put the predicate inside the filter as a parameter then it
> helps the DSL as well.
> 
> filter( xxxx )
> 
> instead of
> 
> filter().xxxx()
> 
> 
> 
> On Thu, Apr 19, 2012 at 7:06 PM, Xuan Huang <xuan.hu...@gamesys.co.uk> wrote:
>> Hi all,
>> 
>> What I'm trying to do is to authenticate a message before sending it to be 
>> processed using message filter, so I have something like
>> 
>> .filter().method(MyAuthenticator.class, "isAuthenticated")
>> 
>> However in my route builder, I also route the messages based on their types 
>> using choice. So for example I have
>> 
>> from(IN_QUEUE).choice()
>>                .when(header(JMS_TYPE).isEqualTo("Type1"))
>>                    .to("bean:myBean?method=handleMessage")
>>                .when(header(JMS_TYPE).isEqualTo("Type2"))
>>                    .to("bean:yourBean?method=handleMessage")
>>                .otherwise().to("activemq:myqueue.in.DLQ")
>>                .routeId("jms-my-route");
>> 
>> the filter seems to work when I put it before choice, like this
>> 
>> from(IN_QUEUE)
>>                ..filter().method(ClientAuthenticator.class, 
>> "isAuthenticated")
>>                .choice()
>>                .when(header(JMS_TYPE).isEqualTo("Type1"))
>>                    .to("bean:myBean?method=handleMessage")
>>                .when(header(JMS_TYPE).isEqualTo("Type2"))
>>                    .to("bean:yourBean?method=handleMessage")
>>                .otherwise().to("activemq:myqueue.in.DLQ")
>>                .routeId("jms-my-route");
>> 
>> But I want to only authenticate Type1 messages, not Type2 messages.
>> 
>> So I tried
>> 
>> from(IN_QUEUE).choice()
>>                .when(header(JMS_TYPE).isEqualTo("Type1"))
>>                    .filter().method(ClientAuthenticator.class, 
>> "isAuthenticated")
>>                    .to("bean:myBean?method=handleMessage").end()
>>                .when(header(JMS_TYPE).isEqualTo("Type2"))
>>                    .to("bean:yourBean?method=handleMessage")
>>                .otherwise().to("activemq:myqueue.in.DLQ")
>>                .routeId("jms-my-route");
>> 
>> But the second when clauses is not valid.
>> 
>> Can I use filter inside when?If not, is there another solution?
>> 
>> Thanks!
>> xuan
>> 
> 
> 
> 
> -- 
> Claus Ibsen
> -----------------
> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> FuseSource
> Email: cib...@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to