Проверяйте каждое поле за один проход с помощью SuperCSV

я пытаюсь записать большое количество строк (~ 2 миллиона) из базы данных в файл CSV, используя SuperCSV. Мне нужно выполнить проверку каждой ячейки, как она написана, и встроенные CellProcessors работают очень хорошо. Я хочу захватить все исключения, которые вызываются CellProcessors, чтобы я мог вернуться к исходным данным и внести изменения.

Проблема заключается в том, что когда в одной строке несколько ошибок (например, первое значение выходит за пределы диапазона, второе значение равно нулю, но не должноt), будет выполняться только первый CellProcessor, и поэтому яЯ увижу только одну из ошибок. Я хочу обработать весь файл за один проход и получить полный набор исключений в конце.

Это такой подход, который яя пытаюсь:

for (Row row : rows) {
    try {
        csvBeanWriter.write(row, HEADER_MAPPINGS, CELL_PROCESSORS);
    } catch (SuperCsvCellProcessorException e) {
        log(e);
    }
}

Как мне этого добиться? Спасибо!

РЕДАКТИРОВАТЬ: Вот код, который я написал, чтопохож на Hound Dog 's, на случай, если это кому-нибудь поможет:

import java.util.List;

import org.supercsv.cellprocessor.CellProcessorAdaptor;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.exception.SuperCsvCellProcessorException;
import org.supercsv.util.CsvContext;

public class ExceptionCapturingCellProcessor extends CellProcessorAdaptor {

    private final List exceptions;

    private final CellProcessor current;

    public ExceptionCapturingCellProcessor(CellProcessor current, CellProcessor next, List exceptions) {
        super(next);
        this.exceptions = exceptions;
        this.current = current;
    }

    @Override
    public Object execute(Object value, CsvContext context) {
        // Check input is not null
        try {
            validateInputNotNull(value, context);
        } catch (SuperCsvCellProcessorException e) {
            exceptions.add(e);
        }

        // Execute wrapped CellProcessor
        try {
            current.execute(value, context);
        } catch (SuperCsvCellProcessorException e) {
            exceptions.add(e);
        }

        return next.execute(value, context);
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос