1

RESTEASY を使用して、例外が発生したときに応答ステータス コードを設定する Web サービスに取り組んでいます。最初に、ローカルで正常に動作する resteasy 例外マッパーを試しました。以下にマッパーコードを添付します。ただし、その WS を Elastic Beanstalk にアップロードすると、常に 500 (内部サーバー エラー) が返されます。

@Provider
public class LoadGridTileFailedExceptionMapper extends BaseExceptionMapper implements ExceptionMapper<LoadGridTileFailedException>
{
@Override
public Response toResponse(LoadGridTileFailedException e)
{
    log(e.getMessage(), e);
    return printMsg(e.getMessage(), DtmWebServiceReturnStatus.LOAD_GRID_TILE_FAILED_EXCEPTION_CODE);
}
}

次に、例外マッピングを回避するために、例外 WebApplicationException(ex, DtmWebServiceReturnStatus.LOAD_GRID_TILE_FAILED_EXCEPTION_CODE) をスローしてみます。その結果、ステータス コード 500 でラップされた応答ステータス 498(LOAD_GRID_TILE_FAILED_EXCEPTION_CODE) が返されました。

Apache Tomcat/7.0.27 - エラー レポート

HTTP ステータス 498 -

タイプステータス レポート

メッセージ

説明http.498

アパッチ トムキャット/7.0.27

Elastic Beanstalk は、サーバー側でスローされたすべての例外をステータス コード 500 でラップしているようです。問題は、その機能を回避し、設定したステータス コードを応答として返すにはどうすればよいかということです。ありがとうございました。


アップデート

今朝もっとリクエストを試してみて、興味深いものを見つけてください。

Elastic Beanstalk ログ スナップショットで正しいリターン ステータスを取得する

/var/log/tomcat7/localhost_access_log.txt

127.0.0.1 - - [09/Jan/2013:15:06:28 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06: 31 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06:34 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06:37 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15: 06:39 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06:41 +0000] "GET /published/tile/003331330031 HTTP/ 1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06:44 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013: 15:06:48 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [2013 年 1 月 9 日:15:06:51 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06:54 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 127.0.0.1 - - [09/Jan/2013:15:06:57 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22


/var/log/httpd/elasticbeanstalk-access_log

10.28.215.233 (65.167.11.254, 10.28.215.233) - - [09/Jan/2013:15:06:28 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28 .215.233 (65.167.11.254, 10.28.215.233) - - [09/Jan/2013:15:06:31 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28. 215.233 (65.167.11.254, 10.28.215.233) - - [09/Jan/2013:15:06:34 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167.11.254, 10.28.215.233) - - [09/Jan/2013:15:06:37 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 ( 65.167.11.254、10.28.215.233) - - [09/Jan/2013:15:06:39 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167 .11.254、10.28.215.233) - - [09/Jan/2013:15:06:41 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167.11.254 、10.28.215.233) - - [09/Jan/2013:15:06:44 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167.11.254, 10.28.215.233) - - [09/Jan/2013:15:06:48 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167.11.254, 10.28 .215.233) - - [09/Jan/2013:15:06:51 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167.11.254, 10.28. 215.233) - - [09/Jan/2013:15:06:54 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-" 10.28.215.233 (65.167.11.254, 10.28.215 .233) - - [09/Jan/2013:15:06:57 +0000] "GET /published/tile/003331330031 HTTP/1.1" 498 22 "-" "-"

ただし、クライアント側では、まだ500を取得しています:-(

printMsg メソッド:

protected Response printMsg(String msg, int intStatus)
{
    // Need this due to the Resteasy bug
    ServiceDataCollector.processRequest(true);

    ResponseBuilder builder = Response.status(intStatus);
    builder.type("text/plain");
    builder.entity("ERROR: " + msg);
    Response rep = builder.build();
    LOG.error(rep.getStatus() + ":" + rep.toString());
    return rep;
}
4

1 に答える 1

-1

誰かが私が問題を解決するのを手伝ってくれます。80のtomcatサーバーの前にAMIにhttpdをデプロイしました。したがって、ロードバランサーはhttpdサーバーと対話し、ステータスコードをtomcatから500に変更します。httpdサーバーを無効にすると問題が解決します。みんなの助けのためのThx。

于 2013-01-12T21:28:30.253 に答える