1

我正在从 CSV 文件中读取一些行,将它们转换为业务对象,将它们聚合成批次并将生成的聚合传递给 bean,这可能会抛出PersistenceException. 不知何故像这样: from(file:inputdir).split().tokenize("\n").bean(a).aggregate(constant(true), new AbstractListAggregationStrategy(){...}).completionSize(3).bean(b)

我有一个onException(Exception.class).handled(true).to("file:failuredir").log(). 如果在 上发生异常bean(a),则一切都按预期处理:将错误的行inputdir/input.csv写入failuredir/input.csv。现在如果bean(b)失败,Camel 似乎无法重建原始消息:

message.org.apache.camel.component.file.GenericFileOperationFailedException: Cannot store file: target/failure/ID-myhostname-34516-1372093690069-0-7

尝试了各种尝试来使其正常工作,例如使用 HawtDBAggregationRepository,在我的 AggregationStrategy 中切换useOriginalMessageonException传播异常,我没有想法。

我怎样才能实现bean(b)可以看到的相同行为bean(a)

4

1 回答 1

1

聚合器是一个有状态的 EIP 模式,所以当它发出一条消息时,它就是一个新的 Exchange。因此 bean(b) 无法访问来自文件路由的原始消息。

于 2013-06-25T13:23:18.197 回答