我正在开发一个应用程序来使用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