【问题标题】:Mule Error - Collectiion Splitter - Exception Thrown on HTTP ReturnMule 错误 - 集合拆分器 - HTTP 返回时抛出异常
【发布时间】:2018-12-07 16:37:22
【问题描述】:

得到一个有趣的异常。使用拆分器处理器使用集合拆分器拆分集合。它很好地拆分了集合,但是当流程返回主流程并且流程结束时,它会抛出此异常。想知道你以前是否见过它:

错误 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 调用。

集合拆分不会发生聚合,它仅用于拆分集合,并对集合中的每个对象进行后续调用/操作

【问题讨论】:

    标签: mule


    【解决方案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> 
    

    【讨论】:

    • 是的,&lt;foreach&gt;...&lt;/foreach&gt; 是要走的路。
    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多