diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java index eadf35d2c..2ad554418 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/JdbcCursorItemReader.java @@ -29,6 +29,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemStream; +import org.springframework.batch.item.ReaderNotOpenException; import org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader; import org.springframework.beans.factory.InitializingBean; import org.springframework.dao.InvalidDataAccessApiUsageException; @@ -469,6 +470,10 @@ public class JdbcCursorItemReader extends AbstractItemCountingItemStreamItemR */ @SuppressWarnings("unchecked") protected T doRead() throws Exception { + if (rs == null) { + throw new ReaderNotOpenException("Reader must be open before it can be read."); + } + try { if (!rs.next()) { return null; diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcCursorItemReaderCommonTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcCursorItemReaderCommonTests.java index c8723dc34..f0d97782c 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcCursorItemReaderCommonTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/database/JdbcCursorItemReaderCommonTests.java @@ -1,11 +1,12 @@ package org.springframework.batch.item.database; +import org.junit.Test; +import org.junit.internal.runners.JUnit4ClassRunner; +import org.junit.runner.RunWith; import org.springframework.batch.item.ExecutionContext; import org.springframework.batch.item.ItemReader; +import org.springframework.batch.item.ReaderNotOpenException; import org.springframework.batch.item.sample.Foo; -import org.junit.runner.RunWith; -import org.junit.internal.runners.JUnit4ClassRunner; -import org.junit.Test; @RunWith(JUnit4ClassRunner.class) public class JdbcCursorItemReaderCommonTests extends AbstractDatabaseItemStreamItemReaderTests { @@ -45,4 +46,10 @@ public class JdbcCursorItemReaderCommonTests extends AbstractDatabaseItemStreamI reader.open(new ExecutionContext()); } + @Test(expected=ReaderNotOpenException.class) + public void testReadBeforeOpen() throws Exception { + tested = getItemReader(); + tested.read(); + } + }