mirror of https://github.com/apache/poi.git
#57593 Complete create overloading in WorkbookFactory to take passwords
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1676847 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5cb5ab6807
commit
37f045dc02
|
@ -121,7 +121,9 @@ public class WorkbookFactory {
|
||||||
* using an {@link InputStream} has a higher memory footprint
|
* using an {@link InputStream} has a higher memory footprint
|
||||||
* than using a {@link File}.</p>
|
* than using a {@link File}.</p>
|
||||||
* <p>Note that in order to properly release resources the
|
* <p>Note that in order to properly release resources the
|
||||||
* Workbook should be closed after use.
|
* Workbook should be closed after use. Note also that loading
|
||||||
|
* from an InputStream requires more memory than loading
|
||||||
|
* from a File, so prefer {@link #create(File)} where possible.
|
||||||
* @throws EncryptedDocumentException If the workbook given is password protected
|
* @throws EncryptedDocumentException If the workbook given is password protected
|
||||||
*/
|
*/
|
||||||
public static Workbook create(InputStream inp) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
public static Workbook create(InputStream inp) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
||||||
|
@ -136,7 +138,9 @@ public class WorkbookFactory {
|
||||||
* using an {@link InputStream} has a higher memory footprint
|
* using an {@link InputStream} has a higher memory footprint
|
||||||
* than using a {@link File}.</p>
|
* than using a {@link File}.</p>
|
||||||
* <p>Note that in order to properly release resources the
|
* <p>Note that in order to properly release resources the
|
||||||
* Workbook should be closed after use.
|
* Workbook should be closed after use. Note also that loading
|
||||||
|
* from an InputStream requires more memory than loading
|
||||||
|
* from a File, so prefer {@link #create(File)} where possible.
|
||||||
* @throws EncryptedDocumentException If the wrong password is given for a protected file
|
* @throws EncryptedDocumentException If the wrong password is given for a protected file
|
||||||
*/
|
*/
|
||||||
public static Workbook create(InputStream inp, String password) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
public static Workbook create(InputStream inp, String password) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
||||||
|
@ -155,7 +159,6 @@ public class WorkbookFactory {
|
||||||
throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
|
throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO file+password
|
|
||||||
/**
|
/**
|
||||||
* Creates the appropriate HSSFWorkbook / XSSFWorkbook from
|
* Creates the appropriate HSSFWorkbook / XSSFWorkbook from
|
||||||
* the given File, which must exist and be readable.
|
* the given File, which must exist and be readable.
|
||||||
|
@ -164,14 +167,24 @@ public class WorkbookFactory {
|
||||||
* @throws EncryptedDocumentException If the workbook given is password protected
|
* @throws EncryptedDocumentException If the workbook given is password protected
|
||||||
*/
|
*/
|
||||||
public static Workbook create(File file) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
public static Workbook create(File file) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
||||||
|
return create(file, null);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Creates the appropriate HSSFWorkbook / XSSFWorkbook from
|
||||||
|
* the given File, which must exist and be readable, and
|
||||||
|
* may be password protected
|
||||||
|
* <p>Note that in order to properly release resources the
|
||||||
|
* Workbook should be closed after use.
|
||||||
|
* @throws EncryptedDocumentException If the wrong password is given for a protected file
|
||||||
|
*/
|
||||||
|
public static Workbook create(File file, String password) throws IOException, InvalidFormatException, EncryptedDocumentException {
|
||||||
if (! file.exists()) {
|
if (! file.exists()) {
|
||||||
throw new FileNotFoundException(file.toString());
|
throw new FileNotFoundException(file.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@SuppressWarnings("resource")
|
|
||||||
NPOIFSFileSystem fs = new NPOIFSFileSystem(file);
|
NPOIFSFileSystem fs = new NPOIFSFileSystem(file);
|
||||||
return new HSSFWorkbook(fs.getRoot(), true);
|
return create(fs, password);
|
||||||
} catch(OfficeXmlFileException e) {
|
} catch(OfficeXmlFileException e) {
|
||||||
// opening as .xls failed => try opening as .xlsx
|
// opening as .xls failed => try opening as .xlsx
|
||||||
OPCPackage pkg = OPCPackage.open(file);
|
OPCPackage pkg = OPCPackage.open(file);
|
||||||
|
|
|
@ -194,6 +194,64 @@ public final class TestWorkbookFactory extends TestCase {
|
||||||
public void testCreateWithPasswordFromFile() throws Exception {
|
public void testCreateWithPasswordFromFile() throws Exception {
|
||||||
Workbook wb;
|
Workbook wb;
|
||||||
|
|
||||||
// TODO
|
// Unprotected, no password given, opens normally
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xls), null
|
||||||
|
);
|
||||||
|
assertNotNull(wb);
|
||||||
|
assertTrue(wb instanceof HSSFWorkbook);
|
||||||
|
wb.close();
|
||||||
|
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xlsx), null
|
||||||
|
);
|
||||||
|
assertNotNull(wb);
|
||||||
|
assertTrue(wb instanceof XSSFWorkbook);
|
||||||
|
|
||||||
|
|
||||||
|
// Unprotected, wrong password, opens normally
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xls), "wrong"
|
||||||
|
);
|
||||||
|
assertNotNull(wb);
|
||||||
|
assertTrue(wb instanceof HSSFWorkbook);
|
||||||
|
wb.close();
|
||||||
|
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xlsx), "wrong"
|
||||||
|
);
|
||||||
|
assertNotNull(wb);
|
||||||
|
assertTrue(wb instanceof XSSFWorkbook);
|
||||||
|
|
||||||
|
|
||||||
|
// Protected, correct password, opens fine
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xls_prot[0]), xls_prot[1]
|
||||||
|
);
|
||||||
|
assertNotNull(wb);
|
||||||
|
assertTrue(wb instanceof HSSFWorkbook);
|
||||||
|
wb.close();
|
||||||
|
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xlsx_prot[0]), xlsx_prot[1]
|
||||||
|
);
|
||||||
|
assertNotNull(wb);
|
||||||
|
assertTrue(wb instanceof XSSFWorkbook);
|
||||||
|
|
||||||
|
|
||||||
|
// Protected, wrong password, throws Exception
|
||||||
|
try {
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xls_prot[0]), "wrong"
|
||||||
|
);
|
||||||
|
fail("Shouldn't be able to open with the wrong password");
|
||||||
|
} catch (EncryptedDocumentException e) {}
|
||||||
|
|
||||||
|
try {
|
||||||
|
wb = WorkbookFactory.create(
|
||||||
|
HSSFTestDataSamples.getSampleFile(xlsx_prot[0]), "wrong"
|
||||||
|
);
|
||||||
|
fail("Shouldn't be able to open with the wrong password");
|
||||||
|
} catch (EncryptedDocumentException e) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue