= Использование обработчика ошибок

Для централизованной обработки ошибок будем использовать “процессор” зарегистрированный через _<camelContext errorHandlerRef="...”>_. В частных случаях допустимо использование _try …​ catch …​ finally_.
_(https://camel.apache.org/manual/latest/error-handler.html)_

Кроме возврата ошибок вызывающей стороне, необходимо дублировать ошибки в JMS очередь с возможностью их просмотра из веб-консоли Артемиса.

=== Классификация ошибок

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

_Серверные ошибки:_ NPE и другие ошибки времени выполнения.

_Сервис не доступен:_ конечная точка не отвечает и не принимает входящие соединения.

При этом ошибки могут быть “восстанавливаемыми” - с возможностью успешной обработки повторного запроса, использующего изменённые данные или другие точки доступа,  и “не восстанавливаемыми” - у клиента нет возможности обойти причины ошибки для выбранного сервиса.

=== Обёртка для ошибок

Ошибки удобно обрабатывать используя дополнительную информацию, которую необходимо передавать вместе с ошибкой:

* _Timestamp_: время возникновения ошибки;
* _Error Code_: код ошибки для удобства автоматизированной обработки ошибок;
* _Error Text_: описание возникающей ошибки, допустимо выводить вместе со стектрейсом;
* _Severity Level_: уровень журналирования ошибки;
* _Notification_: в случае необходимости уведомлений об ошибке поле должно содержать адрес или список адресов систем/пользователей для оповещения;
* _Retry_: информация о возможности повторной отправки сообщения;

_Uuid_ и _id_ сообщения


