From 3f17b90438dcba87c362de014e6672d889f2fc69 Mon Sep 17 00:00:00 2001 From: Drummond Dawson Date: Wed, 2 Oct 2019 22:23:34 -0400 Subject: [PATCH] Support empty delimiter in DelimitedBuilder of FlatFileItemWriterBuilder Previously, if supplying an empty delimiter, to the delimited().delimiter() of DelimitedBuilder from the parent FlatFileItemWriterBuilder, it would be ignored and instead use the default delimiter ",". Resolves BATCH-2844 --- .../builder/FlatFileItemWriterBuilder.java | 5 +--- .../FlatFileItemWriterBuilderTests.java | 30 ++++++++++++++++++- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilder.java index 035ce1508..65a5a9c8e 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilder.java @@ -33,7 +33,6 @@ import org.springframework.batch.item.file.transform.FormatterLineAggregator; import org.springframework.batch.item.file.transform.LineAggregator; import org.springframework.core.io.Resource; import org.springframework.util.Assert; -import org.springframework.util.StringUtils; /** * A builder implementation for the {@link FlatFileItemWriter} @@ -463,9 +462,7 @@ public class FlatFileItemWriterBuilder { "A list of field names or a field extractor is required"); DelimitedLineAggregator delimitedLineAggregator = new DelimitedLineAggregator<>(); - if (StringUtils.hasLength(this.delimiter)) { - delimitedLineAggregator.setDelimiter(this.delimiter); - } + delimitedLineAggregator.setDelimiter(this.delimiter); if (this.fieldExtractor == null) { BeanWrapperFieldExtractor beanWrapperFieldExtractor = new BeanWrapperFieldExtractor<>(); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilderTests.java index 14eff23d2..7bffcd7e9 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemWriterBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2018 the original author or authors. + * Copyright 2016-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -118,6 +118,34 @@ public class FlatFileItemWriterBuilderTests { assertEquals("HEADER$1,2,3$4,5,6$FOOTER", readLine("UTF-16LE", output)); } + @Test + public void testDelimitedOutputWithEmptyDelimiter() throws Exception { + + Resource output = new FileSystemResource(File.createTempFile("foo", "txt")); + + FlatFileItemWriter writer = new FlatFileItemWriterBuilder() + .name("foo") + .resource(output) + .lineSeparator("$") + .delimited() + .delimiter("") + .names("first", "second", "third") + .encoding("UTF-16LE") + .headerCallback(writer1 -> writer1.append("HEADER")) + .footerCallback(writer12 -> writer12.append("FOOTER")) + .build(); + + ExecutionContext executionContext = new ExecutionContext(); + + writer.open(executionContext); + + writer.write(Arrays.asList(new Foo(1, 2, "3"), new Foo(4, 5, "6"))); + + writer.close(); + + assertEquals("HEADER$123$456$FOOTER", readLine("UTF-16LE", output)); + } + @Test public void testDelimitedOutputWithDefaultFieldExtractor() throws Exception {