2010-06-30 81 views
3

在我JAXRS的應用程序,我有2個ExceptionMapper註冊爲@ProviderExceptionMapper問題的RESTEasy

public class MyExceptionMapper implements ExceptionMapper<Exception> {...} 

public class MyCustomRuntimeExceptionMapper implements ExceptionMapper<MyCustomRuntimeException> {...} 

當我的應用程序將引發新MyCustomRuntimeException,唯一的例外是MyExceptionMapper內抓到,即使(JAXRS規範說)它應該被捕獲在MyCustomRuntimeExceptionMapper中。

這裏的JAXRS說什麼 -

JAXRS支持異常的繼承也是如此。當拋出異常爲 時,JAX-RS將首先嚐試查找異常類型的ExceptionMapper。如果找不到,它會尋找一個映射器 ,它可以處理異常的超類。它將繼續這個 進程,直到沒有更多的超類匹配爲止。

有沒有人有一個線索,什麼回事?

+0

你實現toResponse(MyCustomRuntimeException),而不是toResponse(例外)? – DJClayworth 2014-07-16 23:47:37

回答

0

我有這個問題了。看起來好像它在查找子類之前發現異常的超類。這使我無法擁有ExceptionMapper for Exception。有一個特定於應用程序的異常我必須處理,它有子類;我不能爲它們分開異常映射器。我有一個超類映射器,然後是一堆「if(e instanceof SubClassA)」語句。

+0

是的,我最終做了同樣的:) thx多 – kapso 2010-07-15 04:58:02

1

我能得到它的權利,宣稱提供如下,在我的web.xml:

<context-param> 
     <param-name>resteasy.providers</param-name> 
     <param-value>CustomExceptionHandler,DefaultExceptionHandler</param-value> 
</context-param>