我有一个Mule Expression Language表达式:
<set-payload value="#[message.payload.hasNext() ? message.payload.next(): null]" doc:name="Set Payload"/>
<choice doc:name="Choice">
<when expression="#[message.payload != null]">
我正在尝试迭代ConsumerIterator
并收到错误
Execution of the expression "message.payload.hasNext() ? message.payload.next(): null" failed. (org.mule.api.expression.ExpressionRuntimeException)
org.mule.el.mvel.MVELExpressionLanguage:202 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/expression/ExpressionRuntimeException.html)
6. Execution of the expression "message.payload.hasNext() ? message.payload.next(): null" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: ConsumerIterator (org.mule.api.transformer.TransformerMessagingException)
org.mule.transformer.AbstractTransformer:135 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerMessagingException.html)
我的解决方案是在没有message.
前缀的情况下重写代码:
<set-payload value="#[payload.hasNext() ? payload.next(): null]" doc:name="Set Payload"/>
<choice doc:name="Choice">
<when expression="#[payload is NullPayload]">
#[message.payload]和#[payload]之间有什么区别?
如果payload
是NullPayload
的实例,为什么不payload.hasNext()
抛出Exception
?
根据我的阅读,最佳做法是使用#[message.payload]
代替#[payload]
。
我正在使用Mule 3.6.2。
答案 0 :(得分:2)
message.payload
和payload
之间没有区别。 Payload是留给那里的捷径,只是为了与Mule 2兼容。
这里和那里有一个问题,一个和另一个之间存在差异,只是小麻烦但在这种情况下我相信你应该尝试message.payload is NullPayload
。
答案 1 :(得分:2)
我通过将set-payload
分配给false
或空String
代替null
来解决了问题:
<set-payload value="#[message.payload.hasNext() ? message.payload.next(): 'none']" doc:name="Set Payload"/>
即使分配null
在批处理步骤过程中无效,最好分配一些其他String
。现在我可以使用#[message.payload]
:
<logger message="Query: #[message.payload]" level="INFO" doc:name="Logger"/>