【问题标题】:how to solve Restful Web service error on tomcat startup?如何解决Tomcat启动时Restful Web服务错误?
【发布时间】:2019-03-05 20:05:34
【问题描述】:

我最近添加了 Jersey Jars 用于使用 rest 和 tomcat 无法启动并出现以下错误:

Oct 01, 2018 12:13:11 AM org.glassfish.jersey.internal.inject.Providers checkProviderRuntime
WARNING: A registered provider org.glassfish.jersey.jaxb.internal.JaxbParamConverterBinder is constrained (via @ConstrainedTo) to SERVER runtime but does not implement any provider interface usable in the runtime. Due to constraint configuration problems the provider org.glassfish.jersey.jaxb.internal.JaxbParamConverterBinder will be ignored. 
Oct 01, 2018 12:13:12 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoSuchMethodError: jersey.repackaged.com.google.common.collect.Iterables.concat(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/lang/Iterable;
    at org.glassfish.jersey.server.internal.ConfigHelper.getContainerLifecycleListener(ConfigHelper.java:92)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:172)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:363)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1230)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1174)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1066)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5370)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5668)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1700)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1690)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Jersey 罐子也包括在内的罐子列表:

谢谢。

【问题讨论】:

  • 使用 Maven ......
  • 嗨,Paul,我能够通过移除 Jersey 并使用开箱即用的 resteasy 来解决兼容性问题(基本上是移除罐子和重新连接的罐子)。至于您对 Maven 的建议,我需要在某个阶段将我的项目转换为 Maven 是的。但是现在看起来很难将大 jars 列表转换为具有所有依赖项的工作 POM 文件。对于大多数 jar,我不知道应该添加哪些依赖项。

标签: rest tomcat7 guava


【解决方案1】:

这些类型的错误有时表明您在类路径中使用的库的版本较旧和较新。您使用的番石榴库之间可能不匹配。请参阅此相关问题的answer

也许您应该考虑使用 Maven 来处理项目依赖关系。

【讨论】:

  • 我已经用谷歌搜索并看到了您链接的答案。我使用的是 Jersey 2.27,guava 版本是 18.0,如图所示。我知道错误表明不匹配,但我需要确切知道,
  • 尝试删除 guava jar,因为您已经导入了 jersey-guava,它重新打包了 guava 类。
【解决方案2】:

有些情况会导致该错误,例如:

  1. 您没有任何包含 jersey.repackaged.com.google.common.collect.Iterables 类的 jar 文件。但据我所知,您的文件 jersey-guava-2.25.1.jar 已经有了。所以这种情况被忽略了。

  2. 上述 jar 文件已损坏,因此无法加载该类。因此,您可以删除该 jar 并替换为其他正确的 jar。

  3. 在您的所有库中,该类不止一个。也许其他其他 jar 也包含该类。因此,您可以在 IDE 上检查此案例并消除此冲突。

希望对您有所帮助!

【讨论】:

  • 我发现这种方法出现在 jersey-guava-2.25.1.jar 和 jersey-common.jar 上,但删除 jersey-common.jar 我得到了不同的错误:java.lang。 ClassNotFoundException: org.glassfish.jersey.internal.inject.AbstractBinder
  • 至少,你已经知道了根本原因。您应该使用与 jersey-guava 相同的 jersey-common 版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多