Как я могу сравнить свойство с (логическим) литералом в маршруте Apache Camel в Spring XML?

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

Условный оператор основан на значении свойства, которое извлекается из файла «.properties». Я определил placeholderPrefix и placeholderSuffix для свойств внутри bean-компонента, которые являются {{ и }} соответственно. Если это поможет, это определение выглядит следующим образом:

<bean id="com.example.springPropertyConfigurer"
    class="com.example.PropertiesSpringPlaceholderConfigurer">
    <constructor-arg index="0"
        type="com.example.PropertiesInterface"
        ref="com.example.Properties" />
    <property name="placeholderPrefix" value="{{" />
    <property name="placeholderSuffix" value="}}" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>

Фрагмент кода, который у меня сейчас есть, выглядит так:

<camel:choice>
    <camel:when>
        <camel:simple>{{com.example.PropertyKey}} == 'true'</camel:simple>
            <camel:to uri="executingTargetAction" />
    </camel:when>
    <camel:otherwise>
        <!-- Empty block so that nothing happens -->
    </camel:otherwise>
</camel:choice>

На данный момент этот метод не дает мне желаемого результата.

Я пытался использовать как <xpath>, так и <spel> вместо <simple>, чтобы проверить, работают ли они, но похоже, что все эти языки выражений ожидают, что левая часть условия будет содержать объект Exchange из маршрута Camel. Я не хочу ничего сравнивать с объектом Exchange — я хочу только сравнить свойство из файла свойств с заданным литералом, который я предоставляю (в данном случае это логическое значение «истина»).

Я готов использовать любые языки выражений Camel, кроме <simple> и других перечисленных выше, которые будут выполнять эту задачу.


person Xc1te    schedule 14.09.2015    source источник
comment
Верблюжья версия 2.8.1.   -  person Xc1te    schedule 15.09.2015


Ответы (1)


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

<choice>
<when>
<method ref="ABC" method="pqr" />
-----your desired logic-----
</when>
</choice>
person Prashant Rai    schedule 21.12.2020