java.lang.NoClassDefFoundError:无法在 Jboss 5.0 EAP 上初始化类 org.apache.poi.POIXMLDocument

2023-12-20

在 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 中解决此问题


您的应用程序似乎抛出了您所看到的异常,因为在 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初始化块。这POIXML文档 http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi-ooxml/3.7-beta1/org/apache/poi/POIXMLDocument.java班级有几个static String常量,这不会导致任何问题,但没有静态初始化程序。然而它是一个子类POIXML文档部分 http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi-ooxml/3.7-beta1/org/apache/poi/POIXMLDocumentPart.java#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, POILogFactory and XmlOptions类。

The POILogger and POILogFactory类都是从包中导入的org.apache.poi.util.POILogFactory,并且这两个类都包含在 poi-3.7.jar 中,因此它们不是这里的问题。所以,通过排除法,似乎XmlOptions class, imported from org.apache.xmlbeans.XmlOptions,必定缺失。

我找到了这个XMLOptions类内xbean.jar包含在lib的文件夹xmlbeans-2.6.0.zip可从其中一个镜像下载here http://www.mirrorservice.org/sites/ftp.apache.org/xmlbeans/binaries/.

在我看来,添加这个 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 - 也许这值得一看?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.NoClassDefFoundError:无法在 Jboss 5.0 EAP 上初始化类 org.apache.poi.POIXMLDocument 的相关文章

随机推荐