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

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

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

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

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

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

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

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);
    }
}

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

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