Верблюжий Spring DSL onException вообще не срабатывает - PullRequest
0 голосов
/ 08 марта 2019

Я использую маршрут Camel DSL Spring, как указано ниже.
Как вы можете видеть, я хочу преобразовать файл xls, и в случае возникновения исключения мне нужно зарегистрировать ошибку и переместить файл в определенную папку..
Кажется, что ни один из этих шагов не происходит, я только что получил исключение при преобразовании файла и получил moveFailed компонента "file".Я подозреваю, что механизм исключений не транспонирует обработанный флаг, и затем исключение возвращается вызывающей стороне, файлу comp, и оно продолжается с перемещением.

Как выполнить механизм onException для исключения

<route>
        <from uri="file:C:/Users/Administrator/Desktop/HB_DATA/mov?delay=1000&amp;move=../mov_done&amp;moveFailed=../mov_fail"/>
        <process ref="processor"/>
        <to uri="bean:excelConverter"/>
        <onException>
            <exception >org.savino.hb.dataprovider.DataProviderException</exception>

            <handled>
                <constant>true</constant>
            </handled>
            <log loggingLevel="ERROR" message="HEY I GOT AN EXCEPTION" /> 

            <to uri="file:C:/Users/Administrator/Desktop/HB_DATA/mov_fail?fileName={header.X_UID}"/>
            <process ref="processorEx"/>
        </onException>
        <to uri="bean:finish"/>
    </route>

1 Ответ

1 голос
/ 09 марта 2019

<onException> должен предшествовать коду, который стремится запустить по ошибке. В вашем конкретном случае просто переместите обработку исключений сразу после 'from', например:

<route>
      <from uri="..."/>
        <!-- Exception handling -->
        <onException>
          <exception>org.savino.hb.dataprovider.DataProviderException</exception>
            <handled>
                <constant>true</constant>
            </handled>
            <log loggingLevel="ERROR" message="HEY I GOT AN EXCEPTION" /> 
        <onException>
        <!-- The route definition -->
        <process ref="processor"/>
        <to uri="bean:excelConverter"/>
        <to uri="file:..."/>
        <to uri="bean:finish"/>
    </route>

Возможной (более естественной) альтернативой является попытка поймать: http://people.apache.org/~dkulp/camel/try-catch-finally.html

...