Mule ESB groovy评估者密钥不能为空异常

时间:2014-07-07 12:01:50

标签: groovy mule

我遇到了mule中一个groovy评估器的问题,它从消息中获取一个调用属性,如果它为null则为chekcs。代码是:

<when expression="#[groovy: (message.getInvocationProperty('firstName', null) != null)]">

这引发了#34;

 1.key can not be empty (java.lang.IllegalArgumentException)
  javax.script.SimpleBindings:-1 (null)
 2. key can not be empty (java.lang.IllegalArgumentException). Message payload is of type:         String (org.mule.api.MessagingException)

org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor:32(http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html

此时我知道firstName属性确实为null - 它没有在消息中设置,但是不应该getInvocationProperty(&#39; firstName&#39;,null)将属性设置为null作为默认值它没有设置?

任何想法如何解决这个问题?

由于

3 个答案:

答案 0 :(得分:0)

尝试使用此选项:

<flow name="loan-broker">
    <http:inbound-endpoint host="127.0.0.1" port="8080" path="in" exchange-pattern="request-response"/>
    <set-variable variableName="prop" value="value" />
    <choice>
        <when expression="#[flowVars['prop'] != null]" >
            <set-payload value="#['prop: ' + flowVars['prop']]"/>
        </when>
        <otherwise>
            <set-payload value="Houston, we have a problem."/>
        </otherwise>
    </choice>
</flow>

使用以下方式调用:

curl http://127.0.0.1:8080/in

你应该得到

答案 1 :(得分:0)

我终于通过升级mule和使用MEL来解决这个问题。所以表达式现在看起来像这样。

<when expression="#[flowVars.firstName != empty]">

'flowVars'存储流中分配的所有调用属性和变量,如果已通过

调用流
<flow-ref />

调用者流程中设置的所有变量都可以通过'flowVars'获得。

答案 2 :(得分:0)

我有同样的问题,用以下表达式解决:

<set-variable variableName="firstName" value="${fname}" doc:name="Variable"/>
<when expression="#[flowVars.firstName.isEmpty()]">
     <logger message="===== If ===" level="INFO" doc:name="Logger"/>    
</when>
<otherwise>
     <logger message="===== Else ===" level=" INFO" doc:name="Logger"/> 
</otherwise>