2017-02-24 23 views
3

在Liberty上使用JAX-RS 2.0,我想爲各種javax.ws.rs.WebApplicationException子類實現一些自定義異常處理,例如javax.ws.rs.NotAllowedException用於405 Method Not Allowed用例。Liberty中的NotAllowedException的ExceptionMapper

我創建了一個ExceptionMapper實現:

import javax.ws.rs.NotAllowedException; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.ext.ExceptionMapper; 
import javax.ws.rs.ext.Provider; 

@Provider 
public class NotAllowedMapper implements ExceptionMapper<NotAllowedException> { 

    @Override 
    public Response toResponse(NotAllowedException e) { 
     return Response.status(Response.Status.METHOD_NOT_ALLOWED).entity("Method Not Allowed") 
       .build(); 
    } 

} 

並把它添加到我的javax.ws.rs.core.Application子類:

import java.util.HashSet; 
import java.util.Set; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("/v1.0") 
public class JaxRsApplication extends Application { 

    /* Other classes and singletons redacted */ 
    @Override 
    public Set<Object> getSingletons() { 
     Set<Object> singletons = new HashSet<Object>(); 

     /* ExceptionMappers for custom exception handling */ 
     singletons.add(new NotAllowedMapper()); 

     return singletons; 
    } 
} 

然而,發出GET請求,只支持員額端點時,我取回默認的405響應,沒有我的自定義實體有效載荷。

在生成的警告消息:

[警告] javax.ws.rs.ClientErrorException:HTTP 405不允許的方法...

我看到一個javax.ws.rs.ClientErrorException被拋出,而不是javax.ws.rs.NotAllowedException

創建ExceptionMapper實施ClientErrorException給我控制指定像我想要一個自定義的響應,但我寧願沒有做某種如果結構或開關結構上的狀態代碼來處理通用ClientErrorException小號正確。

是否有原因導致ClientErrorException被拋出,而不是NotAllowedException?或者更好的是,是否需要某種配置來獲得NotAllowedException以及其他更具體的異常(如果適用)?

+0

我覺得你的供應商忽略了@Produces(MIMETYPE)註釋。 – Ben

+0

@Ben我嘗試添加正確的Produces註釋而沒有任何運氣。我還沒有看到使用Produces註釋的ExceptionMapper Provider的任何例子,但它值得一試。 – austinbruch

回答

2

簡短的回答是否定的,目前沒有辦法配置Liberty來引發更具體的NotAllowedException。

Liberty使用Apache CXF作爲基礎的JAX-RS實現,並且我通過源代碼進行了快速掃描,並且唯一對NotAllowedException的引用位於JAX-RS客戶端代碼中,它不會幫助您服務器。研究服務器端代碼,看起來應該不難修改CXF來引發NotAllowedException而不是ClientErrorException。 Liberty組織定期從CXF社區獲取更新,因此如果您在CXF中打開JIRA請求,我們可能會進行更改並將其引入即將推出的Liberty修訂包。

你可以在這裏開一個CXF JIRA: https://issues.apache.org/jira/browse/CXF/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel

希望這有助於安迪

+0

謝謝安迪。我會接受這個答案,如果我打開一個鏈接,我會添加一個鏈接到JIRA請求的註釋,正如您所建議的那樣。 – austinbruch

相關問題