【问题标题】:Java Exception: get detailMessage onlyJava 异常:仅获取 detailMessage
【发布时间】:2015-11-20 11:31:58
【问题描述】:

我试图从异常中仅获取 detailMessage

} catch (Exception e) {
    logger.error(failed  + e.getCause().getMessage()); }

日志文件包含

“无法找到名称 == 过滤器的元素:P_ClearButtonDFI(警告: 服务器没有提供任何堆栈跟踪信息)命令 持续时间或超时:30.24 秒有关此错误的文档, 请访问:http://seleniumhq.org/exceptions/no_such_element.html 构建信息:版本:'2.47.1',修订:'411b314',时间:'2015-07-30 03:03:16' 系统信息:主机:'OACVWMAX10006',ip:'10.29.19.64', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_79' *** 元素信息:{Using=name, value=filter:P_ClearButtonDFI} 会话 ID:5149a0b8-475e-4d89-a9d6-e5115e773da8 驱动程序信息: org.openqa.selenium.ie.InternetExplorerDriver 功能 [{平台=WINDOWS, javascriptEnabled=true, elementScrollBehavior=0, 忽略ZoomSetting=false,enablePersistentHover=true, ie.ensureCleanSession=false, browserName=internet explorer, enableElementCacheCleanup=true,unexpectedAlertBehaviour=dismiss, 版本=9,即usePerProcessProxy=false, ignoreProtectedModeSettings=false,cssSelectorsEnabled=true, requireWindowFocus=false, initialBrowserUrl=http://localhost:21733/, handleAlerts=true,即forceCreateProcessApi=false,nativeEvents=true, browserAttachTimeout=0, 即.browserCommandLineSwitches=, takeScreenshot=true}]"

但我只想

无法找到名称 == filter:P_ClearButtonDFI 的元素

【问题讨论】:

    标签: java


    【解决方案1】:

    我认为没有任何优雅的方式可以访问它。

    当然,您可以使用 Java 反射来访问私有字段 Throwable.detailMessage,但这远非优雅 :)

    我在 Spring 工作,那里的异常经常继承 org.springframework.core.NestedRuntimeException,这会创建类似的消息

    detailedMessage + "; nested exception is " + cause.detailedMessage 
        ... + "; nested exception is " + cause.detailedMessage 
    

    我创建了一个简单的方法

    private String extractDetailedMessage(Throwable e) {
        final String message = e.getMessage();
        if (message == null) {
            return "";
        }
        final int tailIndex = StringUtils.indexOf(message, "; nested exception is");
        if (tailIndex == -1) {
            return message;
        }
        return StringUtils.left(message, tailIndex);
    }
    

    您可以根据自己的情况轻松修改它 :) 恐怕您没有更好的...

    【讨论】:

      【解决方案2】:

      这是一个不错的 Kotlin 小扩展函数,用于 Honza Zidek 共享的相同代码

      fun NestedRuntimeException.detailMessage(): String 
          = this.message.orEmpty().substringBefore("; nested exception is")
      

      【讨论】:

        【解决方案3】:

        您也可以使用Apache commons

        String detailMessage = StringUtils.substringBefore(e.getMessage(), "; nested exception is");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-22
          • 1970-01-01
          • 1970-01-01
          • 2020-05-14
          • 2015-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多