消费JMS消息时遇“First Element must contain the local name, Envelop”错误
JMS消息监听器SOAP处理异常排查方案
错误原因
从报错信息org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found prov可以明确:
- JMS消息监听器默认启用了SOAP消息解析逻辑,它期望收到的XML是标准SOAP格式(根节点必须为
<Envelope>) - 实际收到的消息Payload是普通XML,根节点为
<prov>,不符合SOAP格式要求 - 配置中
transport.jms.ContentType设为text/xml,部分ESB(如WSO2)会将text/xml默认映射为SOAP消息类型,触发SOAP解析流程
解决方法
方法1:修改ContentType配置(推荐)
将代理服务的ContentType参数从text/xml改为application/xml,让监听器按普通XML而非SOAP消息处理:
<parameter name="transport.jms.ContentType">application/xml</parameter>
方法2:调整消息发送端格式(如果允许)
若需保留SOAP解析逻辑,要求发送端将消息包装为标准SOAP Envelope:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <prov><rowID>122</rowID><msisdn>110000171</msisdn></prov> </soapenv:Body> </soapenv:Envelope>
方法3:禁用SOAP强制解析(针对特定ESB)
如果使用WSO2等ESB产品,可在代理服务中添加配置,强制使用普通XML消息构建器:
<parameter name="messageBuilder">org.apache.axis2.builder.XMLBuilder</parameter>
内容的提问来源于stack exchange,提问作者Wajih Haider
相关产品推荐
相关产品推荐

