Search code examples
javacrashjvmapache-poijvm-crash

JVM crashing while writing to XLSX file( POI)


JVM is crashing while trying to write to the .xlsx file. I am using POI(XSSF) for the same. The error location point in code is the write method--> workBook.write(fileOutputStream);

On Console I get..

A fatal error has been detected by the Java Runtime Environment:
  SIGBUS (0x7) at pc=0xb68d77f3, pid=14653, tid=1849355120
  JRE version: 7.0_04-b20
 Java VM: Java HotSpot(TM) Server VM (23.0-b21 mixed mode linux-x86 )
 Problematic frame:
 C  [libzip.so+0x47f3]  newEntry+0x73
 Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
 If you would like to submit a bug report, please visit:
   http://bugreport.sun.com/bugreport/crash.jsp
 The crash happened outside the Java Virtual Machine in native code.
 See problematic frame for where to report the bug.

Solution

  • The solution I've found for this, and I've been looking for a while, is to make sure you don't open your Workbook with the File which you use to open the FileOutputStream to save the Workbook. Instead, use a FileInputStream to open the Workbook.

    Something like this will work flawlessly

            File inputFile = new File("Your-Path");
            this.inputStream = new FileInputStream(inputFile);
            this.opc = OPCPackage.open(this.inputStream);
            this.workbook = WorkbookFactory.create(opc);
    
    ...
    
            this.outputStream = new FileOutputStream(inputFile);
            this.workbook.write(this.outputStream);
    

    Don't forget to close every opened stream and the OPCPackage.