2015-02-09 8 views
1

Я определил внешний xml, который содержит несколько выражений.Динамические условия Mule

<mule xmlns="http://www.mulesoft.org/schema/mule/core" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:spring-security="http://www.mulesoft.org/schema/mule/spring-security" 
     xmlns:beans="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation=" 
      http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.1/mule.xsd 
      http://www.mulesoft.org/schema/mule/spring-security http://www.mulesoft.org/schema/mule/spring-security/3.1/mule-spring-security.xsd 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <beans:bean id="conditions" class="java.util.ArrayList" name="conditions"> 
     <beans:constructor-arg> 
      <beans:list> 
       <beans:value>#[flowVars.price == '1000']</beans:value> 
       <beans:value>...</beans:value> 
      </beans:list> 
     </beans:constructor-arg> 
    </beans:bean> 

</mule> 

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

<spring:beans> 
    <spring:import resource="classpath:my-conf-dir/expressions.xml"/> 
</spring:beans> 

<flow name="mainFlow" doc:name="mainFlow"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/> 
    <expression-filter expression="#[payload != '/favicon.ico']" doc:name="Expression"/> 

    <set-variable variableName="price" value="1001" doc:name="Set Price" /> 

    <foreach collection="#[app.registry.get('conditions')]" doc:name="For Each"> 
     <logger message="Condition: #[payload]" level="INFO" doc:name="Logger"/> 

     <choice> 
      <when expression="#[payload]"> 
       <logger message="OK" level="INFO" doc:name="Logger"/> 
      </when> 
      <otherwise> 
       <logger message="KO" level="INFO" doc:name="Logger"/> 
      </otherwise> 
     </choice> 
    </foreach> 
</flow> 

Есть ли способ оценить список выражений?

Любая помощь будет оценена по достоинству.

ответ

0

Может быть, вы могли бы оценить выражения с использованием компоненты Java и доступом метода eventContext.getMuleContext().getExpressionLanguage().evaluate.

НТН, Marcos

+0

Он работает, хотя я должен был изменить выражение – Daniel

+0

Great! Да, с помощью этого метода некоторые ярлыки выражения недоступны. – MarcosNC

0

Привет, вы не можете сделать то, что вы пытаетесь сделать, по крайней мере, не по-настоящему.

Когда вы отправляете значение в MEL, как вы пытаетесь это сделать, оцените его как литерал. Таким образом, правда, не является истинным только в буквальном смысле:.

[flowVars.price == '1000']

Что вы можете сделать, это получить # [flowVars [ 'цена'] равно (полезная нагрузка) ] где полезная нагрузка - это значение списка. Обратите внимание, что я использовал equals, сравнивая строки.

Может быть, если вы предоставить более некоторый контекст, мы можем получить лучшее представление о том, как добиться того, что вы хотите

Смежные вопросы