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

Reply via email to