2011-07-18 83 views
0

當我的服務器收到不完整的xml時,由於java.lang.IllegalArgumentException的默認處理,它返回500 Internal Server Error。我可以覆蓋返回的HTML頁面,但我也需要覆蓋錯誤代碼,並使其符合我們的文檔規範400。有沒有辦法覆蓋JSF-2.0中的錯誤代碼?我們使用JAXB來處理xml將http 500錯誤重定向到400

回答

0

取決於它被拋出的位置,以及它是否被另一個異常包裹。根據迄今提供的信息很難給出完美的答案。

但是,要使用JSF2發送具有正確狀態的響應錯誤,請使用ExternalContext#responseSendError()。例如。

try { 
    // ... ??? 
} catch (IllegalArgumentException e) { 
    externalContext.responseSendError(400, e.getMessage()); 
    e.printStackTrace(); // Or use logger. 
} 

或等價於一個servlet filter,使用HttpServletResponse#sendError()

try { 
    // ... ??? 
} catch (IllegalArgumentException e) { 
    response.sendError(400, e.getMessage()); 
    e.printStackTrace(); // Or use logger. 
} 
+0

我只是通過我們的過濾器加強和異常心不是被扔其中一個,但是被我們的頂級JAXB類中的空構造函數拋出,該類用於基於傳入的xml實例化其他類。 – Ryland

+0

這裏的答案http://stackoverflow.com/questions/3293599/jax-rs-using-exception-mappers/3356277#3356277最終解決了它對我來說。我剛剛添加了一個ExceptionMapper,它捕獲了正確的類型並返回了400錯誤。 – Ryland

1

最後我用一個ExceptionMapper像這樣:

@Provider 
public class ClassCastExceptionMapper implements ExceptionMapper<java.lang.ClassCastException> { 

    @Override 
    public Response toResponse(java.lang.ClassCastException arg0) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 
+0

令人困惑。這是與JSF完全無關的JAX-RS API。到底什麼是你現在遇到的問題?處理由JSF Web前端反過來使用的JAX-RS webservice的異常? – BalusC