2012-11-08 56 views
1

獲得以下異常到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

回答

6

看起來應用程序看起來像是拋出了異常,因爲在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,可能值得一看?

1

單獨僅添加xbean.jar,你解決不了這個問題。它會繼續抱怨階級沒有找到。我所做的不僅是導入xbean.jar,還導入了xmlbeans-2.5的lib文件夾下列出的其他jar文件。0

1

我與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)來解決此問題。

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