我正在从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实现这一点?
答案 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]