diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizer.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizer.java index 21fed00b8..597542250 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizer.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizer.java @@ -56,13 +56,14 @@ public class PrefixMatchingCompositeLineTokenizer implements LineTokenizer, Init if (line != null) { for (String key : delegates.keySet()) { - if ("".equals(key)) { - defaultDelegate = delegates.get(key); - // don't break here or the delegate may not be found - } - else if (line.startsWith(key)) { - delegate = delegates.get(key); - break; + if (key != null) { + if ("".equals(key)) { + defaultDelegate = delegates.get(key); + } + else if (line.startsWith(key)) { + delegate = delegates.get(key); + break; + } } } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizerTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizerTests.java index bca65b7df..2536ccc61 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizerTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/PrefixMatchingCompositeLineTokenizerTests.java @@ -49,16 +49,41 @@ public class PrefixMatchingCompositeLineTokenizerTests { @Test public void testNullLineWithKey() throws Exception { Map map = new HashMap(); - map.put(null, new DelimitedLineTokenizer()); + map.put(null, new LineTokenizer() { + public FieldSet tokenize(String line) { + return new DefaultFieldSet(new String[] { "a" }); + } + }); map.put("foo", new LineTokenizer() { public FieldSet tokenize(String line) { - return null; + return new DefaultFieldSet(new String[] { "b" }); } }); tokenizer.setTokenizers(map); tokenizer.afterPropertiesSet(); FieldSet fields = tokenizer.tokenize(null); - assertEquals(0, fields.getFieldCount()); + assertEquals(1, fields.getFieldCount()); + assertEquals("a", fields.readString(0)); + } + + @Test + public void testNullKey() throws Exception { + Map map = new HashMap(); + map.put(null, new LineTokenizer() { + public FieldSet tokenize(String line) { + return new DefaultFieldSet(new String[] { "a" }); + } + }); + map.put("foo", new LineTokenizer() { + public FieldSet tokenize(String line) { + return new DefaultFieldSet(new String[] { "b" }); + } + }); + tokenizer.setTokenizers(map); + tokenizer.afterPropertiesSet(); + FieldSet fields = tokenizer.tokenize("foo"); + assertEquals(1, fields.getFieldCount()); + assertEquals("b", fields.readString(0)); } @Test