Author: ggregory Date: Thu May 15 16:26:26 2014 New Revision: 1594966 URL: http://svn.apache.org/r1594966 Log: <action issue="CSV-118" type="fix" dev="ggregory" due-to="Enrique Lara">CSVRecord.toMap() throws NPE on formats with no headers.</action>
Modified: commons/proper/csv/trunk/src/changes/changes.xml commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java Modified: commons/proper/csv/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/changes/changes.xml?rev=1594966&r1=1594965&r2=1594966&view=diff ============================================================================== --- commons/proper/csv/trunk/src/changes/changes.xml (original) +++ commons/proper/csv/trunk/src/changes/changes.xml Thu May 15 16:26:26 2014 @@ -40,11 +40,15 @@ <body> <release version="1.0" date="TBD" description="First release"> + <action issue="CSV-118" type="fix" dev="ggregory" due-to="Enrique Lara">CSVRecord.toMap() throws NPE on formats with no + headers.</action> <action issue="CSV-113" type="fix" dev="sebb">Check whether ISE/IAE are being used appropriately</action> <action issue="CSV-114" type="fix" dev="sebb">CSVFormat constructor should reject a header array with duplicate - entries</action> + entries + </action> <action issue="CSV-112" type="fix" dev="britter">HeaderMap is inconsistent when it is parsed from an input with - duplicate columns names</action> + duplicate columns names + </action> <action issue="CSV-111" type="fix" dev="ggregory">CSVRecord.toMap() fails if row length shorter than header length </action> <action issue="CSV-106" type="fix" dev="ggregory">CSVFormat.format allways append null</action> @@ -55,18 +59,21 @@ </action> <action issue="CSV-99" type="update" dev="britter">Revert Builder implementation in CSVFormat</action> <action issue="CSV-53" type="fix" dev="britter">CSVRecord does not verify that the length of the header mapping - matches the number of values</action> + matches the number of values + </action> <action issue="CSV-93" type="update" dev="ggregory">Allow the handling of NULL values</action> <action issue="CSV-68" type="update" dev="ggregory">Use the Builder pattern for CSVFormat</action> <action issue="CSV-84" type="update" dev="sebb">Clarify comment handling</action> <action issue="CSV-25" type="update" dev="ebourg">CSVParser.nextValue() seems pointless</action> <action issue="CSV-97" type="update" dev="ggregory">Allow the String value for null to be customized for the CSV - printer</action> + printer + </action> <action issue="CSV-88" type="update" dev="ggregory">Not possible to create a CSVFormat from scratch</action> <action issue="CSV-52" type="add" dev="ggregory">Keep track of record number</action> <action issue="CSV-94" type="update" dev="sebb">Lexer should only use char fields</action> <action issue="CSV-92" type="add" dev="ggregory">Need a way to extract parsed headers, e.g. for use in formatting - output</action> + output + </action> <action issue="CSV-65" type="add" dev="ebourg">Header support</action> <action issue="CSV-54" type="fix" dev="sebb">Confusing semantic of the ignore leading/trailing spaces parameters </action> @@ -76,7 +83,8 @@ <action issue="CSV-55" type="update" dev="britter">Replace while(true)-loop in CSVParser.getRecord with do-while-loop </action> <action issue="CSV-34" type="fix" dev="sebb">CSVFormat describes itself as immutable, but it is not - in - particular it is not thread-safe</action> + particular it is not thread-safe + </action> <action issue="CSV-36" type="fix" dev="yonik">Endless loops in CSV parser</action> <action issue="CSV-13" type="fix" dev="ebourg">NullPointerException in CSVPrinter.print()/println()</action> <action issue="CSV-45" type="update" dev="yonik">CSVPrinter overhaul</action> Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java?rev=1594966&r1=1594965&r2=1594966&view=diff ============================================================================== --- commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java (original) +++ commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java Thu May 15 16:26:26 2014 @@ -177,6 +177,9 @@ public final class CSVRecord implements * @return the given map. */ <M extends Map<String, String>> M putIn(final M map) { + if (mapping == null) { + return map; + } for (final Entry<String, Integer> entry : mapping.entrySet()) { final int col = entry.getValue().intValue(); if (col < values.length) { Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java?rev=1594966&r1=1594965&r2=1594966&view=diff ============================================================================== --- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java (original) +++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java Thu May 15 16:26:26 2014 @@ -18,6 +18,7 @@ package org.apache.commons.csv; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -166,6 +167,15 @@ public class CSVRecordTest { final CSVRecord shortRec = parser.iterator().next(); shortRec.toMap(); } + + @Test + public void testToMapWithNoHeader() throws Exception { + final CSVParser parser = CSVParser.parse("a,b", CSVFormat.newFormat(',')); + final CSVRecord shortRec = parser.iterator().next(); + Map<String, String> map = shortRec.toMap(); + assertNotNull("Map is not null.", map); + assertTrue("Map is empty.", map.isEmpty()); + } private void validateMap(final Map<String, String> map, final boolean allowsNulls) { assertTrue(map.containsKey("first"));