在 JMS 消息上添加传出拦截器

Add an outgoing interceptor on JMS messages

我正在做一些项目,我正在构建一些我想使用 JmsTemplate 发送的 JMS 消息,这些消息在 Spring 引导应用程序中通过 JNDI 命名进行初始化。

由于我的经纪人是 IBM MQ Series,我需要更改传出 XML 消息中的编码值,因此我确信经纪人会理解该消息。

我在JmsTemplatesettings 的任何地方都没有看到,或者ConnectionFactory JmsTemplate 需要初始化,在哪里放置一些传出拦截器。

如果有人有任何想法、任何解决方法或一些 framework/library 可以提供帮助,请随时给我一些提示。

谢谢

我假设您正在使用 JAXB 创建 XML 消息。

使用 MarshallingMessageConverter that uses a Jaxb2Marshaller where you can set the marshaller property JAXB_ENCODING 配置您的 JmsTemplate

Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller(); 
Map properties = new HashMap<String, String>();
properties.put(javax.xml.bind.Marshaller.JAXB_ENCODING, "YOUR-ENCODING");
jaxb2Marshaller.setMarshallerProperties(properties);
jaxb2Marshaller.setPackagesToScan("your.package");

JmsTemplate jms = new JmsTemplate(connectionFactory);
jms.setMessageConverter(new MarshallingMessageConverter(jaxb2Marshaller));
...
jms.convertAndSend(yourObject);
...