【问题标题】:Guice 3.0 with Jersey and Async Servlets带有 Jersey 和 Async Servlet 的 Guice 3.0
【发布时间】:2014-09-30 20:44:40
【问题描述】:

尝试构建一个使用@SuspendedAsyncResponse 但无法使其工作的应用程序,我的应用程序在不使用AsyncResponse 的情况下工作正常。

下面是堆栈跟踪

Sep 30, 2014 4:40:07 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter guiceFilter
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
    at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
    at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
    at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
    at com.sun.jersey.guice.spi.container.servlet.GuiceContainer.initiate(GuiceContainer.java:121)
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:321)
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:376)
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:559)
    at javax.servlet.GenericServlet.init(GenericServlet.java:160)
    at com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:117)
    at com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:82)
    at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:102)
    at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 您能否找到解决此问题的方法?

标签: java servlets jersey guice


【解决方案1】:

我不太明白你的错误,但 AFAIK Guice 不支持异步 servlet:https://github.com/google/guice/issues/650

使用 Guice 跟随我的 Jersey 设置,以防万一。

我需要在 Guice 上安装的模块:

import javax.inject.Singleton;

import org.codehaus.jackson.jaxrs.JacksonJsonProvider;

import com.sun.jersey.guice.JerseyServletModule;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
import com.company.internal.app.ws.example.HelloWorld;

public class ApplicationRestModule extends JerseyServletModule {

    @Override
    protected void configureServlets() {
        super.configureServlets();
        serve("/rest/*").with(GuiceContainer.class);

        // Binding services
        bind(HelloWorld.class);

        bind(JacksonJsonProvider.class).in(Singleton.class);
    }
}

服务示例:

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

@Path("/hello")
public class HelloWorld {

    @GET
    @Path("/echo/{input}")
    @Produces("text/plain")
    public String ping(@PathParam("input") String input) {
        return input;
    }

    @POST
    @Produces("application/json")
    @Consumes("application/json")
    @Path("/jsonBean")
    public Response modifyJson(JsonBean input) {
        input.setVal2(input.getVal1());
        return Response.ok().entity(input).build();
    }
}

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2013-09-29
    • 2012-02-24
    • 2018-09-20
    • 1970-01-01
    • 2015-02-14
    • 2013-06-21
    • 1970-01-01
    • 2015-03-23
    • 2019-06-07
    相关资源
    最近更新 更多