Exception 如何在MULE中将堆栈跟踪返回到客户端。。?

Exception 如何在MULE中将堆栈跟踪返回到客户端。。?,exception,browser,stack-trace,mule,Exception,Browser,Stack Trace,Mule,当MULE中出现运行时异常时,有人知道如何在浏览器上打印完整堆栈跟踪吗 当发生运行时异常时,MULE会向客户端抛出500服务器错误,但不会向客户端显示任何详细信息。它在控制台或日志文件中打印整个堆栈跟踪(如下所示): 我是否可以在浏览器上(向客户端)显示相同的堆栈跟踪 如果可能的话,还可以告诉我如何在浏览器上打开或关闭堆栈跟踪打印 (可能将来某个时候,我不想在浏览器上显示堆栈跟踪)是的,这是可能的。我假设您使用的是一个常规HTTP端点,这是一个REST类型的服务(?),如果是这样,您可以简单地在

当MULE中出现运行时异常时,有人知道如何在浏览器上打印完整堆栈跟踪吗

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

我是否可以在浏览器上(向客户端)显示相同的堆栈跟踪

如果可能的话,还可以告诉我如何在浏览器上打开或关闭堆栈跟踪打印


(可能将来某个时候,我不想在浏览器上显示堆栈跟踪)

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

也有例外策略(http://www.mulesoft.org/documentation/display/MULE3USER/Error+处理)进行更复杂的错误处理,但听起来您正在寻找上述简单答案


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

mule中没有现成的工具可以做到这一点。您必须实现一个异常处理程序,它将格式化消息异常负载中的stacktrace并将其返回给调用方

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

try
{
    conn.writeResponse(processRequest(request));
}
catch (Exception e)
{
...
    conn.writeResponse(buildFailureResponse(request.getRequestLine().getHttpVersion(), httpStatus, e.getMessage()));
这意味着,当异常出现在顶层时,故障消息响应的创建是不可定制的:您将得到这条漂亮的技术消息,仅此而已

我认为有两种方法可以解决您的问题:

  • 子类HttpMessageReceiver并使响应消息在您的版本中可自定义
  • 放弃HTTP传输而使用Jetty one(查看书店示例),并在web容器级别自定义响应错误消息

显然,我在整个项目中都实施了Try/Catch。。!!。。n我将以我想要的任何形式返回异常。但是我要问的是:假设您在URL中放置了一个“\”字符,然后MULE返回一个500服务器错误(显然它应该返回,因为它是一个URI异常)。但是我也可以捕获该异常(在mule_config文件中的某个地方)……这是否意味着您也尝试了一个异常策略,但没有帮助?是的……我尝试了一个自定义异常策略,但它调用的类只能返回一个mule消息,而不是我想要的。(StackTrace或其他类似的东西)。。!!我从不从JAVA类中抛出异常。我所有java类中的每一个异常都被捕捉到了。但是如果有一个由MULE本身生成的异常,比如“URL异常”,该怎么办呢。(我在下面的其他评论中解释了这种情况。)。我怎样才能捕捉到这个异常呢。。??
try
{
    conn.writeResponse(processRequest(request));
}
catch (Exception e)
{
...
    conn.writeResponse(buildFailureResponse(request.getRequestLine().getHttpVersion(), httpStatus, e.getMessage()));