From 290e9c40873bb8cfa10c456524e39ea542731a0c Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 17 Oct 2018 14:24:59 +0000 Subject: [PATCH] #62831 Fix WorkbookFactory.create with a subclass of File, eg from JFileChooser git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1844116 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/ss/usermodel/WorkbookFactory.java | 7 +++++++ .../org/apache/poi/ss/TestWorkbookFactory.java | 16 +++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java b/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java index 50833aa6c..aae8c043c 100644 --- a/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java +++ b/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java @@ -296,6 +296,11 @@ public class WorkbookFactory { return createWorkbook("org.apache.poi.xssf.usermodel.XSSFWorkbookFactory", args); } + /** + * Does the actual call to HSSF or XSSF to do the creation. + * Uses reflection, so that this class can be in the Core non-OOXML + * POI jar without errors / broken references to the OOXML / XSSF code. + */ private static Workbook createWorkbook(String factoryClass, Object args[]) throws IOException, EncryptedDocumentException { try { Class clazz = WorkbookFactory.class.getClassLoader().loadClass(factoryClass); @@ -307,6 +312,8 @@ public class WorkbookFactory { c = boolean.class; } else if (InputStream.class.isAssignableFrom(c)) { c = InputStream.class; + } else if (File.class.isAssignableFrom(c)) { + c = File.class; } argsClz[i++] = c; } diff --git a/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java b/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java index e3c631c1d..32978df88 100644 --- a/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java +++ b/src/ooxml/testcases/org/apache/poi/ss/TestWorkbookFactory.java @@ -17,18 +17,24 @@ package org.apache.poi.ss; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.File; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.io.FileNotFoundException; import org.apache.poi.EmptyFileException; import org.apache.poi.EncryptedDocumentException; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; @@ -36,10 +42,7 @@ import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.apache.poi.util.TempFile; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.openxml4j.opc.PackageAccess; import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory; -import org.junit.Ignore; import org.junit.Test; public final class TestWorkbookFactory { @@ -393,7 +396,6 @@ public final class TestWorkbookFactory { * to work for sub-classes of File too, eg JFileChooser */ @Test - @Ignore public void testFileSubclass() throws Exception { Workbook wb;