Camel routing based on object value

三世轮回 提交于 2019-12-14 03:57:17

问题


I have two simple Camel routes working for writing to a jms queue and reading from it. I am putting a serialized object to the queue. I am able to deserialize it and covert it to json successfully.

Route for writing:

from("direct:message").to("jms:myqueu")

My route for reading:

from("jms:myqueu")
.marshal()
.json(JsonLibrary.Gson).
.to("file://cc")

Now i want to check a field within the object and route based on that.Also that field should not be part of the final json.

Can i check the value within the object and route based on that( like write to different files?). I can add the annotation in the pojo to avoid the field in final json

I thought of converting object to json, and then sending to queue. Then i can use jsonpath for conditional routing. But then how can i omit a field from final json?


回答1:


Yes, you can use content based routing to check any field in incoming object and do the routing based on that.

ref: http://camel.apache.org/content-based-router.html

To ignore a field during json marshalling , you can use @JsonIgnore - Jackson annotation.




回答2:


For reference, i was able to get it working. I added a custom filter class and checked the bean value within that. Also linked it within the choose option for routing. My route is now:

   from("jms:myqueu")
    .choice()
        .when()
            .method(Exp.class,"checkfieldA")
            .json(JsonLibrary.Gson).
            .to("file://cc")
         .when() 
            .method(Exp.class,"checkfieldB")
            .json(JsonLibrary.Gson).
            .to("file://dd")
     .endChoice()

Here Exp is a normal class and checkfieldA and checkfieldB are two methods returning boolean values.

class Exp{

    public boolean checkfieldA(Message message){
      myobj obj = (myobj)message.getBody() // this is the object is put to queue. Need to cast to my object type .
        if(myobj.isFieldA()){
            return true;
           }
       }

    }


来源:https://stackoverflow.com/questions/39631153/camel-routing-based-on-object-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!