在Jboss 5.0 EAP中获得以下异常,但它在JBoss 5.1 GA中运行良好。
我们使用的是POI 3.7,其中包含的是
堆栈跟踪
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中解决此问题
答案 0 :(得分: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();
}
如果JVM无法加载所有POILogger
,POILogFactory
和XmlOptions
类,则此静态初始化将失败。
POILogger
和POILogFactory
类都是从包org.apache.poi.util.POILogFactory
导入的,并且这两个类都包含在poi-3.7.jar中,因此它们不是问题所在。因此,通过删除,似乎必须缺少来自XmlOptions
的{{1}}类import
。
我发现org.apache.xmlbeans.XmlOptions
内的XMLOptions
课程包含在xbean.jar
lib
文件夹中xmlbeans-2.6.0.zip
可从其中一个镜像here下载。
在我看来,添加这个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 - 或许值得一看?
答案 1 :(得分:3)
我在使用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发行版中。
答案 2 :(得分:1)
仅通过添加xbean.jar,就无法解决问题。它会继续抱怨没找到的课程。我所做的不仅是导入xbean.jar,还导入了xmlbeans-2.5.0的lib文件夹下列出的其他jar文件
答案 3 :(得分:1)
将以下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