Java Jetty 9,异步响应不工作

Java Jetty 9,异步响应不工作,java,cxf,servlet-3.0,maven-jetty-plugin,jetty-9,Java,Cxf,Servlet 3.0,Maven Jetty Plugin,Jetty 9,我有一个spring应用程序,它公开了在CXF中实现的RESTAPI。我正在尝试实现长轮询,我使用了它。如果我在tomcat(maven插件或单机版)中运行这段代码,它就会工作。但是如果我在jetty中使用maven插件(mvnJetty:run)运行相同的代码,它就会失败。CXF抛出NPE。我已经调试了它,发现ContinuationProvider没有为请求设置。因此,在进一步调试中,我发现jetty在内部将请求对象中的AsyncSupport布尔变量设置为false,然后再应用过滤器,最后

我有一个spring应用程序,它公开了在CXF中实现的RESTAPI。我正在尝试实现长轮询,我使用了它。如果我在tomcat(maven插件或单机版)中运行这段代码,它就会工作。但是如果我在jetty中使用maven插件(mvnJetty:run)运行相同的代码,它就会失败。CXF抛出NPE。我已经调试了它,发现ContinuationProvider没有为请求设置。因此,在进一步调试中,我发现jetty在内部将请求对象中的AsyncSupport布尔变量设置为false,然后再应用过滤器,最后在块中将其设置为true。但是过滤器链也包含servlet,因此导致servlet使用AsyncSupport false解释请求

jetty maven插件版本9.1.3VXXXXX jetty代码库中的ServletHandler.java

 @Override
    public void doFilter(ServletRequest request, ServletResponse response)
        throws IOException, ServletException
    {
        final Request baseRequest=(request instanceof Request)?((Request)request):HttpChannel.getCurrentHttpChannel().getRequest();

        // pass to next filter
        if (_filterHolder!=null)
        {
            if (LOG.isDebugEnabled())
                LOG.debug("call filter " + _filterHolder);
            Filter filter= _filterHolder.getFilter();
            if (_filterHolder.isAsyncSupported())
                filter.doFilter(request, response, _next);
            else
            {
                final boolean suspendable=baseRequest.isAsyncSupported();
                if (suspendable)
                {
                    try
                    {
                        baseRequest.setAsyncSupported(false);
                        filter.doFilter(request, response, _next);
                    }
                    finally
                    {
                        baseRequest.setAsyncSupported(true);
                    }
                }
                else
                    filter.doFilter(request, response, _next);
            }
            return;
        }
为什么过滤器链包含servlet? 为什么在doFilter之前开始修改rewest?
如何让它在jetty maven插件中工作

找到了问题。Log4jServletContainerInitializer会自动为所有请求注册一个过滤器(Log4jServletFilter)。这里的问题是我使用的版本。Log4j2.0-beta-9(有问题),问题是当注册Log4jServletFilter时,它没有向AsyncSupport注册(即async supported true)。因此,我升级到log4j2.0-rc1,解决了这个问题。:)