【问题标题】:How to avoid NullPointerException in WebappClassLoader.findResources?如何避免 WebappClassLoader.findResources 中的 NullPointerException?
【发布时间】:2011-11-20 21:39:33
【问题描述】:

当使用 manager-app 重新部署特定的 webapp 时,由于 WebappClassLoader.findResources(下面的 Stacktrace),下一次调用会导致“NullPointerException”。重启tomcat后应用就可以流畅运行了。

查看整个网络,这个问题似乎很常见,但没有具体的解决方案。对我来说,这只是在部署一个特定的 web 应用程序时引起的。与一些邮件列表相关,它可能是一个包含在 shared/libs/ 中但不应该在 /WEB-INF/libs/ 中的 jar(例如axis.jar)

为了构建和部署 web 应用程序,我使用 maven,它适用于所有其他应用程序,但只有这个。本项目的项目配置与其他项目没有区别。

我可以做一些事情来找出tomcat“崩溃”的原因吗?!有人有解决这个问题的想法吗?!

java.lang.NullPointerException
    at org.apache.catalina.loader.WebappClassLoader.findResources(WebappClassLoader.java:1245)
    at java.lang.ClassLoader.getResources(ClassLoader.java:1041)
    at org.apache.commons.discovery.jdk.JDK12Hooks.getResources(JDK12Hooks.java:150)
    at org.apache.commons.discovery.resource.DiscoverResources$1.getNextResources(DiscoverResources.java:153)
    at org.apache.commons.discovery.resource.DiscoverResources$1.getNextResource(DiscoverResources.java:129)
    at org.apache.commons.discovery.resource.DiscoverResources$1.hasNext(DiscoverResources.java:116)
    at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassNames(DiscoverNamesInFile.java:186)
    at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassName(DiscoverNamesInFile.java:170)
    at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.hasNext(DiscoverNamesInFile.java:157)
    at org.apache.commons.discovery.resource.names.NameDiscoverers$1.getNextIterator(NameDiscoverers.java:143)
    at org.apache.commons.discovery.resource.names.NameDiscoverers$1.hasNext(NameDiscoverers.java:126)
    at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.getNextResource(ResourceClassDiscoverImpl.java:159)
    at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.hasNext(ResourceClassDiscoverImpl.java:147)
    at org.apache.axis.configuration.EngineConfigurationFactoryFinder$1.run(EngineConfigurationFactoryFinder.java:120)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:113)
    at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:160)
    at org.apache.axis.client.Service.getEngineConfiguration(Service.java:813)
    at org.apache.axis.client.Service.getAxisClient(Service.java:104)
    at org.apache.axis.client.Service.<init>(Service.java:113)

【问题讨论】:

    标签: jakarta-ee tomcat maven


    【解决方案1】:

    今天发生在我身上,是因为 WEB-INF/lib 中没有 saaj.jar。

    【讨论】:

      【解决方案2】:

      我已经看到在您的 Tomcat/lib 文件夹中包含 commons-discovery.jar 时会出现此问题。

      如果您将 commons-discovery.jar 用于项目特定目的,请将其放在项目的 WEB-INF/lib 文件夹中,而不是 Tomcat/lib 文件夹中,这应该可以解决您的问题。

      这是一个部署问题,而不是 Tomcat 问题。

      【讨论】:

      • 非常感谢!我刚刚遇到了同样的问题,但对于 Glassfish。
      猜你喜欢
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2016-12-01
      • 2019-04-18
      相关资源
      最近更新 更多