5

在 Jboss 5.0 EAP 中出现以下异常,但在 JBoss 5.1 GA 中可以正常工作。

我们正在使用 POI 3.7 并且包含的​​罐子是

  • poi-3.7.jar
  • poi-ooxml-schemas.jar
  • poi-ooxml.jar

堆栈跟踪是

ERROR [org.apache.catalina.core.ContainerBase.[jboss.ueb].[localhost].[fesbcon-Fig].[Faces Servlet]]
    3;13;44.4g3pM (http-0.0.0.0-8280-1) Servlet.service() -For servlet Faces Servlet threu exception
    java.lang.NoClassDe-FFoundError: Could not initialize class org.apache.poi.POIXMLDocument
    at org.apache.poi.ss.usermodel.HorkbookFactory.create(HorkbookFactory.java:62)
    at com.-Ferguson.esb.con-Fig.controller.AssociationsExcelUploadController.submit(Unknoun Source)
    at sun.re-Flect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.re-Flect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.re-Flect.DelegatingMethodAccessorImpl.invoke(Delegating?ethodAccessorImpl.java:25)
    at java.lang.re-Flect.Method.invoke(Method.java:597)
    at org.apache.my-Faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
    at org.apache.my-Faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)

请建议如何在 JBoss 5.0 EAP 中解决这个问题

4

4 回答 4

11

看起来您的应用程序正在抛出您所看到的异常,因为在 JBoss 5.0 下运行时不存在 Apache XMLBeans JAR 或类。似乎 Apache POI 正在尝试加载该类org.apache.xmlbeans.XMLOptions,但找不到该类。

该消息Could not initialize class SomeClass表明 JVM 已两次尝试加载和静态初始化该类,但均失败SomeClass。在这种情况下,有问题的类是org.apache.poi.POIXMLDocument

类的静态初始化包括静态初始化其超类、为所有static字段分配值和运行所有static初始化程序块。POIXMLDocument有几个static String常量,不会引起任何问题,但没有静态初始化程序。然而,它是POIXMLDocumentPart的子类,它是的子类Object,具有以下静态初始化代码:

    private static POILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class);

    public static final XmlOptions DEFAULT_XML_OPTIONS;
    static {
        DEFAULT_XML_OPTIONS = new XmlOptions();
        DEFAULT_XML_OPTIONS.setSaveOuter();
        DEFAULT_XML_OPTIONS.setUseDefaultNamespace();
        DEFAULT_XML_OPTIONS.setSaveAggressiveNamespaces();
    }

如果 JVM 无法加载所有POILogger,POILogFactoryXmlOptions类,此静态初始化将失败。

POILoggerPOILogFactory类都是从包中导入的,org.apache.poi.util.POILogFactory并且这两个类都包含在 poi-3.7.jar 中,所以它们不是这里的问题。因此,通过消除,似乎必须缺少ed from的XmlOptions类。importorg.apache.xmlbeans.XmlOptions

我发现这个XMLOptionsxbean.jar包含在可从此处的一个镜像下载的lib文件夹中。xmlbeans-2.6.0.zip

在我看来,添加这个 JAR 可能会解决 JBoss 5.0 EAP 上的问题。但是,我知道您说您的应用程序在 JBoss 5.1 GA 中运行良好,这对我来说意味着 JBoss 5.1 GA 包含此 JAR 的副本,而 5.0 EAP 没有。因此,我不确定解决此问题的最佳方法是什么。我会犹豫是否将此 XMLBeans JAR 添加到您的应用程序中,因为这样做可能会在您在 JBoss 5.1 下运行它时导致问题。不过,我不知道是否有办法向 JBoss 5.0 添加额外的“库”JAR - 也许这值得一看?

于 2012-11-08T12:13:48.477 回答
5

我在使用 Apache POI 3.14 的 JBoss 8.2 (WildFly 8.2.0.Final) 上运行时遇到了同样的错误

错误:

原因:java.lang.NoClassDefFoundError:无法初始化类 org.apache.poi.POIXMLTypeLoader

我通过将最新的 xmlbeans-2.6.0 jar(我以前有 2.4.0)包含到我的部署中来解决此问题,该部署包含在 ooxml-lib 文件夹中的 Apache POI 3.14 发行版中。

于 2016-07-08T15:29:48.680 回答
3

将以下罐子放在类路径中就可以了:

  • dom4j-1.6.1.jar

  • poi-3.9-20121203.jar

  • poi-ooxml-3.9-20121203.jar

  • poi-ooxml-schemas-3.9-20121203.jar

  • xmlbeans-2.3.0.jar

于 2016-12-03T13:14:10.077 回答
1

只添加 xbean.jar 是无法解决问题的。它将继续抱怨找不到类。我所做的是不仅导入 xbean.jar 还导入 xmlbeans-2.5.0 的 lib 文件夹下列出的其他 jar 文件

于 2013-02-08T10:30:51.273 回答