2017-02-24 5 views
3

LibertyでJAX-RS 2.0を使用して、のようなさまざまなjavax.ws.rs.WebApplicationExceptionサブクラスのカスタム例外処理を実装したいと思います。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 Responseを返します。生成された警告メッセージで

[WARNING] javax.ws.rs.ClientErrorException:HTTP 405メソッドは許可されていません...

私は javax.ws.rs.ClientErrorExceptionがスローされていることがわかり

javax.ws.rs.NotAllowedExceptionの代わりにClientErrorExceptionためExceptionMapper実装を作成

は私が私がしたいようにカスタム応答を指定するために制御することができますが、私はむしろ、もし構造のいくつかの種類をしなければならないか、ジェネリックClientErrorException Sを処理するために、ステータスコードに構造を切り替えないと思います正しく

NotAllowedExceptionの代わりにClientErrorExceptionがスローされている理由はありますか?または、より良いことに、NotAllowedExceptionを取得するために必要な設定や、より具体的な例外がスローされます(該当する場合)?

+0

は、私はあなたのプロバイダが@Produces(MIMETYPE)注釈をミスだと思います。 – Ben

+0

@Ben私は運がない正しいProducesアノテーションを追加しようとしました。 Producesアノテーションを使用したExceptionMapper Providerの例は見ていませんが、それは価値がありました。 – austinbruch

答えて

2

短い答えはいいえ、より特定のNotAllowedExceptionをスローするようにLibertyを設定する方法はありません(現在)。

Libertyは、基盤となるJAX-RS実装としてApache CXFを使用しています。ソースコードを使って簡単にスキャンしましたが、NotAllowedExceptionへの唯一の参照はJAX-RSクライアントコードにあります。サーバ。サーバー側のコードを調べると、ClientErrorExceptionの代わりにNotAllowedExceptionをスローするようにCXFを変更することは困難ではないようです。 Libertyの組織は定期的にCXFコミュニティからの更新を取得していますので、CXFでJIRAリクエストを開くと、変更を加えて今後のLibertyフィックスパックに取り込むことができます。

あなたはここにCXF JIRAを開くことができます。このことができます https://issues.apache.org/jira/browse/CXF/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel

希望、アンディ

+0

ありがとうAndy。この回答を受け入れるつもりですが、あなたが示唆したようにJIRAリクエストを開くとコメントを追加します。 – austinbruch

関連する問題