私が使用したロジックは次のとおりです。
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;
リトライ回数は本来の動作も考慮しています。しかし、問題は
- 何も割り当てずに try ブロックから直接戻った場合、SCA (Fortify for me) は変数の再試行が (成功フローで) 読み取られないことを報告し、
- 上記のように割り当てて実行すると、SCA は再試行変数への値の即時の再割り当てについて、それを読み取ることさえせずに叫びます。
考慮事項:
- 最初の呼び出しは、「再試行」のために読み取った値とは無関係である必要があります
- コードの重複は避けるべきであり、再帰を避けるのも良いでしょう。
単純なことかもしれませんが、おそらく私はそれを理解していません。提案してください。