RESOLVED - issue BATCH-1520: Allow null ItemWriter as long as ItemProcessor is provided
This commit is contained in:
@@ -296,6 +296,30 @@ public class FaultTolerantStepFactoryBeanTests {
|
||||
.getName()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullWriter() throws Exception {
|
||||
|
||||
factory.setItemWriter(null);
|
||||
Step step = (Step) factory.getObject();
|
||||
|
||||
step.execute(stepExecution);
|
||||
|
||||
assertEquals(0, stepExecution.getSkipCount());
|
||||
assertEquals(0, stepExecution.getReadSkipCount());
|
||||
assertEquals(5, stepExecution.getReadCount());
|
||||
// Write count is incremented even if nothing happens
|
||||
assertEquals(5, stepExecution.getWriteCount());
|
||||
assertEquals(0, stepExecution.getFilterCount());
|
||||
assertEquals(0, stepExecution.getRollbackCount());
|
||||
|
||||
// writer skips "4"
|
||||
assertTrue(reader.getRead().contains("4"));
|
||||
|
||||
assertEquals(BatchStatus.COMPLETED, stepExecution.getStatus());
|
||||
assertStepExecutionsAreEqual(stepExecution, repository.getLastStepExecution(jobExecution.getJobInstance(), step
|
||||
.getName()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check items causing errors are skipped as expected.
|
||||
*/
|
||||
|
||||
@@ -47,6 +47,7 @@ import org.springframework.batch.core.repository.dao.MapJobInstanceDao;
|
||||
import org.springframework.batch.core.repository.dao.MapStepExecutionDao;
|
||||
import org.springframework.batch.core.repository.support.SimpleJobRepository;
|
||||
import org.springframework.batch.core.step.AbstractStep;
|
||||
import org.springframework.batch.item.ItemProcessor;
|
||||
import org.springframework.batch.item.ItemReader;
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.support.ListItemReader;
|
||||
@@ -83,7 +84,7 @@ public class SimpleStepFactoryBeanTests {
|
||||
job.setBeanName("simpleJob");
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
@Test(expected = IllegalStateException.class)
|
||||
public void testMandatoryProperties() throws Exception {
|
||||
new SimpleStepFactoryBean<String, String>().getObject();
|
||||
}
|
||||
@@ -325,11 +326,15 @@ public class SimpleStepFactoryBeanTests {
|
||||
|
||||
final List<String> listenerCalls = new ArrayList<String>();
|
||||
|
||||
class TestItemListenerWriter implements ItemWriter<String>, ItemReadListener<String>,
|
||||
ItemWriteListener<String>, ItemProcessListener<String, String>, ChunkListener {
|
||||
class TestItemListenerWriter implements ItemWriter<String>, ItemProcessor<String, String>,
|
||||
ItemReadListener<String>, ItemWriteListener<String>, ItemProcessListener<String, String>, ChunkListener {
|
||||
public void write(List<? extends String> items) throws Exception {
|
||||
}
|
||||
|
||||
public String process(String item) throws Exception {
|
||||
return item;
|
||||
}
|
||||
|
||||
public void afterRead(String item) {
|
||||
listenerCalls.add("read");
|
||||
}
|
||||
@@ -369,7 +374,9 @@ public class SimpleStepFactoryBeanTests {
|
||||
|
||||
}
|
||||
|
||||
factory.setItemWriter(new TestItemListenerWriter());
|
||||
TestItemListenerWriter itemWriter = new TestItemListenerWriter();
|
||||
factory.setItemWriter(itemWriter);
|
||||
factory.setItemProcessor(itemWriter);
|
||||
|
||||
Step step = (Step) factory.getObject();
|
||||
|
||||
@@ -409,7 +416,7 @@ public class SimpleStepFactoryBeanTests {
|
||||
}
|
||||
|
||||
TestItemListenerWriter itemWriter = new TestItemListenerWriter();
|
||||
factory.setListeners(new StepListener[] {itemWriter});
|
||||
factory.setListeners(new StepListener[] { itemWriter });
|
||||
factory.setItemWriter(itemWriter);
|
||||
|
||||
Step step = (Step) factory.getObject();
|
||||
@@ -425,6 +432,31 @@ public class SimpleStepFactoryBeanTests {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNullWriter() throws Exception {
|
||||
|
||||
SimpleStepFactoryBean<String, String> factory = getStepFactory(new String[] { "foo", "bar", "spam" });
|
||||
factory.setItemWriter(null);
|
||||
factory.setItemProcessor(new ItemProcessor<String, String>() {
|
||||
public String process(String item) throws Exception {
|
||||
written.add(item);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
Step step = (Step) factory.getObject();
|
||||
|
||||
job.setSteps(Collections.singletonList(step));
|
||||
|
||||
JobExecution jobExecution = repository.createJobExecution(job.getName(), new JobParameters());
|
||||
|
||||
job.execute(jobExecution);
|
||||
|
||||
assertEquals(BatchStatus.COMPLETED, jobExecution.getStatus());
|
||||
assertEquals("[foo, bar, spam]", written.toString());
|
||||
|
||||
}
|
||||
|
||||
private SimpleStepFactoryBean<String, String> getStepFactory(String... args) throws Exception {
|
||||
SimpleStepFactoryBean<String, String> factory = new SimpleStepFactoryBean<String, String>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user