Auke te Winkel created CSV-268:
----------------------------------
Summary: CSVFormat.withFirstRecordAsHeader() resets previously set
headers
Key: CSV-268
URL: https://issues.apache.org/jira/browse/CSV-268
Project: Commons CSV
Issue Type: Bug
Affects Versions: 1.8
Reporter: Auke te Winkel
I migrated from 1.7 to 1.8, which breaks the following code:
{code:java}
CSVFormat csvFormat = CSVFormat.EXCEL
.withDelimiter(delimiter)
.withHeader(csvHeadersEnumClass)
.withFirstRecordAsHeader()
.withIgnoreHeaderCase(true)
.withAllowMissingColumnNames(false)
.withTrim();
{code}
This now results in a CSVFormat with skipHeaderRecord = true but with the
header array emtpy.
This is caused by the fact that .withFirstRecordAsHeader() now resets the
previously set header String[] to empty. This issue did not occur in 1.7.
The Javadoc of this method is ambiguous as to what it should do, as it states
{code:java}
@return A new CSVFormat that is equal to this but using the first record as
header.
{code}
which is not true, as the returned format is not equal to this (header is
reset). However, it also states
{code:java}
<p>
* Calling this method is equivalent to calling:
* </p>
*
* <pre>
* CSVFormat format = aFormat.withHeader().withSkipHeaderRecord();
* </pre>
{code}
which is correct.
Switching the statements, i.e.
{code:java}
CSVFormat csvFormat = CSVFormat.EXCEL
.withDelimiter(delimiter)
.withFirstRecordAsHeader()
.withHeader(csvHeadersEnumClass)
.withIgnoreHeaderCase(true)
.withAllowMissingColumnNames(false)
.withTrim();
{code}
yields a different CSVFormat with skipHeaderRecord = true, but also a
non-empty header array containing the names of the header enum class.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)