0

继续另一个线程, Apache Camel:文件到 BeanIO 并基于 id 合并 beanIO 对象

尝试使用 GroupedExchangeAggregationStrategy 对 EmployeeDetails 进行分组,如下所示

from("seda:aggregate").aggregate(simple("${body.id}"), new 
MergeAggregationStrategy()).completionSize(3).log("Details - ${header.details}").to("seda:formList");

from("seda:formList").aggregate(new 
GroupedExchangeAggregationStrategy()).constant(true).completionTimeout(10)
    .process(EmployeeDetailsBeanProcessor).log("Final list of groupedExchangeAggr ${body}")
    .log("FILE PROCESSING COMPLETED");

EmployeeDetailsBeanProcessor:

public class EmployeeDetailsBeanProcessor implements Processor{
    public void process(Exchange exchange) throws Exception {
        ArrayList<EmployeeDetails> rows = exchange.getIn().getBody(ArrayList.class);
        for (EmployeeDetails record : rows)     {
            System.out.println("----- Record:: ----- "+ 
                record.getId() + "    "+ 
                record.getName() + "    " +
                record.getJob() +"    "+
                record.getEmail() + "    "+
                record.getCity()+"    "+
                record.getCode());
        }
    }
}

我的理解是当使用 GroupExchangedAggregationStrategy 时,当前的 Exchange 将被添加到列表中,但是在测试时它添加了 DefaultExchange 而不是当前的 Exchange 和 EmployeeDetails。

ERROR 4236 --- [eTimeoutChecker] o.a.camel.processor.DefaultErrorHandler  : Failed delivery for (MessageId: ID-admin-PC-49678-1508604904882-0-30 on ExchangeId: ID-admin-PC-49678-1508604904882-0-29). Exhausted after delivery 
attempt: 1 caught: java.lang.ClassCastException: org.apache.camel.impl.DefaultExchange cannot be cast to com.test.EmployeeDetails

你能给出一些关于对交易所进行分组的例子或指导吗?提前致谢。

4

1 回答 1

0

不,你的EmployeeDetailsBeanProcessor. body 中的交换是 aList<Exchange>而不是 a List<xxx>

使用GroupedExchangeAggregationStrategy仅在特殊用例中,您可能使用了错误的策略。如果你想组合在一起,List<EmployeeDetails>那么你可以使用FlexibleAggregationStrategy查看这个单元测试的例子:https ://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/ apache/camel/util/toolbox/FlexibleAggregationStrategiesTest.java

于 2017-10-22T06:05:21.233 回答