Author: niallp Date: Mon Feb 4 00:55:29 2008 New Revision: 618207 URL: http://svn.apache.org/viewvc?rev=618207&view=rev Log: Fix for BEANUTILS-302 - NPE in ArrayConverter when converting a string with underscores to a string array - reported by Martin Bartlett
Modified: commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java Modified: commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java?rev=618207&r1=618206&r2=618207&view=diff ============================================================================== --- commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java (original) +++ commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/converters/ArrayConverter.java Mon Feb 4 00:55:29 2008 @@ -434,10 +434,12 @@ while (true) { int ttype = st.nextToken(); if ((ttype == StreamTokenizer.TT_WORD) || (ttype > 0)) { - if (list == null) { - list = new ArrayList(); + if (st.sval != null) { + if (list == null) { + list = new ArrayList(); + } + list.add(st.sval); } - list.add(st.sval.trim()); } else if (ttype == StreamTokenizer.TT_EOF) { break; } else { Modified: commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java URL: http://svn.apache.org/viewvc/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java?rev=618207&r1=618206&r2=618207&view=diff ============================================================================== --- commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java (original) +++ commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/converters/ArrayConverterTestCase.java Mon Feb 4 00:55:29 2008 @@ -361,6 +361,33 @@ } /** + * Test for BEANUTILS-302 - throwing a NPE when underscore used + */ + public void testUnderscore_BEANUTILS_302() { + String value = "first_value,second_value"; + ArrayConverter converter = new ArrayConverter(String[].class, new StringConverter()); + + // test underscore not allowed (the default) + String[] result = (String[])converter.convert(String[].class, value); + assertNotNull("result.null", result); + assertEquals("result.length", 4, result.length); + assertEquals("result[0]", "first", result[0]); + assertEquals("result[1]", "value", result[1]); + assertEquals("result[2]", "second", result[2]); + assertEquals("result[3]", "value", result[3]); + + // configure the converter to allow underscore + converter.setAllowedChars(new char[] {'.', '-', '_'}); + + // test underscore allowed + result = (String[])converter.convert(String[].class, value); + assertNotNull("result.null", result); + assertEquals("result.length", 2, result.length); + assertEquals("result[0]", "first_value", result[0]); + assertEquals("result[1]", "second_value", result[1]); + } + + /** * Check that two arrays are the same. * @param msg Test prefix msg * @param expected Expected Array value