删除JMS消息属性

sla*_*iez 2 java jms tibco-ems

我正在编写一个Java批处理,它是从队列(Oracle AQ)侦听消息并将它们发送到另一个队列(Tibco EMS),在那里它们由Tibco进程(BW)处理.

问题是Oracle AQ驱动程序会自动向消息添加一些属性(JMSXGroupID,JMSXGroupSeq),这些属性在由Tibco进程处理时会导致错误,因为它们具有错误值:JMSXGroupSeq应该是int但是设置为null.尝试解析消息属性时,Tibco出错了...

所以我想从所有消息中只删除这两个属性,但似乎jms api只提供了clearProperties()方法,但没有单个属性remove方法(我使用的是javax.jms.Message接口).

现在,我可以看到两个解决方案:

  1. 为这两个属性设置正确的值,因为我假设他们不会被Tibco进一步使用

  2. 读取所有属性并重建消息,而不会导致问题.但这种做法非常难看......

有没有人有其他解决方案?

sla*_*iez 10

无法编辑/清除某些属性.我们需要调用此处所述的clearProperties方法来获取写访问权限:

生成(发送)消息后,其属性将变为只读; 属性无法更改.虽然消费者可以使用属性访问器方法(getProperty())读取属性,但是他们无法使用任何mutator方法(setProperty())修改属性.如果使用者尝试设置属性,mutator方法将抛出javax.jms.MessageNotWriteableException.

收到消息后,可以更改其属性的唯一方法是使用clearProperties()方法清除所有属性.这将从邮件中删除所有属性,以便添加新邮件.发送邮件后,无法修改或删除单个属性.