Camel - обогащение CSV с FTP с CSV с локального диска с помощью Camel Bindy - PullRequest
0 голосов
/ 06 января 2020

Целью является создание отчета каждый час путем сравнения двух файлов CSV с использованием Camel 3.0.0. Один находится на FTP-сервере, другой на диске. Как использовать шаблон обогащения опроса в сочетании с демаршализацией CSV на диске с помощью Bindy Dataformat?

Пример кода (для простоты конечная точка FTP заменена конечной точкой файла):

@Component
public class EnricherRoute extends RouteBuilder {
    @Override
    public void configure() {
        from("file://data?fileName=part_1.csv&scheduler=quartz2&scheduler.cron=0+0+0/1+*+*+?")
            .unmarshal().bindy(BindyType.Csv, Record.class)
            .pollEnrich("file://data?fileName=part_2.csv", new ReportAggregationStrategy())
            .marshal().bindy(BindyType.Csv, Record.class)
            .to("file://reports?fileName=report_${date:now:yyyyMMdd}.csv");

    }
}

проблема в этом примере состоит в том, что в ReportAggregationStrategy resource (исходя из data/part_2.csv, см. ниже) не является беспорядочным. Как также демаршировать data/part_2.csv?

public class ReportAggregationStrategy implements AggregationStrategy {
    @Override
    public Exchange aggregate(Exchange original, Exchange resource) {
        final List<Record> originalRecords = original.getIn().getBody(List.class);
        final List<Record> resourceRecords = resource.getIn().getBody(List.class); // Results in errors!

        ...
    }
}

1 Ответ

1 голос
/ 06 января 2020

Вы можете обернуть обогащение с помощью прямой конечной точки и выполнить демаршалинг там.

from("file://data?fileName=part_1.csv&scheduler=quartz2&scheduler.cron=0+0+0/1+*+*+?")
    .unmarshal().bindy(BindyType.Csv, Record.class)
    .enrich("direct:enrich_record", new ReportAggregationStrategy())
    .marshal().bindy(BindyType.Csv, Record.class)
    .to("file://reports?fileName=report_${date:now:yyyyMMdd}.csv");

from("direct:enrich_record")
    .pollEnrich("file://data?fileName=part_2.csv")
    .unmarshal().bindy(BindyType.Csv, Record.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...