2015-02-12 41 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