From 3ba024d3764fa0f075150743eee31feffd88de66 Mon Sep 17 00:00:00 2001 From: robokaso Date: Tue, 18 May 2010 11:04:28 +0000 Subject: [PATCH] RESOLVED - BATCH-1569: MultiResourceItemReader.getCurrentResource cause java.lang.ArrayIndexOutOfBoundsException when .read() was not called --- .../batch/item/file/MultiResourceItemReader.java | 6 ++---- .../item/file/MultiResourceItemReaderIntegrationTests.java | 7 +++++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/MultiResourceItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/MultiResourceItemReader.java index 101b77f28..ef1da2346 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/MultiResourceItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/MultiResourceItemReader.java @@ -95,9 +95,7 @@ public class MultiResourceItemReader implements ItemReader, ItemStream { delegate.open(new ExecutionContext()); } - T item; - item = readNextItem(); - return item; + return readNextItem(); } /** @@ -209,7 +207,7 @@ public class MultiResourceItemReader implements ItemReader, ItemStream { } public Resource getCurrentResource() { - if (currentResource >= resources.length) { + if (currentResource >= resources.length || currentResource < 0) { return null; } return resources[currentResource]; diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/MultiResourceItemReaderIntegrationTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/MultiResourceItemReaderIntegrationTests.java index 0a7cd7c29..e43c8b229 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/MultiResourceItemReaderIntegrationTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/MultiResourceItemReaderIntegrationTests.java @@ -344,5 +344,12 @@ public class MultiResourceItemReaderIntegrationTests { //the 1st item, rather than on open } } + + @Test + public void testGetCurrentResourceBeforeRead() throws Exception { + tested.open(ctx); + assertNull("There is no 'current' resource before read is called", tested.getCurrentResource()); + + } }