繁体   English   中英

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

[英]java.lang.NoClassDefFoundError: Could not initialize class org.apache.poi.POIXMLDocument on Jboss 5.0 EAP

在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初始化程序块。 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无法加载所有POILoggerPOILogFactoryXmlOptions类,则此静态初始化将失败。

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

我发现这个XMLOptions类内xbean.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 - 也许这值得关注?

我在使用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发行版中。

通过单独添加xbean.jar,您无法解决问题。 它会继续抱怨没找到的课程。 我所做的不仅是导入xbean.jar,还导入了xmlbeans-2.5.0的lib文件夹下列出的其他jar文件

将以下jar放在classpath中就可以了:

  • dom4j的-1.6.1.jar

  • POI-3.9-20121203.jar

  • POI-OOXML-3.9-20121203.jar

  • POI-OOXML-架构 - 3.9-20121203.jar

  • XMLBeans的-2.3.0.jar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM