PackagePropertiesMarshaller $ NamespaceImpl не найден при использовании Apache poi с сервлетом Java - PullRequest
0 голосов
/ 22 мая 2019

Я пытался создать свое первое веб-приложение, используя IntelliJ и Tomcat, и одной из задач является возможность загрузки и обработки файла листа Excel. Итак, я посмотрел в Интернете и нашел библиотеку Apache POI, которая может помочь мне разобрать файл Excel. Но когда я скачал все необходимые файлы jar, скопировал и вставил некоторый тестовый код и запустил сервер, на веб-странице отображается ошибка с состоянием http 500, основной причиной которой является java.lang.ClassNotFoundException: org.apache.poi .openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller $ NamespaceImpl.

Я столкнулся с проблемой с другими jar-файлами, но все они были решены путем помещения соответствующих jar-файлов в папку lib tomcat, кроме этой.

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;

public class ExcelParser {
    private String pathname;

    public ExcelParser(String pathname) {
        this.pathname = pathname;
    }

    public void parse() {

        try {
            FileInputStream file = new FileInputStream(new File("/Users/JohnDoe/Desktop/test.xlsx"));

            //Create Workbook instance holding reference to .xlsx file
            XSSFWorkbook workbook = new XSSFWorkbook(file);

            //Get first/desired sheet from the workbook
            XSSFSheet sheet = workbook.getSheetAt(0);

            //Iterate through each rows one by one
            Iterator<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                //For each row, iterate through all the columns
                Iterator<Cell> cellIterator = row.cellIterator();

                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    //Check the cell type and format accordingly
                    switch (cell.getCellType()) {
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "t");
                            break;
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "t");
                            break;
                    }
                }
                System.out.println();
            }
            file.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я просто тестирую функциональность синтаксического анализа Excel, так что не беспокойтесь о пути.

Кстати, я вижу, что этот (внутренний) класс объявлен в poi-ooxml4-4.1.0.jar, который также включен в мою папку Tomcat lib.

Любые идеи, почему это происходит, и как я должен это исправить, приветствуются.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Чтобы использовать Apache POI, вам нужны следующие файлы jar.

  1. пои-OOXML-4.1.0.jar
  2. пои-OOXML-схемы-4.1.0.jar
  3. XMLBeans-3.1.0.jar
  4. Обще-компресс-1.18.jar
  5. curvesapi-1.06.jar
  6. пои-4.1.0.jar
  7. Обще-кодек-1.12.jar
  8. Обще-collections4-4.3.jar
  9. Обще-math3-3.6.1.jar

Вы можете обратиться по следующей ссылке, на которую я ответил несколько вещей. Невозможно прочитать Excel, используя Apache POI

0 голосов
/ 23 мая 2019

Я думаю, что что-то упустил при перемещении jar-файлов в каталог lib, так как я удалил исходные файлы и повторил команду cp, теперь все работает. Я закрываю вопрос ответом, спасибо за помощь!

...