代码之家  ›  专栏  ›  技术社区  ›  ravibeli

无法将对象类型消息发布到Mule 4中的消息队列(ActiveMQ)

  •  0
  • ravibeli  · 技术社区  · 7 年前

    我正在处理从3.9到4.1.4的Mule迁移,尝试将ArrayList转换为JSON,然后发布到JMS队列(使用ActiveMQ),得到下面的错误消息

    代码:

    <sub-flow name="xxxx_part_data_to_messaging_system_flow">
            <logger level="INFO" doc:name="Logger" doc:id="0607190d-f3ed-4b1b-a5b4-3572c08cf2d5" message='[vars.correlationId ++ "" ++ vars.batch_id]'/>
        <jms:publish doc:name="xxxx-part-data-jms-queue" doc:id="b44b1880-7374-4e4d-a0e0-1b4ab193ade4" config-ref="transactional_data_jms_connection_config" destination="${ld.transaction.xxxx.part.messaging.queue}">
        <jms:message >
        <jms:body ><![CDATA[#[[payload]]]]></jms:body>
        </jms:message>
        </jms:publish>
        <logger message="#[" $(vars.correlationId)-$(vars.batch_id) xxxx part posted successfully into transaction data queue ${ld.transaction.xxxx.part.messaging.queue}"]" level="INFO" doc:name="Logger" />
    </sub-flow>
    

    错误:

    the data fetched from DB is ArrayList
    An error occurred while sending a message to the QUEUE: [ld.stock.part.queue]: 
    Invalid type passed to StreamMessage: java.util.ArrayList . Allowed types are: 
    Boolean, Byte, Short, Character, Integer, Long, Float, Double,String and 
    byte[]. Invalid type passed to StreamMessage: java.util.ArrayList . Allowed 
    types are: Boolean, Byte, Short, Character, Integer, Long, Float, Double,String 
    and byte[].
    Error type    : JMS:ILLEGAL_BODY
    
    0 回复  |  直到 7 年前
        1
  •  2
  •   Ryan Carter    7 年前

    您的负载不是JSON。您正在用额外的[]将有效负载包装在数组中: #[[payload]] 默认为application/java。

    可以内联转换为JSON。如果要使用周围的数组:

    #[output application/json --- [payload]]
    

    或者如果不需要额外的数组使用:

    #[output application/json --- payload]
    

    内联示例:

     <jms:publish doc:name="xxxx-part-data-jms-queue" doc:id="b44b1880-7374-4e4d-a0e0-1b4ab193ade4" config-ref="transactional_data_jms_connection_config" destination="${ld.transaction.xxxx.part.messaging.queue}">
        <jms:message >
           <jms:body ><![CDATA[#[[output application/json --- payload]]]]></jms:body>
        </jms:message>
     </jms:publish>
    
    推荐文章