这是我的用例:
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;
}
});
}
其他RESTFul使用以下命令调用服务以从队列中获取消息:
public ApplicationContext getMessage(final ApplicationContext appContext) {
Object wObj = jmsTemplate.receive(MessagingConfiguration.NAMED_QUEUE);
return (ApplicationContext)wObj;
}
正如您所读,这很简单。我知道我可以使用@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
答案 0 :(得分:0)
您是否尝试将JMS消息转换为POJO(特定于应用程序的对象)如果是,那么以下内容可能是您的帮助。
org.springframework.jms.support.converter包提供了一个MessageConverter抽象,用于在Java对象和JMS消息之间进行转换。
答案 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;
}