верблюд Бинди @csvRecord генерирует нижний колонтитул - PullRequest
0 голосов
/ 25 сентября 2018

Я сгенерировал CSV-файл с верблюдом Бинди, используя @csvRecord, но не смог сгенерировать нижний колонтитул для этого CSV, чтобы показать общее количество записей в файле.Я мог генерировать с записью @FixedLenght, но не с @csvRecord.Пожалуйста, предоставьте любые предложения

1 Ответ

0 голосов
/ 25 сентября 2018

Вы не можете сгенерировать нижний колонтитул в CSV так же, как в FixedLength с использованием camel-bindy.

В зависимости от данных, вы можете добавить дополнительную запись с информацией об общем количестве и т. Д.

РЕДАКТИРОВАНИЕ:

Пример CSV-файла:

FIELD1;FIELD2
test1;4
test3;6

Класс CsvFilePojo:

import org.apache.camel.dataformat.bindy.annotation.CsvRecord;
import org.apache.camel.dataformat.bindy.annotation.DataField;

@CsvRecord(separator = ";", skipFirstLine = true)
public class CsvFilePojo {

    @DataField(pos = 1)
    private String field1;

    @DataField(pos = 2)
    private Integer field2;

    public CsvFilePojo(String field1, Integer field2) {
        this.field1 = field1;
        this.field2 = field2;
    }

    public CsvFilePojo() {
    }

    public String getField1() {
        return field1;
    }

    public void setField1(String field1) {
        this.field1 = field1;
    }

    public Integer getField2() {
        return field2;
    }

    public void setField2(Integer field2) {
        this.field2 = field2;
    }

    @Override
    public String toString() {
        return String.format("field1: %s; field2: %s", field1, field2);
    }

}

Класс CountTotalProcessor:

import java.util.List;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class CountTotalProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        List<CsvFilePojo> csvlist = exchange.getIn().getBody(List.class);

        // count total
        Integer total = 0;
        for (CsvFilePojo c : csvlist) {
            total += c.getField2();
        }

        // add total as last record in csv data
        csvlist.add(new CsvFilePojo("total", total));
        exchange.getIn().setBody(csvlist);
    }
}

Класс MyRouteBuilder:

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat;

public class MyRouteBuilder extends RouteBuilder {

    public void configure() {
        //@formatter:off
        from("file:csvFiles")
            .log("gotFile ${file:name}")
            .to("direct:processFile")
            .to("file:processedCsvFiles");

        from("direct:processFile")
            .log("processing CSV file")
            .unmarshal(new BindyCsvDataFormat(CsvFilePojo.class))
            .process(new CountTotalProcessor())
            .split(simple("${body}"))
                .log("Body ${body}")
            .end()
            ;
    }

}

С этим примером CSV-файла этот маршрут будет производить CSV-файл, подобный следующему:

FIELD1;FIELD2
test1;4
test3;6
total;10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...