SkipListener allows us to get the skipped item when the exception is thrown during the writing process (SkipListener#onSkipInWrite(Object,Throwable)).
It would be interesting to get the skipped item even if the exception is thrown during the read process (this can be common when using a ValidatingItemReader).
One solution would be to have an aspect adding every object read in a step context - the context would be available for skipListener.
Another solution is using an itemReader decorator instead of an aspect as Dave suggested.
The aspect solution is perhaps intrusive.
The decorator solution can clutter configuration (validatingReader -> itemRecorderReader -> fileInputReader) and perhaps less powerfull (we can only record itemReaders). If we want to record FieldSetMapper, we should create a FieldSetRecorderMapper ?