【问题标题】:Add an outgoing interceptor on JMS messages在 JMS 消息上添加传出拦截器
【发布时间】:2019-07-11 10:00:06
【问题描述】:

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

由于我的代理是IBM MQ Series,我需要更改传出 XML 消息中的编码值,所以我确信代理会理解该消息。

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

如果有人有一些想法,或者任何解决方法或一些可以提供帮助的框架/库,请随时给我一些提示。

谢谢

【问题讨论】:

  • 你需要更改什么值,为什么不设置为正确的值再发送?
  • 我需要更改文档开头 XML 标记中的encoding 值。而且在消息构建之前我无法访问它
  • MessagePostProcessor 添加到convertAndSend 方法中。

标签: java ibm-mq spring-jms jmstemplate


【解决方案1】:

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

JmsTemplate 配置为使用Jaxb2MarshallerMarshallingMessageConverter,您可以在其中设置marshaller 属性JAXB_ENCODING

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);
...

【讨论】:

  • 感谢您的回答,这符合我的需要。然而,我不想使用 JAXB 来转换我的消息,因为 JMS 模板可以自己完成。
  • 据我所知JmsTemplate 默认使用SimpleMessageConverter。您是如何在不配置 MarshallingMessageConverter 的情况下创建 XML 的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多