【问题标题】:Get Exception message from mule从 mule 获取异常消息
【发布时间】:2016-01-18 16:10:19
【问题描述】:

我正在从 Mule 3.4 升级到 3.7。我有通过电子邮件提醒管理员来处理异常的应用程序。在 3.4 中,我曾经使用 mule 表达式 #[exception.getSummaryMessage()] 来打印和通过电子邮件发送信息。它曾经向我提供完整的异常消息,异常堆栈如下:


消息:groovy.lang.MissingPropertyException:没有这样的属性:z 对于类:Script1 (javax.script.ScriptException) 类型:org.mule.api.transformer.TransformerException 代码:MULE_ERROR--2 JavaDoc:http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html 转换器:ScriptTransformer{this=11810917, name='ScriptTransformer', ignoreBadInput=false, returnClass=SimpleDataType{type=java.lang.Object, mimeType='/', encoding='null'}, sourceTypes=[]}


异常堆栈是: 1.没有这样的属性:z for class:Script1 (groovy.lang.MissingPropertyException) org.codehaus.groovy.runtime.ScriptBytecodeAdapter:53 (null) 2. groovy.lang.MissingPropertyException: No such property: z for class: Script1 (javax.script.ScriptException) org.codehaus.groovy.jsr223.GroovyScriptEngineImpl:326 (http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/script/ScriptException.html) 3. groovy.lang.MissingPropertyException: No such property: z for class: Script1 (javax.script.ScriptException) (org.mule.api.transformer.TransformerException) org.mule.module.scripting.transformer.ScriptTransformer:56 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html)


在 3.7 中,相同的表达式只给我以下异常消息: groovy.lang.MissingPropertyException:没有这样的属性:z 对于类:Script1 (javax.script.ScriptException)。消息负载的类型为:NullPayload (org.mule.api.transformer.TransformerMessagingException)。消息负载的类型:NullPayload

有人可以指导我如何以以前的格式检索异常,或者如何使用 Mule 3.7 实现这一点吗?

【问题讨论】:

    标签: mule mule-el


    【解决方案1】:

    我不得不做类似的事情,所以我写了一段 Groovy 代码来从异常对象中提取错误消息:

    def log = LogFactory.getLog(logCategory)
    def cleanRootErrorMessage = null
    
    // no matter what, we don't want Exceptions getting out of here!
    try {
            log.debug("Extracting exception root cause...")
            def tmpException = exception
    
            while (tmpException.cause != null && (tmpException.cause instanceof NullPointerException) == false) {
                    tmpException = tmpException.cause
            }
    
            cleanRootErrorMessage = tmpException.message
            log.debug("Root cause: [$cleanRootErrorMessage]")
    
            if (cleanRootErrorMessage ==~/^.*(Exception: |Error: )(.*)$/) {
                    cleanRootErrorMessage = (cleanRootErrorMessage =~/^.*(Exception: |Error: )(.*)$/).replaceAll('$2')
            }
    
            if(cleanRootErrorMessage == null) {
                    log.debug("Capturing exception.message...")
                    cleanRootErrorMessage = exception.message
            }
    
            log.debug("Filtered root cause: [$cleanRootErrorMessage]")
    } catch (Exception e) {
            log.error("Exception thrown ***inside*** the Root Error Message extraction code...", e)
            cleanRootErrorMessage = 'Unknown Error'
    }
    
    return cleanRootErrorMessage
    

    希望对您有所帮助,如果您需要进一步的帮助,请随时通过我的个人资料在我的 Twitter 帐户上找到我。

    【讨论】:

      【解决方案2】:

      你能试试#[exception.cause.message]

      【讨论】:

      • 我试过这个.. 给了我同样的回应。你能指导我使用骡子用来打印异常的程序吗?也许我可以模仿。
      猜你喜欢
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 2018-11-03
      • 1970-01-01
      • 2011-05-26
      • 2019-10-07
      • 2019-03-12
      相关资源
      最近更新 更多