我创建了一个用于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>
答案 0 :(得分:1)
当正文是DBOject的字符串表示而不是路由期间的转换时应该起作用:
from("mqtt:foo?subscribeTopicName=bar/")
.convertBodyTo(DBObject.class)
.to("mongodb:myDb?database=foo&collection=bar&operation=insert");