在使用Jms(版本5.14.5,在5.12.0版本之下没有此问题)jmsQueueTemplate.convertAndSend(JMS_QUEUE_NAME, messageT) 发送消息时,在ObjectMessage放入自己定义的对象报错:
javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class com.sykj.why.mongo.document.entity.MessageT! This class is not trusted to be serialized as ObjectMessage payload. Please take a look at http://activemq.apache.org/objectmessage.html for more information on how to configure trusted classes.
看日志可知因为自己的类不被信任,还给出了解决问题的文档:http://activemq.apache.org/objectmessage.html
官网给出了很多种解决方案,根据自己的项目选择这种,注册一下自己定义消息类的包就可以了:
/**
* 注册activeMQ连接工厂
*
* @return
*/
@Bean
public ConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(JMS_QUEUE_NAME);
connectionFactory.setBrokerURL(JMS_BROKER_URL);
connectionFactory.setUserName(JMS_ACTIVEMQ_USERNAME);
connectionFactory.setPassword(JMS_QUEUE_PASSWORD);
// 添加信任自定义消息类所在包
connectionFactory.setTrustedPackages(new ArrayList<>(Arrays.asList(new String[]{MessageT.class.getPackage().getName()})));
return connectionFactory;
}