2014-10-10 67 views
1

我正在開發一個應用程序來使用apache駱駝處理多個csv文件。處理涉及多重轉換和驗證。文件處理設計suggesstion

文件的格式可以是動態的,但我們會在它到達之前始終獲得csv頭。 我不想在每次新格式到達時添加新模型,而是要使用鍵值對創建映射。 但是對於簡單的驗證和複雜的規則,我不得不將它轉換成一個bean(因爲使用了drools和bean驗證)。

如果我爲傳入文件創建了大量模型,那麼駱駝處理器必須有大量條件語句才能選擇正確的策略進行處理。可能是instanceof(壞主意)或基於類型的策略選擇。

有人可以建議我一個設計方法來解決這個問題。

final CsvDataFormat format = new CsvDataFormat(); 
format.setUseMaps(true); 
format.setDelimiter(","); 

from("direct:start") 
    .unmarshal(format) 
    .process(new Processor() { 
     @Override 
     public void process(final Exchange exchange) throws Exception { 
      final List<Map<String, String>> body = exchange.getIn().getBody(List.class); 
      // transform and/or validate data... 
    }); 

處理器可以將您的數據的Java bean或者直接驗證內容:

+0

這些文件是否包含相同的數據?爲了閱讀csv文件,我會推薦使用Camel Bindy和Dozer的Camel實現來轉換bean。 – Tom 2014-10-10 18:04:28

+0

謝謝Tom..Thats究竟是我在做什麼bindy,dozer,drools和自定義bean驗證。這些文件不具有相同的數據,但具有標題。 Bindy有一個問題,你必須將你的模型保存在單獨的包中,正如我前面所說的,我想通過添加數據庫條目或屬性文件條目來動態調整新文件。我不願意添加Java模型,因爲它們可以擴散。另外,我沒有使用駱駝實現的推土機,因爲我覺得過分依賴駱駝。 – VGaur 2014-10-10 18:11:42

回答

0

你在哪裏得到的列表與地圖控股鍵值對使用Camel CSV組件。

+0

問題是drools需要一個靜態和類型安全的模型。 – VGaur 2014-10-13 18:32:50

+0

@VGaur如果您需要類型安全模型,那麼您必須咬緊牙關,並在每次新模型到達時添加一個新模型。 – 2014-10-23 17:58:26