无法 post 对象类型消息到 Mule 4 中的消息队列 (ActiveMQ)
Unable to post Object type message to Messaging Queue(ActiveMQ) in Mule 4
我正在将 Mule 从 3.9 迁移到 4.1.4,尝试将 post ArrayList 转换为 JSON,然后 posting 到 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
您的负载不是 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>
我正在将 Mule 从 3.9 迁移到 4.1.4,尝试将 post ArrayList 转换为 JSON,然后 posting 到 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
您的负载不是 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>