【问题标题】:How to check if attribute is present in value using Mule expression language如何使用 Mule 表达式语言检查值中是否存在属性
【发布时间】:2015-02-19 20:35:08
【问题描述】:

我想根据“groupmembership”标题属性检查登录用户的授权。

的输出
<logger level="INFO" message="groups are =#[message.inboundProperties['GROUPMEMBERSHIP']]" doc:name="Logger"/> is
[groups are =cn=ZZZ-XXXX-Write-Users,ou= ZZZ-XXXX,ou=1234,ou=Groups,dc=someone,dc=net]

现在一个用户可以拥有多个组成员,但我只想检查用户是否是“ZZZ-XXXX-Write-Users”的成员?

MEL 中有没有办法检查,比如 &lt;when expression="#[message.inboundProperties.GROUPMEMBERSHIP.cn != ' ZZZ-XXXX-Write-Users ']"&gt;

这是正确的方法还是我在这里遗漏了什么?

【问题讨论】:

    标签: regex xpath mule mule-studio mule-el


    【解决方案1】:

    你描述的场景看起来更像是一个流控制的东西。 在这种情况下,我会说您只在选择路由器中使用该 MEL 表达式:

    <choice doc:name="Choice">
      <when expression="#[!message.inboundProperties.GROUPMEMBERSHIP.cn.equals('ZZZ-XXXX-Write-Users')]">
        <!-- DO SOMETHING -->
      </when
      <otherwise>
       <!-- DO SOMETHING ELSE -->
      </otherwise>
    </choice>
    

    使用equals比较字符串只是一个小改动;)。

    另一个选项,正如我们在这里讨论的流量控制,是一个过滤器。 如果表达式的计算结果不为真,表达式过滤器将忽略该消息。问题是,无论是否通过,您都不能有替代路线,甚至没有表明消息已被过滤的日志消息。

        <expression-filter expression="#[!message.inboundProperties.GROUPMEMBERSHIP.cn.equals('ZZZ-XXXX-Write-Users')]" doc:name="Expression"/>
    

    HTH

    【讨论】:

    • 好吧,这失败了,因为我正在寻找更像包含 java String 的操作。我尝试了 MEL contains 运算符,但经过多次试验后从未真正奏效。即使我将有效负载放入一个变量并尝试使用 MEL contains,但并没有太大帮助。我最终写了一个客户转换器。在这里,我得到了 String 的有效负载,然后使用 Java Strings Contains 方法并将结果发回。
    • 好吧,如果它是一个 MEL 表达式,你可以贡献你的 java 转换器,就像一个 mel 函数一样:&lt;configuration doc:name="Configuration"&gt; &lt;expression-language autoResolveVariables="false"&gt; &lt;global-functions &gt; def your_func(e){app.registry['your_bean'].your_method(e)} &lt;global-functions &gt; &lt;/expression-language&gt; &lt;/configuration&gt;
    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2019-12-27
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多