JBOSS唯一错误:java.lang.NoClassDefFoundError:无法初始化类org.apache.poi.ooxml.util.

nbysray5  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(381)

当使用Apache POI创建Workbook对象来处理输入流时,我开始收到错误:
java.lang.NoClassDefFoundError:无法初始化类org.apache.poi.ooxml.util.
我逐步浏览并发现它发生在ContentTypeManager.class(来自org.apache.poi.openxml4j.opc.internal)的这段代码中的第一行:

private void parseContentTypesFile(InputStream in) throws InvalidFormatException {
    try {
        Document xmlContentTypetDoc = DocumentHelper.readDocument(in);
        NodeList defaultTypes = xmlContentTypetDoc.getDocumentElement().getElementsByTagNameNS("http://schemas.openxmlformats.org/package/2006/content-types", "Default");
        int defaultTypeCount = defaultTypes.getLength();
        ....

因此,DocumentHelper.readDocument(in)这一行使用的是javax.xml.parsers.DocumentBuilder,这就是问题的根本所在,它无法创建DocumentBuilder。我尝试删除xercesImpl,但没有效果。

<dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.12.1</version>
    </dependency>

代码在WildFly服务器上运行成功,但在JBOSS下运行失败。我们正在迁移到WildFly,但同时生产仍然运行JBOSS。
有什么想法如何解决这个错误吗?这个项目也有tika-core和tika-parsers-standard-package依赖项,不确定这些依赖项是否会在JBOSS下导致问题。以前这是在JBOSS下工作的。
更新:我的POM包含与问题相关的以下条目:

<dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.2</version>
    </dependency>
    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.12.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers-standard-package</artifactId>
        <version>2.7.0</version>
    </dependency>
kupeojn6

kupeojn61#

所以我发现了这个问题,并想跟进。为了让应用程序在WildFly下运行,我不得不添加一些日志排除,因为WildFly的类路径上已经有日志记录器导致冲突。然而,在JBOSS中运行时,除了POI之外,应用程序的所有部分都可以正常工作,因为DocumentBuilder无法在类路径上找到所需的日志依赖项。在JBOSS的POM中恢复日志记录排除后,问题就解决了。

相关问题