首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >骡子MEL验证

骡子MEL验证
EN

Stack Overflow用户
提问于 2015-01-30 23:24:49
回答 3查看 995关注 0票数 0

我的属性文件值是:

代码语言:javascript
复制
companies = test
companies1 =
companies2 = 'another'

现在,如果我有像下面这样的MEL验证不起作用的话。

代码语言:javascript
复制
<choice  doc:name = "PageNum-1">
    <when expression = "#[ ${companies} != '' ]">
        <logger message = "===== Nothing to execute in process 1 ===" level="INFO" doc:name = "Logger"/>    
    </when>
    <otherwise>
        <logger message = "===== Nothing to execute in process 0 ===" level="INFO" doc:name = "Logger"/>    
    </otherwise>
</choice>

错误:

代码语言:javascript
复制
Exception stack is:
1. [Error: illegal use of operator: !=]
[Near : {... !='' ....}]
             ^
[Line: 1, Column: 1] (org.mule.mvel2.CompileException)

编辑:

作为解决方案,我添加了一个流变量,并将表达式中的数据验证为

代码语言:javascript
复制
<set-variable variableName = "company1" value = "${companies1}" doc:name = "company1"/>
<when expression = "#[flowVars.company1.isEmpty()]">

但是,是否有更简单的方法只使用$ as {commpany1}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-18 18:29:17

代码语言:javascript
复制
<set-variable variableName="company1" value="${companies1}" doc:name="company1"/>
<when expression="#[flowVars.company1.isEmpty()]">
票数 0
EN

Stack Overflow用户

发布于 2015-01-31 01:13:43

您的问题与如何替换属性有关。它们是一个接一个地被取代的,所以如果你不像你在companies2那样,与房地产价值公司联系在一起,它就行不通了。

此外,在#[]属性中不需要使用expression。以下几点对我是有帮助的:

代码语言:javascript
复制
<context:property-placeholder location="myprop.properties" />

<flow name="test-http">
    <http:inbound-endpoint host="127.0.0.1" port="8081"
        doc:name="HTTP" />
    <choice doc:name="PageNum-1">
        <when expression="${companies}!=''">
            <logger message="===== Nothing to execute in process 1 ==="
                level="INFO" doc:name="Logger" />
        </when>
        <otherwise>
            <logger message="===== Nothing to execute in process 0 ==="
                level="INFO" doc:name="Logger" />
        </otherwise>
    </choice>
</flow>
票数 0
EN

Stack Overflow用户

发布于 2015-01-31 08:57:04

如果您希望MEL将属性值作为字符串处理,则应该在表达式或属性文件中添加引号,而不是在两个位置添加引号,或者像您所做的那样添加一个混合引用。因此,若要测试您可以使用的文件中的属性${companies}是否为空,请执行以下操作。

代码语言:javascript
复制
<when expression="'${companies}' != empty" >

在属性被解决后,这将变成

代码语言:javascript
复制
<when expression="'' != empty" >

当属性文件包含

代码语言:javascript
复制
 companies=

它就会变成

代码语言:javascript
复制
<when expression="'Acme Inc' != empty" >

当属性文件包含

代码语言:javascript
复制
 companies=Acme Inc

但是,如果属性文件包含

代码语言:javascript
复制
 companies='Snake Oil Ltd'

结果将是

代码语言:javascript
复制
<when expression="''Snake Oil Ltd'' != empty" >

这将生成一个错误,因此在这种情况下,属性文件中不应该有引号。

如果您要求属性包含一个单引号,一个选项必须是对表达式属性使用单引号,并使用double包围字符串值。

代码语言:javascript
复制
    <when expression='"${companies}" != empty' >

这是完全兼容的XML,并在运行时按预期工作,但是Anypoint Studio编辑器会将其标记为错误(即使不是),因此由于Anypoint Studio中的这个bug,我建议您使用找到的解决方法,将属性加载到流变量中,然后在表达式中使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28246284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档