Я пытаюсь использовать SingleItemPeekableItemReader
для чтения многострочных данных.Это иногда не работает, и нет ошибки.Во время отладки он просто показывает, что reader.peek()
равно нулю.Что мне здесь не хватает?Фрагмент XML-файла:
< bean id="itemReaderA" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
...
< /bean>
< bean id="itemReaderB" class="org.springframework.batch.item.support.SingleItemPeekableItemReader" scope="step">
< property name="delegate" ref="itemReaderA"/>
< /bean>
< bean id="TransactionFileReader" class="<customReader class>" scope="step">
< property name="delegate" ref="itemReaderB"/>
< /bean>
Метод чтения / Класс
public class customReader implements ItemReader<ELCTransactionHeader>, ItemStream {
SingleItemPeekableItemReader<ElcHKTransactionFileDatabean> delegate;
public CustomBEan read() throws Exception, ParseException, NonTransientResourceException {
InputBEan line = null;
InputBEan prevElement = null;
boolean exit = false;
CustomBEan transactionObj = null;
while (!exit && (line = (InputBEan) this.delegate.peek()) != null) {
if ((prevElement == null ) || (prevElement != null && line.getInvoiceNumber().equals(prevElement.getInvoiceNumber()))) {
System.out.println("Part of same txn or beginning of new txn");
delegate.read();
transactionObj = processLine(transactionObj , line);
prevElement = line;
} else {
System.out.println("Different txn");
exit = true;
}
}
return transactionObj;
}