【问题标题】:EJB ETL NoClassDefFoundError: org.apache.poi.util.SAXHelper during runtimeEJB ETL NoClassDefFoundError: org.apache.poi.util.SAXHelper 在运行时
【发布时间】:2017-11-09 18:38:51
【问题描述】:

pom有以下依赖,

        <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

根本原因是下面代码sn-p中的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。一切似乎都很好。

谢谢。

【问题讨论】:

  • ear 被部署到waswas console 时,应用程序运行良好。好像Eclipse 类路径入口问题,任何来自社区的 cmets 都会有所帮助

标签: java maven websphere eclipse-juno buildpath


【解决方案1】:

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

【讨论】:

  • 我已经检查了 eclipse 中的类路径条目,但没关系,所有的 jars 都可用。任何解决此问题的方法
  • 你使用类加载器模式PARENT_LAST吗?如果没有,请更改您的 ear(/war?) 类加载设置。我最近在使用 WAS Liberty 时遇到了一些奇怪的问题,我们需要将 bouncycastle 放入 JVM/lib/ext 中……我希望它可以与 PARENT_LAST 一起使用……
  • WAS 中的 parent last 模式没有运气,eclipse 中的类路径条目有些问题,尝试编辑元文件,没有运气。当前创建了新的工作区,签入了新代码,构建并运行了,但没有运气。目前正在从终端构建应用程序并通过 WAS 管理 Web 控制台进行部署并继续我的工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2018-09-03
  • 2020-11-11
  • 1970-01-01
  • 2023-04-07
  • 2018-06-16
相关资源
最近更新 更多