RESOLVED
This is what i did to resolve it.
Instead of keeping the Workbook in session, I took getBytes() from MultipartFile (File uploaded) and kept it in session.
Validation errors are also uploaded to session.
Now I have both Original file and errors in session.
I will create a new XSSFWorkbook instance from the following code.
Workbook workbook = null;
try{
workbook = new XSSFWorkbook(new ByteArrayInputStream(multipartFileBytes));
}catch(OfficeXmlFileException exception){
workbook = new HSSFWorkbook(new ByteArrayInputStream(multipartFileBytes));
}
Now, workbook.write(OutputStream) will be invoked on different instances of Workbook on each request.
Let me know if you see any issues in this approach.