[
https://issues.apache.org/jira/browse/CSV-268?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18061417#comment-18061417
]
Makarand Hinge commented on CSV-268:
------------------------------------
Thank you [~ggregory] for the clarification.
My concern was that withFirstRecordAsHeader() resets any previously configured
headers, which might be surprising if someone chains deprecated with* methods.
However, since all with* methods are deprecated and the builder API is the
intended replacement, I understand that modifying deprecated behavior may not
be desirable.
In that case, would you prefer closing this issue as “won’t fix” and rely on
migration to the builder API, or should we improve documentation to clarify the
behavior?
> 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
> Priority: Minor
>
> 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.20.10#820010)