2011-11-03 1 views
13

JAX-RSのWebサービスですでに動作しています。今私はカスタムメッセージで40Xエラーをユーザーに送信するためにいくつかの例外をキャッチする方法を探しています。JAX-RS例外のカスタムメッセージで40Xエラーを設定するにはどうすればよいですか?

私はWebサービスとExceptionMapperを持っています。

これは私のWebサービスです:これは私のExceptionMapper

@Provider 
@Produces(MediaType.TEXT_XML) 
public class IllegalArgumentExceptionMapper 
    implements ExceptionMapper<IllegalArgumentException> { 

    @Override 
    public Response toResponse(IllegalArgumentException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 

@Path(value = "/test/") 
public interface ServiceTest { 

    @Path(value = "{rrf}") 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public ObjectDTO getDealer(@PathParam("rrf") String rrf){ 
     ObjectDTO objectDTO = new ObjectDTO(); 
     if(verifyRRFSintax(rrf)) { 
      //Get the objet, this part works fine 
     } else { 
      throw new IllegalArgumentException("Custom message"); 
     } 
     return dwsDTO; 
    } 

    private boolean verifyRRFSintax(String rrf) { 
     return rrf.matches("[0-9]{8}"); 
    } 
} 

であり、これは、それがアプリケーション-context.xmlファイルに登録されます方法です

<bean id="serviceTest" class="ServiceTest"/> 

<jaxrs:server id="Server" address="/ws"> 
    <jaxrs:serviceBeans> 
     <ref bean="serviceTest"/> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean id="rffErrorException" class="IllegalArgumentExceptionMapper"/> 
    </jaxrs:providers> 
</jaxrs:server> 

とき私はデバッグ、IllegalArgumentExceptionMapperは私がスロー例外をキャッチが、私は黄色のメッセージが表示されませんブラウザに表示されるWebページ。私はいつも持っています

Erreur d'analyse XML : aucun élément trouvé/XML Parsing Error: no element found (in english)

ブラウザでこのカスタムメッセージを表示する方法は? なぜ、応答ステータス(NOT_FOUND、BAD_REQUEST、FORBIDDEN)の種類を変更しても、この黄色のページは常に同じですか?

PD:コンソール上で、Mapperが例外をキャッチしたときに出力されるメッセージ「out.handlemessage」があります。

ありがとうございました。

+0

[OK]をみんな、おかげで、私は最終的に私は必要なものが見つかりました: パブリッククラスDwsWebServiceExceptionがWebApplicationException { 公共DwsWebServiceException(文字列メッセージ、int型の状態){ スーパー(レスポンスを拡張:私はのようなカスタム例外を追加します。 status(status).entity(message).type(MediaType.TEXT_XML).build()); } } とメッセージが表示されています。 – jomaora

答えて

13
throw new WebApplicationException(Response.status(Status.NOT_FOUND)// Or another Status 
       .entity("Error Message").build()); 
+2

他のJAX-RS実装についてはわかりませんが、RestEasy 3.0xではこれが動作しません。それは黙って失敗し、クライアントは応答を受信しません。あなたの 'Response'ビルダーのメソッドチェーンに' .type(MediaType.TEXT_PLAIN) 'を追加する必要があります。そうでなければ、文字列の"エンティティ "をチョークするようです。 – Lambart

+0

ありがとう、@ラムバート、私はあなたのコメントにこの感謝を見つけた:https://stackoverflow.com/questions/23628897/dropwizard-exception-handling-giving-custom-error-json-error-messages-to-clie –

+0

@FerranMaylinch助けになることをうれしく思います。私は以前、その質問と回答、自分自身をupvotedしていることがわかります。 :) – Lambart

関連する問題