2015-02-12 30 views
0

我已成功地将SimplePageCachingFilter与DropWizard集成。EHCache和DropWizard:无回应

但是,有一件事是站在我的前面。每当在我的应用程序中引发异常,而不是路由到我的ExceptionMapper,我的API浏览器中就会得到“Response contains no data”。我也碰巧在日志中看到了这个传球。 WARN [2015-02-12 04:06:21,768] net.sf.ehcache.constructs.web.GenericResponseWrapper: Discarding message because this method is deprecated.

传统上,我的ExceptionMapper返回适当的Json响应。

有没有其他人见过类似的东西?

回答

1

调试器附加到DropWizard(每@ CAB的意见)后,我发现,除非状态代码为200

我伸出CachingFilter和推翻的doFilter方法而忽视了状态CachingFilter不会写出响应检查。这似乎解决了我的问题。

@Override 
protected void doFilter(final HttpServletRequest request, 
         final HttpServletResponse response, final FilterChain chain) throws Exception { 
    if (response.isCommitted()) { 
     throw new AlreadyCommittedException("Response already committed before doing buildPage."); 
    } 
    logRequestHeaders(request); 
    PageInfo pageInfo = buildPageInfo(request, response, chain); 

    writeResponse(request, response, pageInfo); 
} 
1

我会在第1472行放入一个断点http://grepcode.com/file/repo1.maven.org/maven2/com.sun.jersey/jersey-server/1.18.1/com/sun/jersey/server/impl/application/WebApplicationImpl.java#WebApplicationImpl然后触发你的错误。

这是抛出一个异常,异常到异常映射器的映射发生在栈中更深的一点。可能在ContainerResponse.mapException

希望这会给你足够的洞察,为什么它不被称为。

仅供参考。我通过在正被解雇的异常映射器中放置断点并查看调用堆栈来获得该代码。

+0

非常感谢,我会检查出来的! – 2015-02-20 05:54:12

+1

感谢您的帮助,在进一步调试之后,我发现在默认的CachingFilter中检查了一个阻止响应被写出的检查。享受赏金! :) – 2015-02-23 09:48:44