2015-03-03 82 views
0

我有一個包含一組用戶的大型CSV文件。我正在尋找一種簡單的方法來讀取文件,映射到一個Java對象,並將該對象傳遞給將對該對象執行一些操作的處理器。 所以我打上表示CSV文件註釋一個Java bean:駱駝CSV轉換爲Java對象

@CsvRecord(separator = ",") 
public class User { 
    @DataField(pos = 1) 
    private String username; 
    @DataField(pos = 2) 
    private String group; 

} 

然後我就開始編寫一個駱駝路線,但我不能找出如何通過CSV爲Java對象端點:

CamelContext context = new DefaultCamelContext(); 
    final DataFormat bindy = new BindyCsvDataFormat("com.sample.model"); 
    context.addRoutes(new RouteBuilder() { 
     public void configure() { 
      from("file:/usr/camel/in?noop=true"). 
      unmarshal(bindy) 
      .to("??????"); 
     } 
}); 

目標端點應該是一個接收用戶對象的java類。有可能做到這一點嗎?由於

回答

1

你可以使用一個Processor的一個實例來處理POJO:

Processor myProcessor = new Processor() { 
     @Override 
     public void process(Exchange exchange) throws Exception { 
      // do something here 
     } 
    }; 

    from("file:/usr/camel/in?noop=true") 
    .unmarshal(bindy) 
    .process(myProcessor); 

解決方案2:你可以使用一個bean。首先,添加這種「豆」類:

public class MyBean { 
    public void process(List<String> list) { 
     System.out.println("list contains " + list.size() + " elements."); 
    } 
} 

而現在,Camel Bean Binding發生在交易所裏「在」體並將其作爲參數傳遞給你的bean(避免整個exchange.getIn().getBody()部分)。

​​

如果要使用不同的參數,以你的bean,您可以使用方法調用與simple表達式,像這樣:

.bean(new MyBean(), "process(${body.get(0).etc...})") 
+0

謝謝,我實現了一個簡單的處理器,但是在爲了檢索我不得不挖掘到Body中的對象,然後到包含HashMaps的數據的ArrayList中。有沒有更簡單的方法來從處理器檢索POJO? '公共類SimpleProcessor實現處理器{ \t公共無效處理(交易交換)拋出異常{ \t \t ArrayList的列表=(ArrayList的)exchange.getIn()getBody();對於(HashMap地圖:list){ \t \t \t Iterator iter = map.entrySet()。iterator(); (iter.hasNext()){ \t \t \t while(iter.hasNext()){ \t \t System.out.println(「user」+ iter.next()); \t \t} }' \t \t \t \t \t}} 再次 – user2824073 2015-03-03 12:18:26

+0

謝謝顯示得很清楚如何解決這個問題。 – user2824073 2015-03-03 13:03:56

+0

不用擔心,駱駝好運,這是一個很棒的框架,一旦你使用它一段時間:) – vikingsteve 2015-03-03 13:04:45