You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by bu...@apache.org on 2012/07/27 16:42:05 UTC

[Bug 53613] New: org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Rule M2.4 exception : this error should NEVER happen

https://issues.apache.org/bugzilla/show_bug.cgi?id=53613

          Priority: P2
            Bug ID: 53613
          Assignee: dev@poi.apache.org
           Summary: org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeEx
                    ception: Rule M2.4 exception : this error should NEVER
                    happen
          Severity: normal
    Classification: Unclassified
          Reporter: jbatchelor@mutualnc.com
          Hardware: PC
            Status: NEW
           Version: 3.8
         Component: XSSF
           Product: POI

Created attachment 29122
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=29122&action=edit
This is the spreadsheet that my program tries to open and close.  The program
corrupts the spreadsheet when run.

I experience this exception being thrown:

org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Rule M2.4
exception : this error should NEVER happen, if so please send a mail to the
developers team, thanks !

This is example code that triggers the error.  The statement wb.write(fileOut);
specifically seems to be the culprit.

package areacontrol;

public class AreaControl_3 {

    public static void main(String[] args) {
      String filename = "C:\\java\\values.xlsx";

      try{
          org.apache.poi.openxml4j.opc.OPCPackage opc = 
                  org.apache.poi.openxml4j.opc.OPCPackage.open(filename);

          org.apache.poi.xssf.usermodel.XSSFWorkbook wb = 
                  new org.apache.poi.xssf.usermodel.XSSFWorkbook(opc);

          opc.close();

          java.io.FileOutputStream fileOut = 
                  new java.io.FileOutputStream(filename);

          wb.write(fileOut);

          fileOut.close();  

        }catch(Exception e){
            System.out.println(e);
        }
   }
}

This code does not generate the exception:

package areacontrol;

public class AreaControl_3_1 {

    public static void main(String[] args) {
      String filename = "C:\\java\\values.xlsx";

      try{          
          java.io.FileInputStream fis = 
                  new java.io.FileInputStream(filename);

          org.apache.poi.xssf.usermodel.XSSFWorkbook wb = 
                  new org.apache.poi.xssf.usermodel.XSSFWorkbook(fis);

          fis.close();

          java.io.FileOutputStream fileOut = 
                  new java.io.FileOutputStream(filename);

          wb.write(fileOut);

          fileOut.close();                    

        }catch(Exception e){
            System.out.println(e);
        }
   }
}

I have attached the spreadsheet.

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org


[Bug 53613] org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Rule M2.4 exception : this error should NEVER happen

Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=53613

Mark B <ma...@tiscali.co.uk> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 OS|                            |All

--- Comment #1 from Mark B <ma...@tiscali.co.uk> ---
Not so sure that this is an error but it certainly could be a problem with the
javadoc for the XSSFWorkbook/OPCPackage classes.

Had a quick play with the code this morning and read the full stacktrace
produced when the exception is thrown. The source of the exception is the write
method of the workbook - or one of the methods it calls - and it appears to be
caused by the fact that the OPCPackage is no longer available when the workbook
is being written out. If the call to the close() method of the OPCPackage
instance if moved to follow the write() method of the workbook, then the
exception is not thrown.

So, it seems that if a workbook is cretade from an instance of the OPCPackage
class, the OPCPacakge instance must not be disposed of until after the workbook
has been written. This change the the code, removed the problem completely;

org.apache.poi.openxml4j.opc.OPCPackage opc = 
   org.apache.poi.openxml4j.opc.OPCPackage.open(filename);
org.apache.poi.xssf.usermodel.XSSFWorkbook wb =
   new org.apache.poi.xssf.usermodel.XSSFWorkbook(opc);
java.io.FileOutputStream fileOut = new java.io.FileOutputStream(filename);
wb.write(fileOut);
opc.close();
fileOut.close();  

Perhaps documenting this in the javadoc for the workbook and OPCPackage classes
would be sufficient.

Mark B

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org


[Bug 53613] org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Rule M2.4 exception : this error should NEVER happen

Posted by bu...@apache.org.
https://issues.apache.org/bugzilla/show_bug.cgi?id=53613

iJay <mu...@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mustangxu@gmail.com

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@poi.apache.org
For additional commands, e-mail: dev-help@poi.apache.org