java.lang.NoClassDefFoundError:在JBoss EAP 5.0

问题描述:

获得以下异常到JBoss EAP 5.0无法初始化类org.apache.poi.POIXMLDocument但在JBoss的5.1 GA做工精细。java.lang.NoClassDefFoundError:在JBoss EAP 5.0

我们使用包括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) 

请指教如何解决e在JBoss 5.0中的这个问题EAP

+1

是我还是这是否堆栈跟踪看起来就像是一个堆栈跟踪的屏幕截图的OCR扫描? –

+0

@LukeWoodward是的,这是一个OCR扫描 – nidhin

+0

HorkbookFactory让我微笑,+1 – geert3

看起来应用程序看起来像是抛出了异常,因为在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类有几个staticString常量,这不会导致任何问题,但没有静态初始化器。然而,这是POIXMLDocumentPart一个子类,这是Object一个子类,它具有以下静态初始化代码:如果JVM无法加载所有POILoggerPOILogFactoryXmlOptions

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(); 
    } 

这种静态初始化将失败。

POILoggerPOILogFactory这两个类都是从包org.apache.poi.util.POILogFactory导入的,两个类都包含在poi-3.7.jar中,所以它们在这里不是问题。所以,通过消除,看起来XmlOptions类,import编号从org.apache.xmlbeans.XmlOptions,必须丢失。

我发现从反射镜here之一包含xmlbeans-2.6.0.zip可下载的文件夹lib内内xbean.jarXMLOptions类。

这很可能对我来说,增加这个JAR将修复在JBoss EAP 5.0的问题。但是,我知道你说你的应用程序在JBoss 5.1 GA中工作正常,这意味着JBoss 5.1 GA包含这个JAR的副本,而5.0 EAP则没有。因此,我不确定解决此问题的最佳方法是什么。我会犹豫是否将这个XMLBeans JAR添加到您的应用程序中,因为这样做可能会导致您在JBoss 5.1下运行时出现问题。我不知道是否有办法为JBoss 5.0添加额外的'库'JAR,可能值得一看?

单独仅添加xbean.jar,你解决不了这个问题。它会继续抱怨阶级没有找到。我所做的不仅是导入xbean.jar,还导入了xmlbeans-2.5的lib文件夹下列出的其他jar文件。0

我与Apache POI在JBoss 8.2(WildFly 8.2.0.Final)上运行同样的错误3.14

错误:

产生的原因:java.lang.NoClassDefFoundError:无法初始化类组织.apache.poi.POIXMLTypeLoader

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

放置在类路径下面的罐子会做的伎俩:

  • 的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