加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么异常错误字符串在不同的环境中有所不同?

发布时间:2020-12-15 08:36:15 所属栏目:Java 来源:网络整理
导读:我有这段代码来处理捕获特定异常 private static final String CONNECTION_REFUSED_EXCEPTION = "java.net.ConnectException: Connection refused: connect";...} catch (org.apache.axis.AxisFault af) { if (af.getFaultString().equals(CONNECTION_REFUSE
我有这段代码来处理捕获特定异常

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机器进行测试时,故障字符串会有所不同,如下所示(注意:连接缺失从末端开始)

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

为什么会这样?

为了记录,我相信以下更适合匹配故障字符串:

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

解决方法

“故障字符串”消息旨在为调试目的提供其他信息.它们可以在不同的实现,版本或环境中变化.这同样适用于所有Exception消息字符串(Throwable.getMessage()).

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

编辑:

如果您绝对需要检查详细消息,因为它似乎发生在您的情况下(因为getCause()返回null),那么我建议检查详细消息是否包含您要检查的特定包装异常的名称(例如java.net.ConnectException).如果getCause()首先没有返回null,那么这将是您获得的相同信息,并且应该使用详细消息的确切文本最小化依赖性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读