当在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的打印.. ??
(未来某个时候,我可能不希望在浏览器上显示堆栈跟踪)
答案 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()));
这意味着当一个异常升级到最高级别时,失败消息响应的创建是不可自定义的:您可以获得这个非常技术性的消息,这就是全部。
我看到两个解决问题的方法: