Как исправить AbstractMethodError при загрузке файла xlsx через apache POI - PullRequest
0 голосов
/ 29 апреля 2019

Я пытался сделать загрузку (в старом веб-приложении) совместимой как для файлов xls, так и для файлов xlsx, xls работает нормально, но загрузка xlsx выдает эту ошибку:

SEVERE: Servlet.service() for servlet [MainServlet] in context with path [/timesheet] threw exception [Servlet execution threw an exception] with root cause
java.lang.AbstractMethodError: org.apache.crimson.tree.ElementNode2.getTextContent()Ljava/lang/String;
    at org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.readElement(PackagePropertiesUnmarshaller.java:146)
    at org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.loadCreated(PackagePropertiesUnmarshaller.java:162)
    at org.apache.poi.openxml4j.opc.internal.unmarshallers.PackagePropertiesUnmarshaller.unmarshall(PackagePropertiesUnmarshaller.java:124)
    at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:788)
    at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:327)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:185)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:144)

текущая версия poi lib - 3.14, но я также пробовал 3.16 (та же ошибка) и 3.17, приложение в настоящее время использует Java 1.6

public List<AttendanceRecord> getAttendanceRecords(List<AttendanceRecordErrMsg> errorMessages) throws Exception {

        Workbook wb = WorkbookFactory.create(new FileInputStream(arFile)); //app already throws an error upon reaching this line

        List<AttendanceRecord> attendanceRecordList = new ArrayList<AttendanceRecord>();

1 Ответ

1 голос
/ 29 апреля 2019

Причина такой ошибки в том, что Crimson Library включена в ваш проект, который обеспечивает реализацию (основанную на xml-apis 1.0.b2, как в последней версии 1.1.3) на интерфейсе Nodeи не реализует метод getTextContent(), который вводится в соответствии с Базовая спецификация объектной модели (DOM) уровня 3 .

Чтобы исправить такую ​​ошибку, вы можете выполнить одно из следующих действий:

1.Удалите Багровую библиотеку из вашего проекта.

2. Укажите системное свойство javax.xml.parsers.DocumentBuilderFactory, чтобы избежать использования класса org.apache.crimson.jaxp.DocumentBuilderFactoryImpl, добавив следующую строку
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...