【问题标题】:Object Messages are not getting deserialised in Active MQ对象消息没有在 Activemq 中反序列化
【发布时间】:2019-07-16 20:27:54
【问题描述】:

我在尝试连接到 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 吗?

【问题讨论】:

    标签: java jms activemq


    【解决方案1】:

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

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

    对于客户端,文档说:

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

    还给出了代码示例:

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

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

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

    【讨论】:

    • 这个选项需要在服务器端和客户端都设置吗?我是否需要将包含罪魁祸首类的 Jar 文件放入 ActiveMQ lib 文件夹以将其设置在类路径中?
    • 事实上,我认为它不应该提供给经纪人,只提供给客户。我已经编辑了我的 anwser。
    • 我有 Active MQ 消费者的旧代码。我不能引入“factory.setTrustAllPackages(true);”在那边。有没有其他方法,比如我可以通过的一些配置。
    猜你喜欢
    • 2012-05-16
    • 2012-09-13
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2014-08-21
    • 2016-01-09
    相关资源
    最近更新 更多