从mule获取异常消息

时间:2016-01-18 16:10:19

标签: mule mule-el

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

消息:groovy.lang.MissingPropertyException:没有这样的属性:z for class: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 Transformer: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:没有这样的属性: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:没有这样的属性: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 for class:Script1(javax.script.ScriptException)。消息有效内容的类型为:NullPayload(org.mule.api.transformer.TransformerMessagingException)。消息有效内容的类型为:NullPayload

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

2 个答案:

答案 0 :(得分: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

我希望如果您需要进一步帮助,请随时通过我的个人资料在我的推特账号中找到我。

答案 1 :(得分:0)

你可以尝试#[exception.cause.message]