javax.jms.TextMessage - getStringProperty()返回null值

时间:2014-09-30 11:29:15

标签: java events jms message tibco

我正在收听一个队列,当一条消息发布到队列上时,我的监听器类将监听该消息并且必须处理它。

监听器配置很好,我能够收到消息。但是当我尝试获取其中一个属性的值时,即使属性具有值,它也会返回null。

请参阅附带的代码和我的处理逻辑代码。

<textMessages>
<textMessage timestamp="1410889863339">
    <property name="evnt_code" value="ID" />
    <property name="prev_cmdy_abrv" value="APOISN" />
    <text><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no" ?><ceo_eqmt_msg version="1.1"><eqmt eqmt_nbr="902721" eqmt_init="UTLX" ceo_eqmt_id="56081806"><evnt_dtl><evnt evnt_id="19776586731" evnt_code="ID" stop_code="CU" in_out_stop_ind="O" evnt_dt="20140916124600" le_code="L" wb_nbr="161734" wb_date="20140911" evnt_stn_id="8578" evnt_crc7="B 649" evnt_tz="0" evnt_carr_abrv="CN" yard_bloc_id="CNGI" tcs_csn="1102243807" last_uptd_dt="20140916125101" upd_task_user_id="DAEI999" upd_task_id="=WO" upd_task_dt="20140916125100" match_plnd_ev_id="26624105732" phys_le_code="L" upd_src_sys_tla_code="TCS" upd_src_sys_proc_id="Q133703AEI" evnt_stop_desc_id="2059"/></evnt_dtl></eqmt></ceo_eqmt_msg>]]></text>
</textMessage>

处理为

public void onMessage(Message message) {

    try {       
        TextMessage textMessage         =   (TextMessage) message;
        String stringProperty = textMessage.getStringProperty("evnt_code");
        } catch (JMSException ex) {
        LOGGER.error("Error getting property: " + propertyName + " error: " + ex.getMessage());
    }
}

我的价值是null。即使&#39; evnt_code&#39;属性存在于标记内和短信内。

对此非常感谢。提前谢谢。

2 个答案:

答案 0 :(得分:0)

发布的消息(在EMS上发布的有效负载)不是正确的XML。 您可以使用Gems在EMS队列或主题中发布实际的消息有效负载吗?

如果消息不正确,也就是消息的有效负载不合适xml,解析器将永远不会找到子元素,并且在上面的情况下将返回null,属性列表是“textMessage”的子元素,但它是不清楚这个xml文档的根目录是什么。

答案 1 :(得分:0)

您所要做的就是在Websphere MQ服务器上的队列属性中将Target Client设置为JMS