Как вернуть трассировку стека клиенту в MULE ..? - PullRequest
2 голосов
/ 23 ноября 2011

Кто-нибудь знает, как напечатать полную трассировку стека в браузере, когда возникает исключение времени выполнения в 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 ]

1 голос
/ 23 ноября 2011

Да, это возможно. Я предполагаю, что вы используете обычную конечную точку HTTP, и это служба типа REST (?). Если это так, вы можете просто сделать попытку / перехватить код, вызывающий исключение, и вернуть любой текст, который вы хотите.

Существуют также стратегии исключений (http://www.mulesoft.org/documentation/display/MULE3USER/Error+Handling) для более сложной обработки ошибок, но, похоже, вы ищете простой ответ выше.

Если это не отвечает на ваш вопрос, пожалуйста, предоставьте больше информации о вашей конфигурации мула и службе, которая вызывает исключение.

0 голосов
/ 23 ноября 2011

Нет ничего из коробки в Муле, чтобы сделать это. Вам необходимо реализовать обработчик исключений, который отформатирует трассировку стека в полезной нагрузке Message и вернет ее вызывающей стороне.

В вашем случае HTTP-транспорт имеет особенность, которую можно найти в коде HttpMessageReceiver:

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

Это означает, что когда исключение возникает на верхнем уровне, создание ответа на сообщение об ошибке не настраивается: вы получаете это довольно техническое сообщение, и это все.

Я вижу два варианта решения вашей проблемы:

  • подкласс HttpMessageReceiver и настройте ответное сообщение в вашей версии,
  • отбросьте транспорт HTTP в пользу Jetty one (посмотрите на пример книжного магазина) и настройте сообщения об ошибках ответа на уровне веб-контейнера.
...