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

nid*_*hin 2 java apache-poi jboss5.x jsf-1.2

在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)
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*ard 8

看起来你的应用程序正在抛出你看到的异常,因为在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();
    }
Run Code Online (Sandbox Code Playgroud)

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

POILoggerPOILogFactory类均从包装进口org.apache.poi.util.POILogFactory,和这两个类都包含POI-3.7.jar内,所以他们在这里是没有问题的.因此,通过消除,似乎必须缺少来自的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 - 也许这值得关注?


小智 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 发行版中。