我一直在尝试使用camel将XML文件插入到mongoDB中,但我无法使其工作。
我已按照本教程的第一步: http://www.pretechsol.com/2014/09/apache-camel-mongodb-component-example.html
在我的路线中,我将其转换为JSON,然后使用转换键(convert.cody)为mongo识别文件。
该代码适用于常规路由(例如,将文件发送到另一个文件夹)。但是当我为mongoDB运行它时,我在控制台中的所有内容都是我的Process消息,一次又一次,我的数据库从未被填充。由于我没有收到任何错误消息,我不知道如何查找问题来自哪里。
mongoDB名称,ip,用户,密码已经多次检查过。
如果有人可以帮我解决这个问题,我将非常感激。这是我正在使用的文件。 (我将免除你的处理文件)。
驼context.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="myDb" class="com.mongodb.Mongo">
<constructor-arg index="0">
<bean class="com.mongodb.MongoURI">
<constructor-arg index="0"
value="mongodb://username:password@192.168.3.29:27017/db" />
</bean>
</constructor-arg>
</bean>
<bean id="mongodb" class="org.apache.camel.component.mongodb.MongoDbComponent"></bean>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<routeBuilder ref="camelRoute" />
</camelContext>
<bean id="camelRoute" class="infotel.camel.project01.CamelRoute" />
这是我的RoutingFile:
@Component
public class CamelRoute extends SpringRouteBuilder {
final Processor myProcessor = new MyProcessor();
final Processor myProcessorMongo = new MyProcessorMongo();
final XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
@Override
public void configure() {
xmlJsonFormat.setForceTopLevelObject(true);
from("file:xml_files?noop=true").marshal(xmlJsonFormat).convertBodyTo(String.class).process(myProcessorMongo)
.to("mongodb:myDb?database=test_bignav&collection=doc&operation=insert");
}
}
最后这是我的主要内容:
public class MyMain {
public static void main(String[] args) throws Exception {
ApplicationContext context =
new ClassPathXmlApplicationContext("META-INF/spring/camel-context.xml");
}
}
非常感谢。
编辑: 以下是MyProcessorMongo编辑以获取错误:
public class MyProcessorMongo实现Processor {
public void process(Exchange exchange) throws Exception {
System.out.println("\n file transfered to mongo: "+ exchange.getIn().getHeader("CamelFileName"));
exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class).printStackTrace();
}
}
答案 0 :(得分:1)
使用trace="true"
启用跟踪:
<camelContext trace="true" xmlns="http://camel.apache.org/schema/spring">
答案 1 :(得分:0)
很脏但很快,为了得到错误,您可以在configure()
之前将from
方法添加到.onException(Exception.class).handled(true).process(new Processor() {
@Override
public void process(Exchange exchange) {
exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class).printStackTrace();
}
})
:
handled(true)
{{1}}会阻止您的邮件被反复处理。
答案 2 :(得分:0)
感谢您的帮助,我能够收到错误消息。
问题实际上来自mongoDB本身,而不是骆驼或代码。随着用户的更改,连接工作,我可以在集合中插入文档。
答案 3 :(得分:0)
删除&#34; .process(myProcessorMongo)&#34;来自路线配置。
输入xml-&gt; json conversion-&gt;字符串转换 - &gt; MongoDB的。
上面的路由会起作用。
你将交换对象传递给myProcessorMongo但Out消息为null,因此不会将任何内容插入到MongoDB中。 put exchange.getOut()。getBody();在myProcessorMongo中打印它。如果它是null,你必须从交换Obj获取输入消息并将其设置回交换对象中的Out消息属性。