0

我正在尝试使用骆驼和休眠在 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,因此它不会在每次通过循环时递增。

欢迎所有帮助!

4

2 回答 2

0

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

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

于 2013-05-28T08:43:37.633 回答
0

I can't reproduce your problem. This works:

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();

Output:

index=6
于 2013-05-28T08:58:35.087 回答