Я пытаюсь написать большое количество строк (~ 2 миллиона) из базы данных в CSV файл, используя SuperCSV. Мне нужно выполнить проверку на каждую ячейку, поскольку она написана, а встроенные CellProcessors - очень хорошо. Я хочу захватить все исключения, которые бросают CellProcessors, чтобы я мог вернуться к исходным данным и внести изменения.
Проблема заключается в том, что при наличии нескольких ошибок в одной строке (например, первое значение выходит за пределы диапазона, второе значение равно null, но не должно быть), будет выполняться только первый CellProcessor, и поэтому я буду только увидеть одну из ошибок. Я хочу обрабатывать весь файл за один проход и иметь полный набор исключений в конце его.
Вот такой подход, который я пытаюсь сделать:
for (Row row : rows) {
    try {
        csvBeanWriter.write(row, HEADER_MAPPINGS, CELL_PROCESSORS);
    } catch (SuperCsvCellProcessorException e) {
        log(e);
    }
}
Как я могу это достичь? Спасибо!
EDIT: Вот код, который я написал, похожий на 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<Exception> exceptions;
    private final CellProcessor current;
    public ExceptionCapturingCellProcessor(CellProcessor current, CellProcessor next, List<Exception> 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);
    }
}