Change Resource to WritableResource in file-based item writers

Resolves #756
This commit is contained in:
Mahmoud Ben Hassine
2022-04-13 11:17:47 +02:00
parent 74e8caa368
commit 5bce15288a
16 changed files with 73 additions and 70 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2007 the original author or authors.
* Copyright 2006-2022 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.
@@ -19,15 +19,15 @@ package org.springframework.batch.item.file;
import org.springframework.batch.item.ItemStream;
import org.springframework.batch.item.ItemStreamWriter;
import org.springframework.batch.item.ItemWriter;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
/**
* Interface for {@link ItemWriter}s that implement {@link ItemStream} and write
* output to {@link Resource}.
* output to {@link WritableResource}.
*
* @author Robert Kasanicky
*/
public interface ResourceAwareItemWriterItemStream<T> extends ItemStreamWriter<T> {
void setResource(Resource resource);
void setResource(WritableResource resource);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2019 the original author or authors.
* Copyright 2016-2022 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.
@@ -31,7 +31,7 @@ import org.springframework.batch.item.file.transform.DelimitedLineAggregator;
import org.springframework.batch.item.file.transform.FieldExtractor;
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.core.io.WritableResource;
import org.springframework.util.Assert;
/**
@@ -48,7 +48,7 @@ public class FlatFileItemWriterBuilder<T> {
protected Log logger = LogFactory.getLog(getClass());
private Resource resource;
private WritableResource resource;
private boolean forceSync = false;
@@ -108,13 +108,13 @@ public class FlatFileItemWriterBuilder<T> {
}
/**
* The {@link Resource} to be used as output.
* The {@link WritableResource} to be used as output.
*
* @param resource the output of the writer.
* @return The current instance of the builder.
* @see FlatFileItemWriter#setResource(Resource)
* @see FlatFileItemWriter#setResource(WritableResource)
*/
public FlatFileItemWriterBuilder<T> resource(Resource resource) {
public FlatFileItemWriterBuilder<T> resource(WritableResource resource) {
this.resource = resource;
return this;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018 the original author or authors.
* Copyright 2018-2022 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.
@@ -20,13 +20,13 @@ import java.util.Iterator;
import java.util.List;
import org.springframework.batch.item.support.AbstractFileItemWriter;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
/**
* Item writer that writes data in json format to an output file. The location
* of the output file is defined by a {@link Resource} and must represent a
* of the output file is defined by a {@link WritableResource} and must represent a
* writable file. Items are transformed to json format using a
* {@link JsonObjectMarshaller}. Items will be enclosed in a json array as follows:
*
@@ -61,7 +61,7 @@ public class JsonFileItemWriter<T> extends AbstractFileItemWriter<T> {
* @param resource to write json data to
* @param jsonObjectMarshaller used to marshal object into json representation
*/
public JsonFileItemWriter(Resource resource, JsonObjectMarshaller<T> jsonObjectMarshaller) {
public JsonFileItemWriter(WritableResource resource, JsonObjectMarshaller<T> jsonObjectMarshaller) {
Assert.notNull(resource, "resource must not be null");
Assert.notNull(jsonObjectMarshaller, "json object marshaller must not be null");
setResource(resource);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018 the original author or authors.
* Copyright 2018-2022 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.
@@ -20,7 +20,7 @@ import org.springframework.batch.item.file.FlatFileFooterCallback;
import org.springframework.batch.item.file.FlatFileHeaderCallback;
import org.springframework.batch.item.json.JsonFileItemWriter;
import org.springframework.batch.item.json.JsonObjectMarshaller;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.util.Assert;
/**
@@ -32,7 +32,7 @@ import org.springframework.util.Assert;
*/
public class JsonFileItemWriterBuilder<T> {
private Resource resource;
private WritableResource resource;
private JsonObjectMarshaller<T> jsonObjectMarshaller;
private FlatFileHeaderCallback headerCallback;
private FlatFileFooterCallback footerCallback;
@@ -119,13 +119,13 @@ public class JsonFileItemWriterBuilder<T> {
}
/**
* The {@link Resource} to be used as output.
* The {@link WritableResource} to be used as output.
*
* @param resource the output of the writer.
* @return The current instance of the builder.
* @see JsonFileItemWriter#setResource(Resource)
* @see JsonFileItemWriter#setResource(WritableResource)
*/
public JsonFileItemWriterBuilder<T> resource(Resource resource) {
public JsonFileItemWriterBuilder<T> resource(WritableResource resource) {
this.resource = resource;
return this;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2021 the original author or authors.
* Copyright 2006-2022 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.
@@ -41,13 +41,13 @@ import org.springframework.batch.item.file.ResourceAwareItemWriterItemStream;
import org.springframework.batch.item.util.FileUtils;
import org.springframework.batch.support.transaction.TransactionAwareBufferedWriter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.util.Assert;
/**
* Base class for item writers that write data to a file or stream.
* This class provides common features like restart, force sync, append etc.
* The location of the output file is defined by a {@link Resource} which must
* The location of the output file is defined by a {@link WritableResource} which must
* represent a writable file.<br>
*
* Uses buffered writer to improve performance.<br>
@@ -81,7 +81,7 @@ public abstract class AbstractFileItemWriter<T> extends AbstractItemStreamItemWr
private static final String RESTART_DATA_NAME = "current.count";
private Resource resource;
private WritableResource resource;
protected OutputState state = null;
@@ -128,12 +128,12 @@ public abstract class AbstractFileItemWriter<T> extends AbstractItemStreamItemWr
}
/**
* Setter for resource. Represents a file that can be written.
* Setter for a writable resource. Represents a file that can be written.
*
* @param resource the resource to be written to
*/
@Override
public void setResource(Resource resource) {
public void setResource(WritableResource resource) {
this.resource = resource;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2020 the original author or authors.
* Copyright 2006-2022 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.
@@ -51,7 +51,7 @@ import org.springframework.batch.item.xml.stax.UnclosedElementCollectingEventWri
import org.springframework.batch.item.xml.stax.UnopenedElementClosingEventWriter;
import org.springframework.batch.support.transaction.TransactionAwareBufferedWriter;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
@@ -103,7 +103,7 @@ ResourceAwareItemWriterItemStream<T>, InitializingBean {
private static final String WRITE_STATISTICS_NAME = "record.count";
// file system resource
private Resource resource;
private WritableResource resource;
// xml marshaller
private Marshaller marshaller;
@@ -177,7 +177,7 @@ ResourceAwareItemWriterItemStream<T>, InitializingBean {
* @param resource the output file
*/
@Override
public void setResource(Resource resource) {
public void setResource(WritableResource resource) {
this.resource = resource;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2017-2020 the original author or authors.
* Copyright 2017-2022 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.
@@ -19,7 +19,7 @@ import java.util.Map;
import org.springframework.batch.item.xml.StaxEventItemWriter;
import org.springframework.batch.item.xml.StaxWriterCallback;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.oxm.Marshaller;
import org.springframework.util.Assert;
@@ -34,7 +34,7 @@ import org.springframework.util.Assert;
*/
public class StaxEventItemWriterBuilder<T> {
private Resource resource;
private WritableResource resource;
private Marshaller marshaller;
@@ -80,13 +80,13 @@ public class StaxEventItemWriterBuilder<T> {
}
/**
* The {@link Resource} to be used as output.
* The {@link WritableResource} to be used as output.
*
* @param resource the output from the writer
* @return the current instance of the builder.
* @see StaxEventItemWriter#setResource(Resource)
* @see StaxEventItemWriter#setResource(WritableResource)
*/
public StaxEventItemWriterBuilder<T> resource(Resource resource) {
public StaxEventItemWriterBuilder<T> resource(WritableResource resource) {
this.resource = resource;
return this;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2006-2007 the original author or authors.
* Copyright 2006-2022 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.
@@ -39,7 +39,7 @@ import org.springframework.batch.item.file.transform.LineAggregator;
import org.springframework.batch.item.file.transform.PassThroughLineAggregator;
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
@@ -838,7 +838,7 @@ public class FlatFileItemWriterTests {
* If append=true a new output file should still be created on the first run (not restart).
*/
public void testAppendToNotYetExistingFile() throws Exception {
Resource toBeCreated = new FileSystemResource("target/FlatFileItemWriterTests.out");
WritableResource toBeCreated = new FileSystemResource("target/FlatFileItemWriterTests.out");
outputFile = toBeCreated.getFile(); //enable easy content reading and auto-delete the file

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2016-2021 the original author or authors.
* Copyright 2016-2022 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.
@@ -30,6 +30,7 @@ import org.springframework.batch.item.file.FlatFileItemWriter;
import org.springframework.batch.item.file.transform.PassThroughLineAggregator;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.test.util.ReflectionTestUtils;
import static org.junit.Assert.assertEquals;
@@ -55,7 +56,7 @@ public class FlatFileItemWriterBuilderTests {
@Test(expected = IllegalStateException.class)
public void testMultipleLineAggregators() throws IOException {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
new FlatFileItemWriterBuilder<Foo>()
.name("itemWriter")
@@ -72,7 +73,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void test() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -98,7 +99,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testDelimitedOutputWithDefaultDelimiter() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -125,7 +126,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testDelimitedOutputWithEmptyDelimiter() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -153,7 +154,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testDelimitedOutputWithDefaultFieldExtractor() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -181,7 +182,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testDelimitedOutputWithCustomFieldExtractor() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -209,7 +210,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testFormattedOutputWithDefaultFieldExtractor() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -237,7 +238,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testFormattedOutputWithCustomFieldExtractor() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")
@@ -265,7 +266,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testFlags() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
String encoding = Charset.defaultCharset().name();
@@ -287,7 +288,7 @@ public class FlatFileItemWriterBuilderTests {
@Test
public void testFlagsWithEncoding() throws Exception {
Resource output = new FileSystemResource(File.createTempFile("foo", "txt"));
WritableResource output = new FileSystemResource(File.createTempFile("foo", "txt"));
String encoding = "UTF-8";
FlatFileItemWriter<Foo> writer = new FlatFileItemWriterBuilder<Foo>()
.name("foo")

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018 the original author or authors.
* Copyright 2018-2022 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.
@@ -29,7 +29,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
/**
* @author Mahmoud Ben Hassine
@@ -37,7 +37,7 @@ import org.springframework.core.io.Resource;
@RunWith(MockitoJUnitRunner.class)
public class JsonFileItemWriterTests {
private Resource resource;
private WritableResource resource;
@Mock
private JsonObjectMarshaller<String> jsonObjectMarshaller;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2018-2021 the original author or authors.
* Copyright 2018-2022 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.
@@ -29,7 +29,7 @@ import org.springframework.batch.item.file.FlatFileHeaderCallback;
import org.springframework.batch.item.json.JsonFileItemWriter;
import org.springframework.batch.item.json.JsonObjectMarshaller;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.test.util.ReflectionTestUtils;
import static org.junit.Assert.assertEquals;
@@ -41,7 +41,7 @@ import static org.junit.Assert.assertTrue;
*/
public class JsonFileItemWriterBuilderTests {
private Resource resource;
private WritableResource resource;
private JsonObjectMarshaller<String> jsonObjectMarshaller;
@Before

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 the original author or authors.
* Copyright 2010-2022 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.
@@ -36,6 +36,7 @@ import org.springframework.batch.support.transaction.ResourcelessTransactionMana
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.oxm.Marshaller;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
@@ -53,7 +54,7 @@ public abstract class AbstractStaxEventWriterItemWriterTests {
protected StaxEventItemWriter<Trade> writer = new StaxEventItemWriter<>();
private Resource resource;
private WritableResource resource;
private File outputFile;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2010-2021 the original author or authors.
* Copyright 2010-2022 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.
@@ -36,6 +36,7 @@ import org.springframework.batch.support.transaction.ResourcelessTransactionMana
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.transaction.TransactionStatus;
@@ -55,7 +56,7 @@ public class Jaxb2NamespaceMarshallingTests {
private StaxEventItemWriter<QualifiedTrade> writer = new StaxEventItemWriter<>();
private Resource resource;
private WritableResource resource;
private File outputFile;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2008-2021 the original author or authors.
* Copyright 2008-2022 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.
@@ -34,7 +34,7 @@ import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.batch.item.WriterNotOpenException;
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
@@ -65,7 +65,7 @@ public class StaxEventItemWriterTests {
private StaxEventItemWriter<Object> writer;
// output file
private Resource resource;
private WritableResource resource;
private ExecutionContext executionContext;
@@ -479,7 +479,7 @@ public class StaxEventItemWriterTests {
@Test
public void testNonExistantResource() throws Exception {
Resource doesntExist = mock(Resource.class);
WritableResource doesntExist = mock(WritableResource.class);
when(doesntExist.getFile()).thenReturn(File.createTempFile("arbitrary", null));
when(doesntExist.exists()).thenReturn(false);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2008-2014 the original author or authors.
* Copyright 2008-2022 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.
@@ -35,7 +35,7 @@ import org.junit.Test;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.transaction.PlatformTransactionManager;
@@ -56,7 +56,7 @@ public class TransactionalStaxEventItemWriterTests {
private PlatformTransactionManager transactionManager = new ResourcelessTransactionManager();
// output file
private Resource resource;
private WritableResource resource;
private ExecutionContext executionContext;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2017-2021 the original author or authors.
* Copyright 2017-2022 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.
@@ -35,7 +35,7 @@ import org.springframework.batch.item.ItemStreamException;
import org.springframework.batch.item.xml.StaxEventItemWriter;
import org.springframework.batch.support.transaction.TransactionAwareBufferedWriter;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.WritableResource;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.test.util.ReflectionTestUtils;
@@ -51,7 +51,7 @@ import static org.junit.Assert.assertTrue;
*/
public class StaxEventItemWriterBuilderTests {
private Resource resource;
private WritableResource resource;
private List<Foo> items;