Централизованный обработчик ошибок для формирования кодов ошибок, их синхронного возврата клиенту и для асинхронного дублирования более подробного описания ошибки для клиента и для Центральной Базы Интеграции.
image::Error-handling-Scheme.jpg[]
= Установка и настройка
Установка модуля происходит через фичу:
* _feature:install error-handler_
Фича включена в общий установочный скрипт и будет устанавливаться вместе с остальными модулями. Во время установки фичи в караф копируются файлы конфигурации:
* _ru.entaxy.esb.error.cfg (основная конфигурация)_
* _ru.entaxy.esb.error.code.cfg (справочник исключений с маппингом на коды ошибок)_
* _ru.entaxy.esb.error.text.cfg (справочник кодов ошибок с маппингом на текстовые сообщения)_
Есть возможность настройки маппинга уровней журналирования через файл конфигурации ru.entaxy.esb.error.severity.cfg.
* _ru.entaxy.esb.error.cfg (основная конфигурация)_
[source,properties]
----
# асинхронный пакет с ошибкой отправляется от имени:
# false - системы, вызвавшей ошибку в шине
# true - шины (система с идентификатором "-1")
ru.entaxy.esb.error.bus.always_at_source=false
# асинхронный пакет с ошибкой в поле description содержит:
# false - сообщение из маппинга в файле ru.entaxy.esb.error.text.cfg
# true - содержит сообщение, сохранённое в исключении
ru.entaxy.esb.error.description.exception_message=true
# имя очереди для отправки пакета с ошибкой при недоступности системы, указанной в свойстве ru.entaxy.esb.error.system.name
ru.entaxy.esb.error.queue.name=error
# имя системы для отправки пакета с ошибкой, подразумевается система ЦБИ
ru.entaxy.esb.error.system.name=error
# true - включает в пакет с ошибкой весь stacktrace исключения
ru.entaxy.esb.error.stacktrace.show=true
# свойство автоматического запуска тестового маршрута, который при старте модуля бросает исключение java.lang.IllegalArgumentException: Test exception thrown
ru.entaxy.esb.error.test-route.startup=false
----
* _ru.entaxy.esb.error.code.cfg (справочник исключений с маппингом на коды ошибок)_
Справочник содержит соответствие имён классов исключений и _http_ кодов ошибок. И будет наполняться по мере использования шины в разных ситуациях. Для исключения, имя которого ещё не указано в этом файле, будет возвращаться _http_ код _520 (Unknown Error)._
[source,properties]
----
DefaultException=520
com.ctc.wstx.exc.WstxParsingException=400
java.security.AccessControlException=403
javax.ws.rs.ForbiddenException=403
ru.onec.esb.system.common.exception.ConnectorNotFound=424
ru.onec.esb.system.common.exception.DefaultException=520
ru.onec.esb.system.common.exception.ProfileNotFound=424
# и т.д.
----
* _ru.entaxy.esb.error.text.cfg (справочник кодов ошибок с маппингом на текстовые сообщения)_
Если в основной конфигурации свойство _ru.entaxy.esb.error.description.exception_message_ установлено в _false_, то описание ошибки отправляется из этого файла в соответствие с кодом _http_ ошибки.
[source,properties]
----
# 1xx: Informational
# 2xx: Success
200=OK
# 3xx: Redirection
# 4xx: Client Error
400=Bad Request
403=Forbidden
424=Failed Dependency
# 5xx: Server Error
520=Unknown Error
# и т.д.
----
=== Подключение обработчика ошибок
Для подключения обработчика ошибок к маршрутам какого-либо модуля необходимо выполнить следующие шаги:
. Добавить в модуль обработки ошибок в директорию _src/main/resources/xslt/operation_ новый _xslt_ для формирования ответа с ошибкой. Файл должен называться по имени операции, для которой будет формироваться ответ. Например _sendToJMS.xsl_.
. Добавить в _camelContext_ аттрибут _errorHandlerRef="commonErrorHandler"_ и внутри зарегистрировать обработчик и политику повторной доставки:
[source,xml]
----
----
Для контекстов, содержащих конечные точки _cxf_, необходимо:
через _pom.xml_ импортировать интерцептор для перехвата ошибок (_SoapFault_)
[source,xml]
----
ru.onec.esb.system.core.common.error.handler.interceptor,
...
----
добавить интерцептор в _cxfEndpoint_ и _bean_ с указанием в первом аргументе идентификатора _camelContext_
[source,xml]
----
----
в _camelContext_ добавить маршрут
[source,xml]
----
----