【问题标题】:NoSuchMethodError when accessing web app resource on Tomcat server访问 Tomcat 服务器上的 Web 应用程序资源时出现 NoSuchMethodError
【发布时间】:2011-05-15 01:47:07
【问题描述】:

在网上搜索后,这是一个我一直无法找到答案的问题。 我的 Web 应用程序部署到了 tomcat 服务器,我知道这一切都在工作,因为 index.jsp 显示了文本。但是当我尝试访问我制作的应该打印出 hello world 的资源时,tomcat 服务器会返回此消息

java.lang.NoSuchMethodError: com.sun.jersey.core.spi.component.ProviderServices.<init>(Lcom/sun/jersey/core/spi/factory/InjectableProviderFactory;Lcom/sun/jersey/core/spi/component/ProviderFactory;Ljava/util/Set;Ljava/util/Set;)V
    com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:450)
    com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:383)
    com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:377)
    com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:242)
    com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:449)
    com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:169)
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:281)
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:442)
    javax.servlet.GenericServlet.init(GenericServlet.java:212)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Unknown Source)

是否有人对为什么会发生这种情况有任何想法或线索可以帮助我解决这个问题?

非常感谢任何帮助 谢谢 克里斯

【问题讨论】:

  • WEB-INF/lib 中有多少 jersey-bundle* jar?
  • ahhhh 在网络 inf 中有大量的 jars 我认为我之前添加过并且还没有从文件夹中清除并且它工作得很好。谢谢你 。你没有意识到这有多大帮助:D

标签: java tomcat resources jersey


【解决方案1】:

我的猜测是你的类路径中的 jar 有问题。可能,您的类路径或 WEB-INF/lib 中可能有两个不同版本的球衣

【讨论】:

  • 我使用的是 maven,我唯一的依赖是 jersey bundle 。我在本地安装了 eclipse 和 maven 的 maven 插件是否有可能与问题有关,这两个存储库可能会发生冲突
  • 根据 cmets 修改了完整的答案
【解决方案2】:

您必须将以下球衣罐子包含到您的 WEB-INF/lib 文件夹中

  • jersey-server-1.3.jar
  • asm-3.1.jar
  • jersey-core-1.3.jar
  • jersey-client-1.3.jar

【讨论】:

    【解决方案3】:

    我相信这是由“jersey-server”和“jersey-core”jar 之间的版本差异引起的(还要仔细检查您是否不小心在 WEB-INF/lib 中有这些不同 jar 的重复不同版本文件夹)。

    在我的例子中,我们提升了 jersey-client 版本,它提升了 jersey-core 版本(一个依赖项)或类似的东西,而我们调用了一个特定的(较旧的)jersey-server 版本,从而导致了不匹配(旧球衣服务器 1.0.2,新球衣核心 1.11)。

    还有

    SEVERE: The provider class, class com.sun.jersey.core.impl.provider.xml.XMLStreamReaderContextProvider, could not be instantiated
    Caused by: java.lang.NullPointerException
            at com.sun.jersey.core.impl.provider.xml.TransformerFactoryProvider.<init>(TransformerFactoryProvider.java:57)
            ... 44 more
    

    我也这么认为。

    如果 jersey-core 为 1.0.2 而 jersey-client 为 1.11,则同样的 ProviderServices 失败。

    修复:使它们都匹配。

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 2012-09-28
      • 1970-01-01
      • 2016-10-20
      • 2011-04-22
      • 2023-04-01
      • 2014-03-13
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多