diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java index 62e32c23c..0581baf8b 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizer.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; +import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -33,7 +34,8 @@ import org.springframework.util.StringUtils; * @author Dave Syer * @author Michael Minella */ -public class DelimitedLineTokenizer extends AbstractLineTokenizer { +public class DelimitedLineTokenizer extends AbstractLineTokenizer + implements InitializingBean { /** * Convenient constant for the common case of a tab delimiter. */ @@ -76,6 +78,7 @@ public class DelimitedLineTokenizer extends AbstractLineTokenizer { * @param delimiter the desired delimiter */ public DelimitedLineTokenizer(String delimiter) { + Assert.notNull(delimiter); Assert.state(!delimiter.equals(String.valueOf(DEFAULT_QUOTE_CHARACTER)), "[" + DEFAULT_QUOTE_CHARACTER + "] is not allowed as delimiter for tokenizers."); @@ -256,4 +259,9 @@ public class DelimitedLineTokenizer extends AbstractLineTokenizer { protected boolean isQuoteCharacter(char c) { return c == quoteCharacter; } + + @Override + public void afterPropertiesSet() throws Exception { + Assert.state(null != delimiter && 0 != delimiter.length()); + } } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java index 110dc8cb9..bb9f2aa76 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/transform/DelimitedLineTokenizerTests.java @@ -130,7 +130,20 @@ public class DelimitedLineTokenizerTests { FieldSet line = tokenizer.tokenize("a b c"); assertEquals(3, line.getFieldCount()); } - + + @Test(expected=IllegalArgumentException.class) + public void testDelimitedLineTokenizerNullDelimiter() { + AbstractLineTokenizer tokenizer = new DelimitedLineTokenizer(null); + tokenizer.tokenize("a b c"); + } + + @Test(expected=IllegalStateException.class) + public void testDelimitedLineTokenizerEmptyString() throws Exception { + DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(""); + tokenizer.afterPropertiesSet(); + tokenizer.tokenize("a b c"); + } + @Test public void testDelimitedLineTokenizerString() { AbstractLineTokenizer tokenizer = new DelimitedLineTokenizer(" b ");