Как я могу выбрать значение camel: process ref на основе поля во входящем файле? - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть верблюжий маршрут для обработки входящих файлов. Вот как это выглядит до сих пор:

<camel:route id="myResultsFileRoute">
    <camel:from uri="ref:myResultsFileEndpoint"/>
    <camel:process ref="myResultsFileProcessor"/> 
    <camel:to uri="direct:myResultsCommonRoute"/>
    <camel:onException>
        <camel:exception>java.lang.Exception</camel:exception>
        <camel:redeliveryPolicy maximumRedeliveries="5" redeliveryDelay="30000"/>
    </camel:onException>
</camel:route>

Как вы можете видеть выше, я использую myResultsFileProcessor. У меня есть bean-компонент, подобный описанному ниже:

<bean id="myResultsFileProcessor"
      class="com.mypackage.processes.file.host.myResults.MyResultsFileInitialProcessor">
    <constructor-arg name="myResultToEventAssembler" ref="myResultToEventAssembler"/>
    <constructor-arg name="myResultsNamespace" value="$res{schema.uri.myResults}"/>
</bean>

Входящий файл xml содержит один узел, который описывает его тип. До сих пор, независимо от того, какой это был тип, я всегда использовал myResultsFileProcessor, однако теперь, после того, как я ввел другой тип входящего файла, мне нужно представить новый файловый процессор для него. Поэтому я создал новый боб:

<bean id="myOtherResultsFileProcessor"
      class="com.mypackage.processes.file.host.myResults.MyOtherFileInitialProcessor">
    <constructor-arg name="myResultToEventAssembler" ref="myOtherResultToEventAssembler"/>
    <constructor-arg name="myResultsNamespace" value="$res{schema.uri.myResults}"/>
</bean>

Можете ли вы сказать мне, как я могу изменить свой верблюжий маршрут, чтобы - в зависимости от поля в файле он выбирал либо myResultsFileProcessor, либо myOtherResultsFileProcessor?

1 Ответ

1 голос
/ 23 февраля 2020

Вы можете использовать выбор EIP https://camel.apache.org/manual/latest/choice-eip.html

<choice>
    <when>
        <xpath>/node/type = 'file_type'</xpath>
        <process ref="myResultsFileProcessor"/> 
    </when>
    <when>
        <xpath>/node/type = 'other_file_type'</xpath>
        <process ref="myOtherResultsFileProcessor"/> 
    </when>
</choice>
...