From 56a12d0e77d788c8f8ee8652f0ff21454ec415bb Mon Sep 17 00:00:00 2001 From: lucasward Date: Sat, 4 Oct 2008 02:02:44 +0000 Subject: [PATCH] OPEN - issue BATCH-865: CompositeItemProcessor should handle null properly http://jira.springframework.org/browse/BATCH-865 If any processor returns null, then the composite will now return null. --- .../item/support/CompositeItemProcessor.java | 3 ++ .../support/CompositeItemProcessorTests.java | 33 ++++++++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemProcessor.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemProcessor.java index 82920f4c4..92ef3af07 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemProcessor.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/support/CompositeItemProcessor.java @@ -25,6 +25,9 @@ public class CompositeItemProcessor implements ItemProcessor, Initia Object result = item; for(ItemProcessor transformer: itemProcessors){ + if(result == null){ + return null; + } result = transformer.process(result); } return (O) result; diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/support/CompositeItemProcessorTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/support/CompositeItemProcessorTests.java index 0105daad3..a8f1ac0d7 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/support/CompositeItemProcessorTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/support/CompositeItemProcessorTests.java @@ -9,6 +9,7 @@ import static org.junit.Assert.fail; import java.util.ArrayList; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.batch.item.ItemProcessor; @@ -23,17 +24,17 @@ public class CompositeItemProcessorTests { private CompositeItemProcessor composite = new CompositeItemProcessor(); - private ItemProcessor transformer1; - private ItemProcessor transformer2; + private ItemProcessor processor1; + private ItemProcessor processor2; @SuppressWarnings("unchecked") @Before public void setUp() throws Exception { - transformer1 = createMock(ItemProcessor.class); - transformer2 = createMock(ItemProcessor.class); + processor1 = createMock(ItemProcessor.class); + processor2 = createMock(ItemProcessor.class); composite.setItemProcessors(new ArrayList() {{ - add(transformer1); add(transformer2); + add(processor1); add(processor2); }}); composite.afterPropertiesSet(); @@ -49,17 +50,17 @@ public class CompositeItemProcessorTests { Object itemAfterFirstTransfromation = new Object(); Object itemAfterSecondTransformation = new Object(); - expect(transformer1.process(item)).andReturn(itemAfterFirstTransfromation); + expect(processor1.process(item)).andReturn(itemAfterFirstTransfromation); - expect(transformer2.process(itemAfterFirstTransfromation)).andReturn(itemAfterSecondTransformation); + expect(processor2.process(itemAfterFirstTransfromation)).andReturn(itemAfterSecondTransformation); - replay(transformer1); - replay(transformer2); + replay(processor1); + replay(processor2); assertSame(itemAfterSecondTransformation, composite.process(item)); - verify(transformer1); - verify(transformer2); + verify(processor1); + verify(processor2); } /** @@ -91,4 +92,14 @@ public class CompositeItemProcessorTests { } } + + @Test + public void testFilteredItemInFirstProcessor() throws Exception{ + + Object item = new Object(); + expect(processor1.process(item)).andReturn(null); + replay(processor1, processor2); + Assert.assertEquals(null,composite.process(item)); + verify(processor1,processor2); + } }