基于对象值的Camel路由

时间:2016-09-22 05:48:24

标签: java json apache-camel

我有两个简单的Camel路由,用于写入jms队列并从中读取。我将序列化对象放入队列。我能够将它反序列化并成功地将其转换为json。

写作路线:

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

我阅读的路线:

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

现在我想检查对象中的一个字段并根据该字段进行路由。该字段也不应该是最终json的一部分。

我可以根据它检查对象和路由中的值(比如写入不同的文件吗?)。我可以在pojo中添加注释以避免最终json中的字段

我想过将对象转换为json,然后发送到队列。然后我可以使用jsonpath进行条件路由。但是,我如何从最终的json中省略一个字段?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用基于内容的路由来检查传入对象中的任何字段,并根据该字段进行路由。

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

要在json编组期间忽略某个字段,可以使用@JsonIgnore - Jackson注释。

答案 1 :(得分:0)

作为参考,我能够让它运作起来。我添加了一个自定义过滤器类并检查其中的bean值。还在选择选项中将其链接到路由。 我的路线现在是:

   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()

这里Exp是一个普通类,checkfieldA和checkfieldB是两个返回布尔值的方法。

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;
           }
       }

    }