得到一个有趣的异常。使用拆分器处理器使用集合拆分器拆分集合。它可以很好地拆分集合,但是当流程返回到主流程并且流程结束时,它将引发此异常。想知道您之前是否看过它:
错误2018-12-07 16:06:26,052 [[ahld_kpi_enabler] .HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy:异常策略中捕获了异常:java.lang.UnsupportedOperationException:getPayloadAsBytes(),那里试图直接访问不支持的消息集合的有效负载。 请从messageList检索值或使用getPayload(DataType.BYTE_ARRAY_DATA_TYPE) java.lang.RuntimeException:java.lang.UnsupportedOperationException:getPayloadAsBytes(),已经尝试直接访问不支持的消息集合的有效负载。 请从messageList检索值或使用getPayload(DataType.BYTE_ARRAY_DATA_TYPE)
该流通过HTTP触发,并进行出站HTTP调用。
集合拆分没有任何聚合发生,它仅用于拆分集合,并对集合中的每个对象进行后续调用/操作
答案 0 :(得分:1)
在使用集合分割器的流程结束时,您的有效负载将成为Mule消息集合,并且在您使用HTTP时,它将尝试将其序列化为HTTP响应,但不能。
因此,您可以聚合有效负载,然后将有效负载设置为要返回的内容,甚至可以返回#[null]
。
或者您可以将集合拆分器和其后的逻辑放在一个单独的流中,包装在浓缩器中:
<enricher target="#[flowVars.someVar]">
<flow-ref name="myCollectionSplitterLogicFlow" />
</enricher>
或者您也可以使用foreach
,我个人建议这样做,因为在Mule 4中已删除了分离器。
如果您有嵌套集合,则可以有任意数量的嵌套foreach
:
<foreach collection="#[payload]">
<foreach collection="#[payload.nestedCollection]">
</foreach>
</foreach>