在 JMS 消息上添加传出拦截器
Add an outgoing interceptor on JMS messages
我正在做一些项目,我正在构建一些我想使用 JmsTemplate
发送的 JMS 消息,这些消息在 Spring 引导应用程序中通过 JNDI 命名进行初始化。
由于我的经纪人是 IBM MQ Series
,我需要更改传出 XML 消息中的编码值,因此我确信经纪人会理解该消息。
我在JmsTemplate
settings 的任何地方都没有看到,或者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);
...
我正在做一些项目,我正在构建一些我想使用 JmsTemplate
发送的 JMS 消息,这些消息在 Spring 引导应用程序中通过 JNDI 命名进行初始化。
由于我的经纪人是 IBM MQ Series
,我需要更改传出 XML 消息中的编码值,因此我确信经纪人会理解该消息。
我在JmsTemplate
settings 的任何地方都没有看到,或者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);
...