当使用Google Guice ServletModule将Servlet加载到代码中时,如何在Jetty 9.3中使_asyncSupported = true

时间:2019-07-18 08:54:50

标签: java jetty guice jetty-9

我正在尝试将码头从8升级到9.3。由于_asyncSupported的默认值变为false,因此将显示以下错误。

  

java.lang.IllegalStateException:!asyncSupported:stackDumperFilter     在org.eclipse.jetty.server.Request.startAsync(Request.java:2248)处   org.eclipse.jetty.continuation.Servlet3Continuation.suspend(Servlet3Continuation.java:188)     在   org.eclipse.jetty.servlets.ProxyServlet.service(ProxyServlet.java:659)

通过以下方式通过Google guice的ServletModule将servlet加载到代码中。

public class ProxyModule extends ServletModule {
    @Override
    protected void configureServlets() {
        serve("/someurl/*").with(ProxyServlet.class);
    }
}

@Singleton
public static class ProxyServlet extends SuperHttpProxyServlet {

    @Inject
    public ProxyServlet(@Named("something.proxy") Transparent proxy) {
            super(proxy);
        }
}

Jetty 9升级后,它将采用_asyncSupported的默认值,该默认值将变为false。因此,由于以下原因,Jetty库文件(Package:org.eclipse.jetty.server)中将给出异常。

public AsyncContext startAsync() throws IllegalStateException
    {
        if (!_asyncSupported)
            throw new IllegalStateException("!asyncSupported");
        _async.startAsync();
        return _async;
    }

那么当Google Guice的ServletModule调用ProxyServlet时,如何使它成为asyncSupported(true)? 我已经尝试过使用注释,但是无法正常工作。

@WebServlet(urlPatterns={"/someurl/*"}, asyncSupported=true, loadOnStartup = 1)
@Singleton
public static class ProxyServlet extends SuperHttpProxyServlet {

    @Inject
    public ProxyServlet(@Named("something.proxy") Transparent proxy) {
                super(proxy);
            }
    }

但是由于相同的错误而失败了。

1 个答案:

答案 0 :(得分:0)

  

java.lang.IllegalStateException:!asyncSupported:org.eclipse.jetty.server.Request.startAsync(Request.java:2248)处的stackDumperFilter

将您的stackDumpFilter设置为asyncSupported = true

经验法则是,如果您的过滤器链(所有过滤器+ servlet)中的任何内容都使用了异步,那么所有这些过滤器和servlet必须设置为asyncSupported = true。