骡子 message.payload 和有效载荷

Mule message.payload and payload

我有一个 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]">
  1. #[message.payload]和#[payload]有什么区别?

  2. 如果 payloadNullPayload 的实例,为什么 payload.hasNext() 不抛出 Exception

据我所知,最佳做法是使用 #[message.payload] 而不是 #[payload]

我正在使用 Mule 3.6.2。

message.payloadpayload没有区别。 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"/>