2013-05-28 69 views
0

我試圖在使用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,因此每次它經過循環時都不會遞增。

歡迎所有幫助!

回答

0

在你的情況的唯一第一指令在環路中的範圍進行處理:.to(module.getUrl() + "/api/json")。您可以使用Spring DSL將更多指令添加到循環中,但我不知道如何使用Java DSL明確聲明循環範圍。我希望專家能夠解釋更多關於Java DSL中的循環範圍的內容。

作爲一種解決辦法,我建議將所有重複的指令到一個單獨的direct:路線。

+0

循環,直到去年底'()'。所以我認爲你錯了。 – 2013-05-28 08:45:38

+0

我遇到了和你一樣的問題。看起來循環範圍在第一個to()指令關閉,看起來end()指令沒有意義。我沒有在文檔中找到任何有關它的信息。 –

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