骆驼路由循环不起作用

时间:2013-05-28 07:55:36

标签: json loops apache-camel

我正在尝试使用camel和hibernate在mySQL数据库中插入json数据。 一切正常。

for (Module module : modules) {
            from("timer://foo?delay=10000")
                    .loop(7)//not working
                    .to(module.getUrl() + "/api/json")
                    .convertBodyTo(String.class)
                    .process(new Processor() {
                        @Override
                        public void process(Exchange exchange) throws Exception {
                            int index = (Integer)exchange.getProperty("CamelLoopIndex"); // not working
                            ObjectMapper mapper = new ObjectMapper();
                            JsonNode root = mapper.readTree(exchange.getIn().getBody().toString());
                            String[] lijst = {"lastBuild", "lastCompletedBuild", "lastFailedBuild", "lastStableBuild", "lastSuccessfulBuild", "lastUnstableBuild", "lastUnsuccessfulBuild"};

                            JSONObject obj = new JSONObject();

                            JsonNode node = root.get(lijst[index]);
                            JsonNode build = node.get("number");
                            obj.put("description", lijst[index]);
                            obj.put("buildNumber", build);

                            exchange.getIn().setBody(obj.toString());

                        }
                    })
                    .unmarshal(moduleDetail)
                    .to("hibernate:be.kdg.teamf.model.ModuleDetail")
                    .end();
        }

当我调试时,我的CamelLoopIndex保持为0,因此每次循环时它都不会递增。

欢迎所有帮助!

2 个答案:

答案 0 :(得分:0)

在您的情况下,唯一的第一条指令在循环范围内处理:.to(module.getUrl() + "/api/json")。您可以使用Spring DSL向循环中添加更多指令,但我不知道如何使用Java DSL明确声明循环范围。我希望专家能够更多地解释Java DSL中的循环范围。

作为一种解决方法,我建议将所有迭代指令移到单独的direct:路径。

答案 1 :(得分:0)

我无法重现你的问题。这有效:

from("restlet:http://localhost:9010}/loop?restletMethod=get")
  .loop(7)
  .process(new Processor() {
    @Override
    public void process(Exchange exchange) throws Exception {
      int index = (int) exchange.getProperty("CamelLoopIndex");
      exchange.getIn().setBody("index=" + index);
    }
  })
  .convertBodyTo(String.class)
  .end();

输出:

index=6