【问题标题】:How to return stack Trace to Client in MULE..?如何在 MULE 中将堆栈跟踪返回给客户端..?
【发布时间】:2011-11-25 01:34:07
【问题描述】:

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

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

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)

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

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

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

【问题讨论】:

    标签: exception browser stack-trace mule


    【解决方案1】:

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

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

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

    【讨论】:

    • 显然我已经在我的整个项目中实现了 Try / Catch ..!!..n 我正在以我想要的任何形式返回异常..但我要问的是:假设你放了一个URL 中的 "\" 字符,然后 MULE 返回 500 服务器错误(显然它应该,因为它是 URI 异常)。但是我也能捕捉到那个异常吗(在 mule_config 文件中的某个地方)..??
    • 这是否意味着您也尝试了异常策略但没有帮助?
    • 是的..我已经尝试过自定义异常策略,但它调用的类只能返回 Mule-Message ,而不是我想要的。 (一个 StackTrace 或其他的东西)..!!
    【解决方案2】:

    在 Mule 中没有开箱即用的东西可以做到这一点。您必须实现一个异常处理程序,它将格式化消息异常有效负载中的堆栈跟踪并将其返回给调用者。

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

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

    这意味着当异常突然出现在顶层时,失败消息响应的创建是不可定制的:你会得到这个漂亮的技术消息,仅此而已。

    我看到有两种方法可以解决您的问题:

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

    【讨论】:

    • 我从不从我的 JAVA 类中抛出异常。我所有的 java 类中的每个异常都已被捕获。但是,如果 MULE 本身产生了一个异常,例如“URL Exception”,该怎么办。 (我在下面的其他评论中解释了这种情况。)。我怎样才能捕捉到那个异常......??
    猜你喜欢
    • 2012-04-28
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2013-01-18
    相关资源
    最近更新 更多