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

问题描述 投票:0回答:1

当使用 Apache POI 创建工作簿对象来处理输入流时,我开始收到错误:

java.lang.NoClassDefFoundError: 无法初始化类 org.apache.poi.ooxml.util.DocumentHelper

我一步一步发现它出现在 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>
java jboss apache-poi wildfly
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.