您的应用程序似乎抛出了您所看到的异常,因为在 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
初始化块。这POIXML文档 http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi-ooxml/3.7-beta1/org/apache/poi/POIXMLDocument.java班级有几个static
String
常量,这不会导致任何问题,但没有静态初始化程序。然而它是一个子类POIXML文档部分 http://grepcode.com/file/repo1.maven.org/maven2/org.apache.poi/poi-ooxml/3.7-beta1/org/apache/poi/POIXMLDocumentPart.java#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
and XmlOptions
类。
The POILogger
and POILogFactory
类都是从包中导入的org.apache.poi.util.POILogFactory
,并且这两个类都包含在 poi-3.7.jar 中,因此它们不是这里的问题。所以,通过排除法,似乎XmlOptions
class, import
ed from org.apache.xmlbeans.XmlOptions
,必定缺失。
我找到了这个XMLOptions
类内xbean.jar
包含在lib
的文件夹xmlbeans-2.6.0.zip
可从其中一个镜像下载here http://www.mirrorservice.org/sites/ftp.apache.org/xmlbeans/binaries/.
在我看来,添加这个 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 - 也许这值得一看?