package org.springframework.batch.integration.chunk; import java.util.ArrayList; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ParseException; import org.springframework.batch.item.UnexpectedInputException; import org.springframework.stereotype.Component; @Component public class TestItemReader<T> implements ItemReader<T> { private static final Log logger = LogFactory.getLog(TestItemReader.class); /** * Counts the number of chunks processed in the handler. */ public volatile int count = 0; /** * Item that causes failure in handler. */ public final static String FAIL_ON = "bad"; /** * Item that causes handler to wait to simulate delayed processing. */ public static final String WAIT_ON = "wait"; private List<T> items = new ArrayList<T>(); /** * @param items the items to set */ public void setItems(List<T> items) { this.items = items; } public T read() throws Exception, UnexpectedInputException, ParseException { if (count>=items.size()) { return null; } T item = items.get(count++); logger.debug("Reading "+item); if (item.equals(WAIT_ON)) { try { Thread.sleep(200); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException("Unexpected interruption.", e); } } if (item.equals(FAIL_ON)) { throw new IllegalStateException("Planned failure on: " + FAIL_ON); } return item; } }