【问题标题】:MEL logical AND acting weird, order of operands matters?MEL 逻辑 AND 行为怪异,操作数的顺序很重要?
【发布时间】:2013-11-08 20:15:25
【问题描述】:

谁能解释为什么会出现以下行为?为什么在使用逻辑 AND 时操作数的顺序很重要?在 mule-ce 3.3.1 上运行。

输出如下:

true  
true  
false  
true


<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd">

    <flow name="testFlow1" doc:name="testFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="20005" path="test" doc:name="HTTP"/>

        <message-properties-transformer overwrite="true" scope="session" doc:name="Message Properties">
              <add-message-property key="productNumber" value="1" />
        </message-properties-transformer>

        <logger level="INFO" message="#[(sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '2') and  (sessionVars['quantity'] == null)]" doc:name="Logger"/>
        <!-- true -->

        <logger level="INFO" message="#[(sessionVars['quantity'] == null) and (sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '2')]" doc:name="Logger"/>
        <!-- true -->

        <message-properties-transformer overwrite="true" scope="session" doc:name="Message Properties">
              <add-message-property key="productNumber" value="3" />
        </message-properties-transformer>

        <logger level="INFO" message="#[(sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '2') and  (sessionVars['quantity'] == null)]" doc:name="Logger"/>
        <!-- false -->

        <logger level="INFO" message="#[(sessionVars['quantity'] == null) and (sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '2')]" doc:name="Logger"/>
        <!-- true? it should not be true! -->        
    </flow>
</mule>

【问题讨论】:

    标签: mule mule-el


    【解决方案1】:

    使用 &而不是和。它计算正确的值。更新流程

    <logger level="INFO" message="#[(sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '2') &amp;&amp;  (sessionVars['quantity'] == null)]" doc:name="Logger"/>
        <!-- false -->
    
    
    <logger level="INFO" message="#[(sessionVars['quantity'] == null) &amp;&amp; (sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '1')]" doc:name="Logger"/>
    

    【讨论】:

      【解决方案2】:

      我不知道为什么会发生这种情况,但我在 3.4.0 CE 中也有同样的经历。实现正确结果的一种解决方法似乎是使用“&&”,如

      #[(sessionVars['quantity'] == null) &amp;&amp; (sessionVars['productNumber'] == '1' || sessionVars['productNumber'] == '2')]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-14
        • 2017-08-12
        • 2022-01-15
        • 1970-01-01
        • 2014-08-18
        • 2015-10-27
        • 2021-03-05
        • 2015-02-22
        相关资源
        最近更新 更多