2015-01-18 2 views
0

Имея Requirment фильтровать сообщения, если какая-то переменная сеанса является ложным или истиннымMule: Expression фильтр не работает

flow.xml

<spring:beans> 
     <spring:bean id="serviceBean" class="com.uidai.ServiceBean"/> 
    </spring:beans> 

    <flow name="messagefilterFlow1" doc:name="messagefilterFlow1"> 
     <file:inbound-endpoint responseTimeout="10000" doc:name="File" path="D:/sample" /> 
     <invoke object-ref="serviceBean" method="enrichFilter" doc:name="Invoke" methodArguments="#[sessionVars],#[message]"/> 
     <logger level="INFO" message="#[sessionVars['filter']]" doc:name="Logger"/> 
     <!--<message-property-filter pattern="#[sessionVars['filter']]=true" caseSensitive="true" doc:name="Message Property"/>--> 
     <expression-filter expression="#[sessionVars['filter']]" doc:name="Expression"/> 
     <file:outbound-endpoint responseTimeout="10000" doc:name="File" path="D:/sample2"/> 
    </flow> 

Сервисный метод боб

public void enrichFilter(MessagePropertyMapContext mapContext, MessageContext messageContext){ 
     mapContext.put("filter", false); 
     System.out.println("mapContext" + mapContext); 
     System.out.println("message Context:::" + messageContext); 
    } 

Reading a file from inbound and setting a session variable in spring bean method. Wanted to filter the message on basis of filter value so that if filter value is true outbound file is not written and message is filtered. Even if filter value is true or false a lock is hold on file by inbound endpoint and processing stops. 

ответ

0

я могу Воспроизведение 3.5.2.

Я предлагаю вам установить точку останова в ExpressionFilter.class в методе accept(), чтобы понять, почему строка return muleContext.getExpressionManager().evaluateBoolean(expr, message, nullReturnsTrue, !nullReturnsTrue); всегда возвращает false для вас.

Еще одно предложение использовать меньшее возможное количество магии - это добавить возврат к выражению фильтра и/или реализовать java-фильтр, реализовав интерполяцию фильтра, а затем используя элемент custom-filter.

+0

Это работает только для исходящего свойства, а не для сеанса, если выражение = "# [header: filter = true]", но все же, если сообщение является фильтрованным файлом: блокировка входящего удержания в файле и освобождение блокировки. Даже он не генерирует исключение, когда сообщение фильтруется, поэтому я могу обработать его в стратегии исключения catch. –

+0

Проблема решена после фильтра выражения wrappring в фильтре сообщения <выражение-фильтр выражение = "# [header: filter = true] "doc: name =" Выражение "/>