当前位置: 首页 > 知识库问答 >
问题:

嵌套的尝试/捕获内块和PMD规则

韩高峯
2023-03-14

我试图重构这段代码,导致PMD抛出失败:PreserveStackTrace:3,主要问题是如何将异常e1折叠为e2,现在是反模式吗?我正在考虑第二次尝试或最终投入,但这可能会导致业务逻辑出现问题。

代码:

        try {
            try {
                response = paypal.execute(params);
            } catch (final FailedConnectionAttempException e1) {
                log.warn("The first attempt is failed " + " Tryin again ", e1);

                try {
                    response = paypal.execute(params);
                } catch (final FailedConnectionAttempException e2) {
                    throw new PaymentException("The second attempt failed ", e2);
                }
            }
        } catch (final IntegrationException e) {
            throw new PaymentException("Unable to execute ", e);
        }
    }

共有1个答案

山乐生
2023-03-14

我假设您使用的是ApacheHttpClient,因为我识别execute方法。

您可以使用Httpask estRetryHandler来配置重试行为,而不是处理该捕获块。

HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
    @Override
    public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
        return executionCount < 5;
    }
};
HttpClient client = HttpClientBuilder.create()
        .setRetryHandler(retryHandler)
        .build();

此外,我还应该提到,HTTPclipse将重试一次失败的请求3次默认,我注意到在你的例外,它说第一次/第二次尝试,在现实中,它是前4次尝试和前7次尝试,所以你可以考虑有多少重试你真正需要的。

 类似资料:
  • 我想嵌套一个try catch,但内部try中没有捕获。 例如: 这可能吗?这是一种良好的做法吗?

  • 问题内容: 我只是在学习Java异常处理和Java。我制作了一个Swing GUI,用户将在两个字段中输入整数,然后单击带有算术函数的单选按钮,答案将出现在第三个文本字段中。我想包含一个try / catch块,以在用户将前两个字段之一留为空白或输入除整数以外的内容时捕获异常,以及如果用户尝试将其除以零则输入第二个catch。该窗体可以正常工作,但是不会捕获错误,只能返回堆栈跟踪并使程序崩溃。我感

  • 本文向大家介绍C#嵌套异常并尝试catch块。,包括了C#嵌套异常并尝试catch块。的使用技巧和注意事项,需要的朋友参考一下 示例 一个能够在另一个try catch内部嵌套一个异常/块。 这样一来,您可以管理小的代码块,这些代码块可以在不破坏整个机制的情况下正常工作。 注意:抛出父catch块时,避免吞咽异常

  • 我想运行几行代码,但我不确定是否有任何行会抛出错误。但是如果发生错误,我希望脚本忽略该行并继续。 一种选择是使用<code>try-catch-end TL;TR:除了为下面示例代码中的每一行编写<code>try-catch-end 示例代码: 输出: 首选输出: 相关:为什么我不应该在“try”-“catch”中包装每个块?

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。