我有一个Mule表达式语言表达式:
<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
是NullPayload
的一个实例,为什么payload.hasNext()
不抛出Exception
?
从我读到的最佳实践是使用#[message.payload]
而不是#[payload]
。
message.payload
与payload
无差异。Payload是为了与Mule 2兼容而留下的快捷方式。
有时会有一个问题,这里和另一个之间的差异,只是小麻烦,但在这种情况下,我认为你应该尝试message.payload is NullPayload
。
我通过将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"/>