【问题标题】:in jersey 2.x am getting the error like java.util.concurrent.ExecutionException在球衣 2.x 中,我收到类似 java.util.concurrent.ExecutionException 的错误
【发布时间】:2015-06-09 18:40:44
【问题描述】:
  1. 我已经使用了 jaxrs 的球衣实现,但我无法执行以下程序,如果我遇到问题,任何想法都可以帮助我

    在下面的程序中,我使用了 jersy 2.x 的 jaxrs 实现 我使用 jax-rs(restfull) 的 jersey 实现来实现该程序 我写了 2 个类而不是 web.xml 我使用了这个类

    MyResource.java

    package com.rest.application;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.ApplicationPath;
    
    import com.rest.webservice.SampleService;
    @ApplicationPath("rest")
    public class MyResource {
        private Set s;
        public MyResource() {
            s=new HashSet();
            s.add(new SampleService());
        }
         public Set getSingletons() {
            return s;
        }
    }
    

    SampleService.java

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    
    @Path("sample")
    public class SampleService {
        @GET
        @Produces("text/html")
        @Path("{username}")
        public String sayHello(@PathParam("username")String s) {
            return "<font color='blue' size=8>Hello:" +s+ "</font>";
        }
        @GET
        @Produces("text/plain")
        public String sayBye() {
        return "Bye";
    }
    }
    

    我添加了该程序所需的所有罐子 我仍然收到以下错误

    java.util.concurrent.ExecutionException:
    org.apache.catalina.LifecycleException:
    Failed to start component [StandardEngine[Catalina].
    StandardHost[localhost].StandardContext[/RestApp2]]
    Caused by: org.apache.catalina.LifecycleException:
    Failed to start component [StandardEngine[Catalina].
    StandardHost[localhost].StandardContext[/RestApp2]]
    

    就像到处都显示同样的错误

    当我将服务器 tomcat 7 更改为 6 时 它正在工作但不显示输出 有没有人知道提前谢谢你

【问题讨论】:

  • 请清理您的代码...无法读取

标签: java rest tomcat jersey jersey-2.0


【解决方案1】:

This 表示,@ApplicationPath("rest") 只能应用于 Application 的子类。

您能否分享更多关于您正在尝试做什么以及完整的堆栈跟踪是什么的信息。你在使用 web.xml 吗?

【讨论】:

    【解决方案2】:

    正如@MSD 所述,您对@ApplicationPath 的使用不正确。请参阅 Application Deployment 上的 Jersey 文档,了解所有不同的部署选项,以及它们在不同环境中的工作方式。

    基本上,最简单的方法是将@ApplicationPath 放在一个空的Application 类上

    @ApplicationPath("/rest")
    public class MyApplication extends Application {}
    

    这将扫描@Provider@Path 注释类的整个类路径,以向应用程序注册。虽然这看起来更容易,但在使用 Jersey 时,更常见的方法是使用它的 ResourceConfig 类,它是 Application 的子类。可以注册包,会扫描包和子包

    @ApplicationPath("/rest")
    public class MyApplication extends ResourceConfig {
        public MyApplication() {
            packages("com.my.packages");
        }
    }
    

    一个好处是有时会有第三方依赖被注释,但你不想注册。要注册个别课程,只需在ResourceConfig 中使用register(...class)

    现在 Tomcat 7 而不是 6 出现错误的原因很可能是因为 Tomcat 6 (servlet 2.5) 没有使用 ServletContainerInitializer 的 sevlet 可插拔机制。此初始化程序的 Jersey 实现加载应用程序,在 Application 子类上查找 @ApplicationPath。如果您不在 3.0 环境中,此功能将无法使用。

    注意 Jersey 初始化程序包含在 jersey-container-servlet jar 中。你可以阅读更多关于它here

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多