Я использую apache poi для чтения файла Excel и его обработки.
Это то, что я делаю на высоком уровне
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet("http://file-examples.com/wp-content/uploads/2017/02/file_example_XLSX_10.xlsx");
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
Workbook wb = WorkbookFactory.create(inputStream);
Но я получаю исключение, когда create вызывает
java.lang.IllegalArgumentException: InputStream of class class org.apache.commons.compress.archivers.zip.ZipArchiveInputStream is not implementing InputStreamStatistics.
at org.apache.poi.openxml4j.util.ZipArchiveThresholdInputStream.<init>(ZipArchiveThresholdInputStream.java:63)
Это происходит только с файлами xlsx. Вот как выглядит метод создания в poi jar
public static Workbook create(InputStream inp, String password) throws IOException, EncryptedDocumentException {
InputStream is = FileMagic.prepareToCheckMagic(inp);
FileMagic fm = FileMagic.valueOf(is);
switch (fm) {
case OLE2:
POIFSFileSystem fs = new POIFSFileSystem(is);
return create(fs, password);
case OOXML:
return createXSSFWorkbook(is);
default:
throw new IOException("Your InputStream was neither an OLE2 stream, nor an OOXML stream");
}
}
В xlsx он создает XSSFWorkbook
Но тот же сценарий, который я тестировал на примере проекта Java, и он работает. Это исключение только приходит с другим проектом, который является проектом весенней загрузки с undertow. Зависимость обоих проектов, таких как poi и commons.compress, одинакова. Я не могу понять, почему его дает это исключение только в этом проекте