Обработка исключений в преобразователе Spring-Integration - PullRequest
4 голосов
/ 27 июня 2011

У меня есть , который принимает org.w3c.dom.Document и возвращает объект домена.И это мило.Если отсутствуют элементы, я поднимаю исключение приложения.

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

Я мог бы:

  • передать сообщение через маршрутизатор, чтобы проверить наличие недостающих элементовдо (или после) преобразователь
  • направляет сообщение

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

Ответы [ 2 ]

5 голосов
/ 04 июля 2011

Ответ, который я придумал, состоял в том, чтобы изменить тип возврата преобразователя из домена POJO на Сообщение. А затем, в исключительном случае, вернуть сообщение. Затем исключение направляется правильному обработчику маршрутизатором типа полезной нагрузки.

0 голосов
/ 23 сентября 2015

Чтобы определить, куда должны отправляться сообщения об исключениях, вам нужно установить заголовок errorChannel. Например,

<int:chain input-channel="myInputChannel">
    <int:header-enricher>
        <int:error-channel ref="myErrorChannel" />
    </int:header-enricher>
    <int:transformer ref="myTransformer" />
    <!-- Further actions after the transformer here -->
</int:chain>

Эта цепочка назначит заголовок канала ошибки перед вызовом преобразователя. Если преобразователь преуспевает, он продолжает цепочку, но если он генерирует исключение, MessagingException будет отправлено как сообщение myErrorChannel. (Если вы хотите, чтобы способ обработки исключения в дальнейшем был другим в цепочке, у вас может быть другой обогащатель заголовков после преобразователя, чтобы обновить заголовок errorChannel для следующего места, в которое вы хотите отправлять исключения.)

См. Подробности в разделе Обработка ошибок документации Spring Integration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...