Mule message.payload和有效负载

时间:2015-07-10 22:33:48

标签: mule

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

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

  3. 根据我的阅读,最佳做法是使用#[message.payload]代替#[payload]

    我正在使用Mule 3.6.2。

2 个答案:

答案 0 :(得分:2)

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