Valide todos os campos em um único passo com o SuperCSV

Eu estou tentando escrever um grande número de linhas (~ 2 milhões) de um banco de dados para um arquivo CSV usando SuperCSV. Eu preciso executar a validação em cada célula, como está escrito, e os CellProcessors internos fazem muito bem. Eu quero capturar todas as exceções que são lançadas pelos CellProcessors para que eu possa voltar para os dados de origem e fazer alterações.

O problema é que, quando há vários erros em uma única linha (por exemplo, o primeiro valor está fora do intervalo, o segundo valor é nulo, mas não deve ser), somente o primeiro CellProcessor será executado e, portanto, só veremos um dos erros. Eu quero processar o arquivo inteiro em uma única passagem e ter um conjunto completo de exceções no final dele.

Este é o tipo de abordagem que estou tentando:

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

Como posso conseguir isso? Obrigado!

EDIT: Aqui está o código que eu escrevi é semelhante ao do Hound Dog, no caso de ajudar alguém:

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

questionAnswers(1)

yourAnswerToTheQuestion