code: public String[] readHeader(BufferedReader bufferedReader, ParseError parseError)
  			throws ParseException, IOException {
  		checkEntityConfig();
  		String header = bufferedReader.readLine();
  		if (header == null) {
  			if (parseError == null) {
  				throw new ParseException("no header line read", 0);
  			} else {
  				parseError.setErrorType(ErrorType.NO_HEADER);
  				parseError.setLineNumber(getLineNumber(bufferedReader));
  				return null;
  			}
  		}
  		String[] columns = processHeader(header, parseError, getLineNumber(bufferedReader));
  		if (columns == null) {
  			return null;
  		} else if (headerValidation && !validateHeaderColumns(columns, parseError, getLineNumber(bufferedReader))) {
  			if (parseError == null) {
  				throw new ParseException("header line is not valid: " + header, 0);
  			} else {
  				return null;
  			}
  		}
  		return columns;
  	}
docs: Read in a line and process it as a CSV header.
  
  @param bufferedReader
  Where to read the header from. It needs to be closed by the caller. Consider using
  {@link BufferedReaderLineCounter} to populate the line-number for parse errors.
  @param parseError
  If not null, this will be set with the first parse error and it will return null. If this is null then
  a ParseException will be thrown instead.
  @return Array of header column names or null on error.
  @throws ParseException
  Thrown on any parsing problems. If parseError is not null then the error will be added there and an
  exception should not be thrown.
  @throws IOException
  If there are any IO exceptions thrown when reading.