Выдача исключения с пользовательским сообщением об ошибке в верблюде

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

<CamelContext>
  <route>
    <from uri="timer:myTimer"/>
    <bean ref="myException" method="setErrorCode(errorCode)"/>
    <bean ref="myException" method="setErrorMessage(errorMessage)"/>
    <throwException ref="myException"/>
  </route>
</CamelContext>

Этот подход работает нормально. Но проблема с этим подходом состоит в том, что будет только один случай MyException и это вызовет своего рода состояние гонки, когда есть несколько одновременных потребителей.

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

Я прочитал, что, начиная с верблюда 2.17, есть еще один дополнительный атрибут message установить сообщение об ошибке. Для меня есть ограничения, которые заставляют меня придерживаться верблюда 2.15.

Итак, что было бы правильным способом создать пользовательское исключение в верблюде с кодом ошибки и сообщением об ошибке?

2 ответа

Решение

Просто вызовите метод bean, который создает и генерирует новое исключение

public void blowUp(...) {
   throw new MyException(...);
}

А как насчет Camel throwException? определить исключение:

<spring:bean id="exception-unimplemented-operation"
    class="java.lang.Exception">
    <spring:constructor-arg name="message"
        value="Unimplemented Operation." />
</spring:bean>

... и в пути...

<cml:otherwise>
    <cml:throwException ref="exception-unimplemented-operation" />
</cml:otherwise>
Другие вопросы по тегам