我正在開發一個應用程序來使用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或者直接驗證內容:
這些文件是否包含相同的數據?爲了閱讀csv文件,我會推薦使用Camel Bindy和Dozer的Camel實現來轉換bean。 – Tom 2014-10-10 18:04:28
謝謝Tom..Thats究竟是我在做什麼bindy,dozer,drools和自定義bean驗證。這些文件不具有相同的數據,但具有標題。 Bindy有一個問題,你必須將你的模型保存在單獨的包中,正如我前面所說的,我想通過添加數據庫條目或屬性文件條目來動態調整新文件。我不願意添加Java模型,因爲它們可以擴散。另外,我沒有使用駱駝實現的推土機,因爲我覺得過分依賴駱駝。 – VGaur 2014-10-10 18:11:42