如何使用Spring jmsTemplate接收对象

时间:2016-12-14 22:04:33

标签: java spring-boot activemq

这是我的用例:

  1. RESTFul使用jmsTemplate调用服务在jms队列中创建消息:

    @Autowired
    JmsTemplate jmsTemplate;
    public void sendMessage(final ApplicationContext appContext) {
        jmsTemplate.send(new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
            ObjectMessage objectMessage = session.createObjectMessage(appContext);
            return objectMessage;
        }
    });
    }
    
  2. 其他RESTFul使用以下命令调用服务以从队列中获取消息:

    public ApplicationContext getMessage(final ApplicationContext appContext) {
        Object wObj = jmsTemplate.receive(MessagingConfiguration.NAMED_QUEUE);
        return (ApplicationContext)wObj;
    }
    
  3. 正如您所读,这很简单。我知道我可以使用@JmsListener注释的异步监听器,但我需要同步接收操作。当我尝试这个代码时,我得到一个类强制转换异常(这使得sens)。我的问题:如何将消息(ActiveMQObjectMessage)转换为我的POJO(ApplicationContext)?

    堆栈跟踪:

      

    SEVERE:Servlet [dispatcher]的Servlet.service()在路径[/ ApplicationContextManager]的上下文中引发了异常[请求处理失败;嵌套异常是java.lang.ClassCastException:org.apache.activemq.command.ActiveMQObjectMessage无法转换为带有根本原因的com.tigidou.commons.appcontext.model.ApplicationContext]   java.lang.ClassCastException:org.apache.activemq.command.ActiveMQObjectMessage无法强制转换为com.tigidou.commons.appcontext.model.ApplicationContext

2 个答案:

答案 0 :(得分:0)

您是否尝试将JMS消息转换为POJO(特定于应用程序的对象)如果是,那么以下内容可能是您的帮助。

org.springframework.jms.support.converter包提供了一个MessageConverter抽象,用于在Java对象和JMS消息之间进行转换。

同样的东西: https://stackoverflow.com/a/11863662/7269013

答案 1 :(得分:0)

答案:

基于包含http://activemq.apache.org/objectmessage.html链接的错误消息。我在连接工厂的配置上添加了以下内容(添加可信包):

@Bean
public ActiveMQConnectionFactory connectionFactory(){
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    connectionFactory.setBrokerURL(DEFAULT_BROKER_URL);
    connectionFactory.setTrustedPackages(Arrays.asList("com.tigidou.commons"));
    return connectionFactory;
}