如何在MULE中将堆栈跟踪返回给客户端?
有没有人知道如何在浏览器上打印满堆栈跟踪当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)
我可以显示在浏览器相同的堆栈跟踪(到客户端)??
如果可能的话,还请告诉我如何打开或关闭浏览器上的堆栈跟踪打印。
(它可能是一段时间以后,我不希望显示在浏览器堆栈跟踪)
是的,这是可能的。我假设你正在使用一个常规的HTTP端点,并且这是一个REST类型的服务(?)如果是这样,你可以简单地在引发异常的代码周围放一个try/catch,并返回你想要的任何文本。
还有一些异常策略(http://www.mulesoft.org/documentation/display/MULE3USER/Error+Handling)用于执行更复杂的错误处理,但这听起来像是您在寻找上面的简单答案。
如果这不能回答您的问题,请提供有关您的mule配置和引发异常的服务的更多信息。
Mule没有什么可以做到这一点的。您必须实现一个异常处理程序,它将格式化消息异常有效负载中的堆栈跟踪并将其返回给调用者。
在你的情况下,HTTP传输具有可在HttpMessageReceiver代码中发现了一个特殊性:
try
{
conn.writeResponse(processRequest(request));
}
catch (Exception e)
{
...
conn.writeResponse(buildFailureResponse(request.getRequestLine().getHttpVersion(), httpStatus, e.getMessage()));
这意味着,当一个异常作物,达到顶尖水平,创建失败消息的响应不是可定制的:你会得到这个非常技术性的信息,就是这样。
我看到两个选项来解决问题:
- 子类HttpMessageReceiver,使定制的响应消息中的版本,
- 赞成码头之一删除HTTP传输(看书店示例),并在Web容器级别自定义响应错误消息。
我从来没有从我的JAVA类抛出异常。我所有的java类中的每个异常都被捕获。但是,如果MULE自身产生一个异常(如“URL异常”)会怎么样? (我在下面的其他评论中解释了这种情况。)。我怎样才能捕捉到异常以及.. ?? –
改进我的回应。 –
很明显,我已经在我的整个项目中实现了Try/Catch .. !! ..我以任何形式返回了异常。但是我问的是:假设你把一个“\”字符在URL中,然后MULE返回一个500服务器错误(显然它应该,因为它是一个URI例外)。但我是否也可以捕获该异常(在mule_config文件中的某个地方)..? –
这是否意味着你也尝试了一个例外策略,但这并没有帮助? – awynne
是啊..我已经尝试了一个自定义异常策略,但它调用的类只能返回一个Mule-Message,而不是我想要的。 (一个StackTrace或其他的东西这个).. !! –