为了账号安全,请及时绑定邮箱和手机立即绑定

引入中间基类导致 ActiveMQ/JMS NoClassDefFoundError

引入中间基类导致 ActiveMQ/JMS NoClassDefFoundError

哔哔one 2023-06-21 14:58:53
目前我有一个将 JMS 发送ObjectMessage到 ActiveMQ 目的地的应用程序。这些消息均派生自类base。但是,我需要在某些派生类和基类之间添加一个类,所以 class middleextends base。现在,所有扩展的消息都middle无法发送,出现以下错误:26 18:53:04.524 [ListenerContainer-1] WARN  - Execution of JMS message listener failedjava.lang.NoClassDefFoundError: com/google/protobuf/ProtocolMessageEnum    at java.lang.ClassLoader.defineClass1(Native Method)    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)    at java.lang.ClassLoader.defineClass(ClassLoader.java:615)    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)...Caused by: java.lang.ClassNotFoundException: com.google.protobuf.ProtocolMessageEnum    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)    at java.security.AccessController.doPrivileged(Native Method)    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)不扩展中间的消息仍然有效,只有从middlenow 派生的消息导致问题。任何帮助表示赞赏。谢谢!编辑:发送由session.createObjectMessage(msg)where msgis of type处理base。
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

鉴于您正在发送 JMS,ObjectMessage在我看来,您的客户端在类路径上根本没有正确的类来反序列化消息。确保客户端在其类路径上具有“中间”类和任何新参数类型。至少他们需要com.google.protobuf.ProtocolMessageEnum(如异常所示)。

就其价值而言,JMSObjectMessage通常会因为这个和其他原因而被避免。发送原始字节缓冲区或一些简单的对象表示(例如 XML、JSON 等)而不是实际的 Java 对象通常更简单。此外,Java 序列化和反序列化速度非常慢,这种模式也可能使您的应用程序面临安全漏洞。


查看完整回答
反对 回复 2023-06-21
  • 1 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信