Java 可丢弃消息显示错误文本

Java 可丢弃消息显示错误文本,java,exception,Java,Exception,我正在研究一些遗留代码,它有一个非常丑陋和肮脏的黑客来处理我们从第三方服务得到的一些异常,但至少我们有一个测试。出于某种原因,黑客没有在我正在工作的分支机构工作 我们在模仿该服务,并抛出有时从该服务获得的异常: throw new EJBTransactionRolledbackException("SystemException: Entity not found: 'Item with id " + someId + "'. resultTextDetails: [] constraintV

我正在研究一些遗留代码,它有一个非常丑陋和肮脏的黑客来处理我们从第三方服务得到的一些异常,但至少我们有一个测试。出于某种原因,黑客没有在我正在工作的分支机构工作

我们在模仿该服务,并抛出有时从该服务获得的异常:

throw new EJBTransactionRolledbackException("SystemException: Entity not found: 'Item with id " + someId + "'. resultTextDetails: [] constraintViolations: []");
我们的黑客只是检查异常消息,然后做一些事情。真的很难看,但它奏效了:

public void exceptionHandling(final Throwable t){
    if (t.getMessage().contains(PART_OF_EXCEPTION_TEXT)){
        // some logic here
    }
}
出于某些原因,t.getMessage()不显示我们正在抛出的消息,而是显示stacktrace中“由”部分的消息:

原因: com…ServiceProxiesNotWorkingException: 重新登录服务代理失败

我的问题是:

  • 为什么t.getMessage()显示“引起原因”部分而不是异常本身的文本
  • 是否有办法始终获取异常本身的文本

感谢您的回答。

由引发异常的显示引起。@almasshaikh-但引发异常的代码没有更改。六羟甲基三聚氰胺六甲醚。。。也许我们称之为密码的地方变了。这可能是一个想法。信息取决于实现。如果您没有链接异常,您可能希望确保捕获的异常与抛出的异常完全相同,代码路径可能与您想象的不同。
Throwable t;while(true){t=e.getCause();if(t==null){break;}System.out.println(t.getMessage());}
在catch块中尝试此操作。您能否创建从EJB异常扩展的自定义异常类,并改为捕获它们?或者像您一样使用catch(Throwable),但使用instanceof来查找正确的异常?