如何在MULE中将堆栈跟踪返回给客户端..?

时间:2011-11-23 05:03:39

标签: exception browser stack-trace mule

当在MULE中发生运行时异常时,是否有人知道如何在浏览器上打印 完整堆栈跟踪 .. ??

当发生运行时异常时,MULE会向客户端抛出500服务器错误,但不会向客户端显示任何详细信息。它在控制台或日志文件中打印整个堆栈跟踪(如下所示):

Root Exception stack trace:
java.sql.SQLException: Invalid column name
    at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3677)
    at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2749)
    at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' 
    for everything)

我可以在浏览器上显示相同的堆栈跟踪(到客户端).. ??

如果可能的话,还告诉我如何在浏览器上打开或关闭Stack Trace的打印.. ??

未来某个时候,我可能不希望在浏览器上显示堆栈跟踪

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。我假设您使用的是常规HTTP端点,这是一种REST类型的服务(?)如果是这样,您可以简单地在代码周围放置一个try / catch,导致异常并返回您想要的任何文本。

还有一些异常策略(http://www.mulesoft.org/documentation/display/MULE3USER/Error+Handling)用于执行更复杂的错误处理,但听起来您正在寻找上面的简单答案。 / p>

如果这不能解答您的问题,请提供有关您的mule配置和引发异常的服务的更多信息。

答案 1 :(得分:0)

Mule没有任何开箱即用的功能。您必须实现一个异常处理程序,它将格式化Message异常有效负载中的堆栈跟踪并将其返回给调用者。

在您的情况下,HTTP传输具有可在HttpMessageReceiver代码中找到的特殊性:

try
{
    conn.writeResponse(processRequest(request));
}
catch (Exception e)
{
...
    conn.writeResponse(buildFailureResponse(request.getRequestLine().getHttpVersion(), httpStatus, e.getMessage()));

这意味着当一个异常升级到最高级别时,失败消息响应的创建是不可自定义的:您可以获得这个非常技术性的消息,这就是全部。

我看到两个解决问题的方法:

  • 子类HttpMessageReceiver并在您的版本中自定义响应消息,
  • 删除HTTP传输以支持Jetty(查看书店示例)并在Web容器级别自定义响应错误消息。