首页 > 解决方案 > 对象消息没有在 Active MQ 中反序列化

问题描述

我在尝试连接到 ActiveMQ 5.15.9 并获取消息时遇到错误。

[2019-07-16 09:25:38.61] ERRORDTL [1563269138610]javax.jms.JMSException:无法从内容构建正文。可序列化类对代理不可用。原因:java.lang.ClassNotFoundException: Forbidden class com.xxx.yyy.zzz.aaa!不信任此类被序列化为 ObjectMessage 有效负载。请查看http://activemq.apache.org/objectmessage.html以获取有关如何配置受信任类的更多信息。在 org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36) 在 org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:213)

只是为了在 ${ACTIVEMQ_HOME}/bin/env 中进行测试,我做了以下条目。

ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.SERIALIZABLE_PACKAGES=*"

并重新启动了 MQ,但仍然出现同样的错误。上面使用的配置是否正确?我是否也需要在客户端使用 setTrustedPackages 或 setTrustAllPackages ?

标签: javajmsactivemq

解决方案


我无法发表评论,所以我在这里发帖。

您是否尝试打印系统属性以确保它是正确的?

对于客户端,文档说:

在客户端,您需要具有相同的机制 [...]

它还给出了一个代码示例:

setTrustAllPackages() 允许您关闭安全检查并信任所有类。它对于测试目的很有用。

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setTrustAllPackages(true);

你应该为生产者和消费者编写这个。


推荐阅读