code: private <T> T readIntoBean(final T bean, final String[] nameMapping, final CellProcessor[] processors)
  		throws IOException {
  		
  		if( readRow() ) {
  			if( nameMapping.length != length() ) {
  				throw new IllegalArgumentException(String.format(
  					"the nameMapping array and the number of columns read "
  						+ "should be the same size (nameMapping length = %d, columns = %d)", nameMapping.length,
  					length()));
  			}
  			
  			if( processors == null ) {
  				processedColumns.clear();
  				processedColumns.addAll(getColumns());
  			} else {
  				executeProcessors(processedColumns, processors);
  			}
  			
  			return populateBean(bean, nameMapping);
  		}
  		
  		return null; // EOF
  	}
docs: Reads a row of a CSV file and populates the bean, using the supplied name mapping to map column values to the
  appropriate fields. If processors are supplied then they are used, otherwise the raw String values will be used.
  
  @param bean
  the bean to populate
  @param nameMapping
  the name mapping array
  @param processors
  the (optional) cell processors
  @return the populated bean, or null if EOF was reached
  @throws IllegalArgumentException
  if nameMapping.length != number of CSV columns read
  @throws IOException
  if an I/O error occurred
  @throws NullPointerException
  if bean or nameMapping are null
  @throws SuperCsvConstraintViolationException
  if a CellProcessor constraint failed
  @throws SuperCsvException
  if there was a general exception while reading/processing
  @throws SuperCsvReflectionException
  if there was an reflection exception while mapping the values to the bean