2017-06-08 258 views
0

pom具有以下依存关系,EJB ETL NoClassDefFoundError的:org.apache.poi.util.SAXHelper运行期间

 <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi</artifactId> 
      <version>3.16</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-ooxml</artifactId> 
      <version>3.16</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-ooxml-schemas</artifactId> 
      <version>3.16</version> 
     </dependency> 

但在运行时,在etl过程中出现以下错误,

EJB threw an unexpected (non-declared) exception during invocation of method "****" on bean "BeanId(***-ear#***-ejb.jar#***ServiceImpl, null)". Exception data: java.lang.NoClassDefFoundError: org.apache.poi.util.SAXHelper 

根本原因是NoClassDefFoundError在以下代码片段中,

XMLReader parser = SAXHelper.newXMLReader(); 

使用环境,

JDK 1.6.0_35 
Websphere Application Server v8.0 
Eclipse Juno Service Release 2 

完整的堆栈跟踪可以在这里找到

Caused by: java.lang.ClassNotFoundException: org.apache.poi.util.SAXHelper 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:434) 
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:230) 
    at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:703) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:682) 
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:123) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:665) 
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) 
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) 
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:566) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:665) 
    ... 87 more 

注:我已经打开了ear档案,发现各自的jars可用。也检查了Eclipsejava build path。一切似乎都很好。

谢谢。

+0

虽然'ear'已通过'was console'部署到'was'中,但该应用程序运行良好。看起来像'Eclipse'类路径入口问题,来自社区的任何评论都会有所帮助 – BalaajiChander

回答

0

SAXHelper在poi-ooxml-3.16.jar中。我怀疑这个类中的一个静态初始化器失败了。 https://github.com/apache/poi/blob/trunk/src/ooxml/java/org/apache/poi/util/SAXHelper.java

+0

我已经在eclipse中检查了类路径条目,但没关系,所有jar都可用。任何解决此问题 – BalaajiChander

+0

您是否使用classloader模式PARENT_LAST?如果没有,请改变你的耳朵(/战争?)班加载设置。我最近遇到了一些与WAS Liberty有关的奇怪问题,我们需要将bouncycastle放入JVM/lib/ext中...我希望它能与PARENT_LAST一起使用... – kiwiwings

+0

WAS中的父上次模式没有运气,类路径出错日食中的条目,尝试编辑元文件,没有运气。当前创建的新工作空间,签入新代码,构建并工作,但没有运气。目前正在从终端构建应用程序,并通过WAS管理员Web控制台部署并推进我的工作...... – BalaajiChander