.. | ||
src/main | ||
LICENSE.txt | ||
pom.xml | ||
README.md |
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"
и внутри
зарегистрировать обработчик и политику повторной доставки:
camelContext id="soap-service-endpoints-camel-context"
< xmlns="http://camel.apache.org/schema/blueprint"
errorHandlerRef="commonErrorHandler" handleFault="true">
errorHandler id="commonErrorHandler" redeliveryPolicyRef="noRedelivery"
< type="DeadLetterChannel" deadLetterUri="direct-vm:commonErrorEndpoint"/>
redeliveryPolicyProfile id="noRedelivery" disableRedelivery="true" />
<<!-- any content -->
camelContext> </
Для контекстов, содержащих конечные точки cxf, необходимо: - через
pom.xml
импортировать интерцептор для перехвата ошибок
(SoapFault)
bundle.osgi.import.pkg>
<
ru.entaxy.esb.system.core.common.error.handler.interceptor,
...bundle.osgi.import.pkg> </
- добавить интерцептор в
cxfEndpoint
и bean с указанием в первом аргументе идентификатораcamelContext
camelcxf:cxfEndpoint id="soap-proxy" .../>
<<!-- any properties and interceptors -->
camelcxf:outFaultInterceptors>
<ref component-id="handleOutFaultInterceptor"/>
<camelcxf:outFaultInterceptors>
</</camelcxf:cxfEndpoint>
bean id="handleOutFaultInterceptor" class="ru.entaxy.esb.system.core.common.error.handler.interceptor.HandleOutFaultInterceptor">
<argument ref="soap-service-endpoints-camel-context"/>
<argument value="direct:error_from_cxf"/>
<bean> </
- в
camelContext
добавить маршрут
route id="error_from_cxf">
<from uri="direct:error_from_cxf"/>
<log message="cxf message: ${body}" loggingLevel="DEBUG"/>
<log message="headers: ${headers}\n" loggingLevel="DEBUG"/>
<to uri="direct-vm:cxfErrorEndpoint"/>
<route> </