# SYSTEM :: ENTAXY :: CORE :: COMMON ERROR HANDLER Централизованный обработчик ошибок для формирования кодов ошибок, их синхронного возврата клиенту и для асинхронного дублирования более подробного описания ошибки (для клиента и для Центральной Базы Интеграции). ## Установка и настройка Установка модуля происходит через фичу: ``` 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 (основная конфигурация) ``` # асинхронный пакет с ошибкой отправляется от имени: # false - системы, вызвавшей ошибку в шине # true - шины (система с идентификатором "-1") error.bus.always_at_source=false # асинхронный пакет с ошибкой в поле description содержит: # false - сообщение из маппинга в файле ru.entaxy.esb.error.text.cfg # true - содержит сообщение, сохранённое в исключении error.description.exception_message=true # имя очереди для отправки пакета с ошибкой при недоступности системы, указанной в свойстве error.system.name error.queue.name=error # имя системы для отправки пакета с ошибкой, подразумевается система ЦБИ error.system.name=error # true - включает в пакет с ошибкой весь stacktrace исключения error.stacktrace.show=true # свойство автоматического запуска тестового маршрута, который при старте модуля бросает исключение java.lang.IllegalArgumentException: Test exception thrown error.test-route.startup=false ``` ### ru.entaxy.esb.error.code.cfg (справочник исключений с маппингом на коды ошибок) Справочник содержит соответствие имён классов исключений и http кодов ошибок. И будет наполняться по мере использования шины в разных ситуациях. Для исключения, имя которого ещё не указано в этом файле, будет возвращаться http код `520` (Unknown Error). ``` DefaultException=520 com.ctc.wstx.exc.WstxParsingException=400 java.security.AccessControlException=403 javax.ws.rs.ForbiddenException=403 ConnectorNotFound=424 ru.entaxy.esb.system.common.exception.DefaultException=520 ProfileNotFound=424 # и т.д. ``` ### ru.entaxy.esb.error.text.cfg (справочник кодов ошибок с маппингом на текстовые сообщения) Если в основной конфигурации свойство `error.description.exception_message` установлено в `false`, то описание ошибки отправляется из этого файла в соответствие с кодом http ошибки. ``` # 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 # и т.д. ``` ## Подключение обработчика ошибок Для подключения обработчика ошибок к маршрутам какого-либо модуля необходимо выполнить следующие шаги: 1. Добавить в модуль обработки ошибок в директорию `src/main/resources/xslt/operation` новый xslt для формирования ответа с ошибкой. Файл должен называться по имени операции, для которой будет формироваться ответ. Например `sendToJMS.xsl`. 1. Добавить в `camelContext` аттрибут `errorHandlerRef="commonErrorHandler"` и внутри зарегистрировать обработчик и политику повторной доставки: ```xml ``` Для контекстов, содержащих конечные точки cxf, необходимо: - через `pom.xml` импортировать интерцептор для перехвата ошибок (SoapFault) ```xml ru.entaxy.esb.system.core.common.error.handler.interceptor, ... ``` - добавить интерцептор в `cxfEndpoint` и bean с указанием в первом аргументе идентификатора `camelContext` ```xml ``` - в `camelContext` добавить маршрут ```xml ```