无法向JMS队列推送有效数据,请求排查代码问题
JMS队列推送消息内容为空排查与修复
问题分析
从代码和日志来看,$ctx:XML变量确实包含有效XML内容,但JMS队列接收的消息为空,核心原因是你没有将$ctx:XML的内容设置为待发送的消息体。当前代码直接调用JMS端点时,发送的是默认的空SOAP消息体,而非$ctx:XML中的数据。
修复方案
在log组件之后、property设置之前,添加payloadFactory组件,将$ctx:XML的内容注入到SOAP消息体中。修改后的完整代码如下:
<log level="custom"> <property name="MockApi" value="After payload"/> <property expression="$ctx:XML" name="Payload"/> </log> <!-- 新增:将$ctx:XML的内容设置为消息体 --> <payloadFactory media-type="xml"> <format>$1</format> <args> <arg evaluator="xml" expression="$ctx:XML"/> </args> </payloadFactory> <property name="messageType" scope="axis2" type="STRING" value="text/xml"/> <property name="OUT_ONLY" scope="default" type="STRING" value="true"/> <call> <endpoint> <address format="soap11" uri="jms:/Check?transport.jms.ConnectionFactory=myQueueSender"> <suspendOnFailure> <initialDuration>-1</initialDuration> <progressionFactor>1</progressionFactor> </suspendOnFailure> <markForSuspension> <retriesBeforeSuspension>0</retriesBeforeSuspension> </markForSuspension> </address> </endpoint> </call>
关键说明
payloadFactory的作用是将指定变量(此处为$ctx:XML)的内容构建成消息的有效载荷,确保JMS端点发送的SOAP消息包含预期的XML数据。- 若需验证消息体是否正确生成,可在
payloadFactory之后添加<log level="full"/>,查看完整的消息内容日志。
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

