0

私が使用したロジックは次のとおりです。

int retries = config.get("retries");
Response resp = null
do {
    try {
        resp = operation.execute();
        retries = 0;
    } catch (Exception ex) { //Note. Please excuse this catch pattern. Its not a problem now.
        if isAParticularException(ex) { //call a method to check the wrapped exception and other details
            retries--;
            LOGGER.info("Integrity exception, can be retried");
            if (retries == 0) {
                LOGGER.info("Retry exhausted");
                throw ex;
            }
            LOGGER.info("Retrying operation, retry count " + ledgerRetry);
        } else {
            throw ex;
        }
    }
} while (retries > 0);
return resp;

リトライ回数は本来の動作も考慮しています。しかし、問題

  1. 何も割り当てずに try ブロックから直接戻った場合、SCA (Fortify for me) は変数の再試行が (成功フローで) 読み取られないことを報告し、
  2. 上記のように割り当てて実行すると、SCA は再試行変数への値の即時の再割り当てについて、それを読み取ることさえせずに叫びます。

考慮事項:

  1. 最初の呼び出しは、「再試行」のために読み取った値とは無関係である必要があります
  2. コードの重複は避けるべきであり、再帰を避けるのも良いでしょう。

単純なことかもしれませんが、おそらく私はそれを理解していません。提案してください。

4

1 に答える 1