2014-10-10 61 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