将驼峰路由中的XmlFile(或其他)插入到mongoDB中

时间:2014-11-26 16:42:33

标签: json spring mongodb apache-camel

我一直在尝试使用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();
}

}

4 个答案:

答案 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消息属性。