【问题标题】:Mule message.payload and payloadMule message.payload 和有效负载
【发布时间】:2016-03-20 19:51:17
【问题描述】:

我有一个 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. 如果payload 是NullPayload 的一个实例,为什么payload.hasNext() 不抛出Exception?

根据我的阅读,最佳做法是使用#[message.payload] 而不是#[payload]。

我正在使用 Mule 3.6.2。

【问题讨论】:

    标签: mule


    【解决方案1】:

    message.payload 和 payload 之间没有区别。 Payload 是为了与 Mule 2 兼容而留下的快捷方式。

    有时会出现关于两者之间差异的问题,只是小麻烦,但在这种情况下,我相信您应该尝试message.payload is NullPayload。

    【讨论】:

    • 如果没有价值,我的 #[payload.hasNext() 会不会? payload.next(): null] 变为 null 或 NullPayload 如果没有值?。我必须使用有效负载是 NullPayload 条件,而不是 message.payload 是 nullpayload 再次引发异常。
    【解决方案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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2017-10-23
      相关资源
      最近更新 更多