0
jersey-test-framework-grizzly2でJersey 1.19をテストする必要があります。ジャージーテスト - ExceptionMapper - HTTPステータスが200ではないUniformInterfaceException
public class ConfiguredMyServiceTest extends JerseyTest {
@Override
protected int getPort(int defaultPort) {
return 8080;
}
public static class AppConfig extends DefaultResourceConfig {
public AppConfig() {
getSingletons().add(new ExceptionMapperProvider());
getSingletons().add(new MyService());
}
}
@Override
public WebAppDescriptor configure() {
return new WebAppDescriptor.Builder()
.initParam(WebComponent.RESOURCE_CONFIG_CLASS,
AppConfig.class.getName())
.build();
}
}
HTTPステータス200を返すRESTエンドポイントを実行/テストすると、正常に動作します。
例外がスローされた場合、例外マッパーはそれをうまく処理し、フォームがエラーコードでオブジェクトjavax.ws.rs.core.Responseを返す:
@Provider
@Singleton
public class ExceptionMapperProvider implements ExceptionMapper<Exception>{
@Override
public Response toResponse(final Exception exception){
return Response.status(HttpStatusCodes.STATUS_CODE_SERVER_ERROR).entity(new BasicResponse(InternalStatus.UNHANDLED_EXCEPTION, exception.getMessage())).type(MediaType.APPLICATION_JSON).build();
}
}
しかし、私は
com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/v1/my-service/ returned a response status of 401 Unauthorized
を取得私はJUnitテストでResponseを表明しようとしています。 UniformInterfaceExceptionの代わりにうまく形成された応答を得るにはどうすればいいですか?
あなたはありますか401は認証できないため、すべての認証ハンドラが必要ですか?あなたの定数STATUS_CODE_SERVER_ERRORが評価するものはわかりませんが。これは実際に401ですか? –
STATUS_CODE_SERVER_ERRORは500を意味します。私はSOのために簡略化して、一部の部品が削除されました。しかし、その401、500、または他のエラーコード、問題が同じかどうかは関係ありません。私がテストすると、ResponseではなくUniformInterfaceExceptionが返されます。 – Justas
リクエスト/レスポンスを見ることができるように、ロギングフィルタを有効にすることをお勧めします。あなたがそれを一度も使ったことがないなら、ここをチェックしてくださいリクエストがあなたの休憩サービスに当たっていますか?次に、クライアント側でロギングフィルタを有効にする例を示します。 http://stackoverflow.com/questions/2332515/how-to-get-jersey-logs-at-server LoggingFilterコンストラクタでブール値のprintentityをtrueに設定することもできます。これは、401が実際にサーバーから来ていることを確認し、クライアント構成の問題ではないことを確認します。 –