当消息从MQTT转移到MongoDB端点时,Apache Camel“Body无法转换为类型DBObject”错误

时间:2015-09-22 20:25:15

标签: mongodb apache-camel

我创建了一个用于MQTT消息转换的Apache Camel Route,从MQTT代理转换到MongoDB。即使消息已经是MongoDB的JSON字符串,我也得到了“Body is not conversible to type DBObject”错误。

现在,我使用DBObject类暂时解决了这个问题。但是如何在Apache Camel中使用没有DBObject的MongoDB JSON字符串消息?

原始路由代码:

from("mqtt:foo?subscribeTopicName=bar/")
.to("mongodb:myDb?database=foo&collection=bar&operation=insert");

DBObject类的当前解决方案:

from("mqtt:foo?subscribeTopicName=bar/").process(
    new Processor(){
        @Override
        public void process(Exchange exchange) throws Exception {
            String payload = exchange.getIn().getBody(String.class);
            DBObject doc=new BasicDBObject();
            doc.put("message", payload);
            exchange.getIn().setBody(doc, DBObject.class);
        }
    }
)
.to("mongodb:myDb?database=foo&collection=bar&operation=insert");

错误日志:

org.apache.camel.component.mongodb.CamelMongoDbException: MongoDB operation = insert, Body is not conversible to type DBObject nor List<DBObject>

1 个答案:

答案 0 :(得分:1)

当正文是DBOject的字符串表示而不是路由期间的转换时应该起作用:

from("mqtt:foo?subscribeTopicName=bar/")
.convertBodyTo(DBObject.class)
.to("mongodb:myDb?database=foo&collection=bar&operation=insert");