https://bz.apache.org/bugzilla/show_bug.cgi?id=66576

            Bug ID: 66576
           Summary: It is difficult to handle files with wrong formats
           Product: POI
           Version: unspecified
          Hardware: PC
            Status: NEW
          Severity: normal
          Priority: P2
         Component: POI Overall
          Assignee: dev@poi.apache.org
          Reporter: zhong...@pku.org.cn
  Target Milestone: ---

Although POI defines InvalidFormatException, when XSSF encounters files with
wrong formats, it hides this exception and throws IOException. For example,
XSSFWorkbook has the following code:

 public int addOlePackage(byte[] oleData, String label, String fileName, String
command)
            throws IOException {
        final XSSFRelation rel = XSSFRelation.OLEEMBEDDINGS;

        // find an unused part name
        OPCPackage opc = getPackage();
        PackagePartName pnOLE;
        int oleId;
        try {
            oleId = opc.getUnusedPartIndex(rel.getDefaultFileName());
            pnOLE = PackagingURIHelper.createPartName(rel.getFileName(oleId));
        } catch (InvalidFormatException e) {
            throw new IOException("ole object name not recognized", e);
        }

Indeed, I notice that POIXMLDocument even bypasses thrown
InvalidFormatException:

 public static OPCPackage openPackage(String path) throws IOException {
        try {
            return OPCPackage.open(path);
        } catch (InvalidFormatException e) {
            throw new IOException(e.toString(), e);
        }
    }

Do POI developers have plans to deprecate InvalidFormatException? Shall I catch
IOException to handle files whose formats are wrong?

Meanwhile, I find that other APIs hide IOException and throw
InvalidFormatException. For example, EncryptedTempFilePackagePart of OOXML has
the following code:

 public boolean load(InputStream is) throws InvalidFormatException {
       try (OutputStream os = getOutputStreamImpl()) {
            IOUtils.copy(is, os);
       } catch(IOException e) {
            throw new InvalidFormatException(e.getMessage(), e);
       }

       // All done
       return true;
    }

As another example, ZipEntrySource has the following code:

protected PackagePartCollection getPartsImpl() throws InvalidFormatException {
  ...
try {
                this.contentTypeManager = new ZipContentTypeManager(
                        zipArchive.getInputStream(contentTypeEntry), this);
            } catch (IOException e) {
                throw new InvalidFormatException(e.getMessage(), e);
            }
}

It is quite confusing. It is also difficult for programmers like me to
implement handling code. Can POI throw consistent exceptions, when file formats
are wrong?

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to