gpt4 book ai didi

java - 为什么异常错误字符串在不同环境下会有所不同?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:34:54 25 4
gpt4 key购买 nike

我有这段代码来处理捕获特定异常

private static final String CONNECTION_REFUSED_EXCEPTION = "java.net.ConnectException: Connection refused: connect";
...
} catch (org.apache.axis.AxisFault af) {

if (af.getFaultString().equals(CONNECTION_REFUSED_EXCEPTION))
{
// Do something
}
}

这在我的 Windows 开发环境中本地运行良好

但是,当我部署到unix机器上进行测试时,错误字符串不同,如下所示(注意最后缺少:connect)

  • Windows 故障字符串:java.net.ConnectException:连接拒绝:连接
  • Unix 故障字符串:java.net.ConnectException:连接拒绝

为什么会这样?

郑重声明,我相信以下内容更适合匹配故障字符串:

...
if(af.getCause() instanceof java.net.ConnectException)
...

最佳答案

“故障字符串”消息旨在提供用于调试目的的附加信息。它们在不同的实现、版本或环境中可能有所不同。这同样适用于所有异常消息字符串 (Throwable.getMessage())。

应用程序代码不应依赖异常消息的确切文本来识别异常的原因。您建议使用 instanceof 来检查异常原因是一个更好的解决方案。

编辑:

如果您绝对需要检查详细消息,就像您的情况一样(因为 getCause() 返回 null),那么我建议检查详细消息是否包含您正在检查的特定包装异常的名称(例如 java.net.ConnectException)。如果 getCause() 一开始没有返回 null,那么这毕竟是您将获得的相同信息,并且应该最小化与详细信息的确切文本的依赖性消息。

关于java - 为什么异常错误字符串在不同环境下会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4105269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com