【问题标题】:Server Tomcat v8.5 failed to start for hello world Jersey Web Service服务器 Tomcat v8.5 无法启动 hello world Jersey Web 服务
【发布时间】:2017-02-08 19:20:10
【问题描述】:

我正在设置我的 Jersey Web 服务,但无法运行,Apache Tomcat 8.5 出错了。有关简单代码、我的库和错误,请参阅下面的详细信息。

我创建了一个动态 Web 项目... 我添加了我的 Jersey 文件...(我遗漏了什么吗?

  • javax.ws.rs-api.2.0.1.jar
  • jersey-client.jar
  • jersey-common.jar
  • jersey-contaner-servlet.jar
  • jersey-container-servlet.jar
  • jersey-media-jaxb.jar
  • jersey-server.jar

我的 Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
 <servlet>
    <servlet-name>myApi</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <!-- The package where your resource classes are -->
        <param-value>WS</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>testApi</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

我的 Java 类

package ws;
import javax.ws.rs.*;
import javax.ws.rs.core.*;

    @Path("test")
    public class Connect {
        @GET
        @Path("test")
        @Produces(MediaType.TEXT_PLAIN)
        public String hello(){
            return "hello world";
        }
    }

我之前的错误提示无法启动Apachev8.5

SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ThisApi]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:911)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:890)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ThisApi]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    ... 6 more
Caused by: java.lang.NoClassDefFoundError: jersey/repackaged/com/google/common/base/Function
    at org.glassfish.jersey.internal.ServiceFinder.<clinit>(ServiceFinder.java:165)
    at org.glassfish.jersey.servlet.internal.ServletContainerProviderFactory.getAllServletContainerProviders(ServletContainerProviderFactory.java:66)
    at org.glassfish.jersey.servlet.init.JerseyServletContainerInitializer.onStartup(JerseyServletContainerInitializer.java:134)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5178)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: jersey.repackaged.com.google.common.base.Function
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    ... 11 more

【问题讨论】:

  • 看看这是否有帮助......这是针对tomcat 7的。答案列出了所有依赖项,stackoverflow.com/questions/22754372/…
  • 我想是这样....可笑的库我需要多少,不确定是什么导致了差异,但我会再检查一下....知道我的测试网址是什么会吗?
  • localhost:port/你的应用程序 contextroot/test
  • hmmmm no 似乎不起作用..我有 java 代码中的 /test/test ......我有 localhost:8081/ (没关系)和我的 localroot - 我如何确定这是否是正确的?我还在 xml 中看到 paramValue ......所以这给了我 localhost:8081\contextroot\WS\test\test
  • 应该是:localhost:8081/test/test

标签: java eclipse apache tomcat jersey-2.0


【解决方案1】:

您缺少jersey-guava.jar,它应该包含Google Guava 类的包重新捆绑版本,包括Function。 Jersey 重新打包了他们需要的确切版本,以便您仍然可以从原始包结构中使用您喜欢的 Guava 版本。见https://stackoverflow.com/a/22069399/27905

https://mvnrepository.com/artifact/org.glassfish.jersey.bundles.repackaged/jersey-guava

【讨论】:

  • 嘿伙计,我将它添加为修复程序的一部分以使 tomcat 运行,但是...现在我收到 http 状态 404 错误
  • 仍然有这个错误。 tomcat 手动启动我可以点击本地主机....我启动我的 web 服务我不能点击本地主机
  • @Fearghal 您应该为此提出一个新问题,包括您如何在其中部署和启动 Tomcat 以及您的 Web 应用程序的详细信息。
  • 我确实包括了我的库、我的代码、我的 tomcat 版本,我做了一些故障排除......stackoverflow.com/questions/42211334/…
猜你喜欢
  • 2017-07-03
  • 1970-01-01
  • 2021-11-08
  • 2010-11-25
  • 2020-05-07
  • 2020-10-12
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多