org.springframework.batch.sample.domain.multiline

## Class AggregateItemReader<T>

- java.lang.Object
- - org.springframework.batch.sample.domain.multiline.AggregateItemReader<T>

- All Implemented Interfaces:
    ItemReader<java.util.List<T>>

      public class AggregateItemReader<T>
      extends java.lang.Object
      implements ItemReader<java.util.List<T>>

  An `ItemReader` that delivers a list as its item, storing up objects from the injected `ItemReader` until they are ready to be packed out as a collection. This class must be used as a wrapper for a custom `ItemReader` that can identify the record boundaries. The custom reader should mark the beginning and end of records by returning an `AggregateItem` which responds true to its query methods `is*()`.
  This class is thread-safe (it can be used concurrently by multiple threads) as long as the `ItemReader` is also thread-safe.
  Author:
    Dave Syer
  See Also:
    `AggregateItem.isHeader()`, `AggregateItem.isFooter()`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `AggregateItemReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.util.List<T>` | `read()` Get the next list of records.
    `void` | `setItemReader(ItemReader<AggregateItem<T>> itemReader)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### AggregateItemReader

          public AggregateItemReader()

  - ### Method Detail

    - #### read

          public java.util.List<T> read()
                                 throws java.lang.Exception

      Get the next list of records.
      Specified by:
        `read` in interface `ItemReader<java.util.List<T>>`
      Returns:
        T the item to be processed
      Throws:
        `java.lang.Exception`
        `ParseException` - if there is a problem parsing the current record (but the next one may still be valid)
        `NonTransientResourceException` - if there is a fatal exception in the underlying resource. After throwing this exception implementations should endeavour to return null from subsequent calls to read.
        `UnexpectedInputException` - if there is an uncategorised problem with the input data. Assume potentially transient, so subsequent calls to read might succeed.
      See Also:
        `ItemReader.read()`

    - #### setItemReader

          public void setItemReader(ItemReader<AggregateItem<T>> itemReader)