gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:21:03 27 4
gpt4 key购买 nike

目前,我有一个将 JMS ObjectMessage 发送到 ActiveMQ 目标的应用程序。这些消息均派生自类 base

但是,我需要在某些派生类和基类之间添加一个类,因此类 middle 扩展了 base。现在,所有扩展 middle 的消息都无法发送,并出现以下错误:

26 18:53:04.524 [ListenerContainer-1] WARN  - Execution of JMS message listener failed
java.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)

不扩展 middle 的消息仍然有效,只有从 middle 派生的消息现在会导致问题。任何帮助表示赞赏。谢谢!

编辑:发送由 session.createObjectMessage(msg) 处理,其中 msg 的类型为 base

最佳答案

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

尽管如此,JMS ObjectMessage 通常由于这个原因和其他原因而被避免。发送原始字节缓冲区或一些简单的对象表示(例如 XML、JSON 等)通常比发送实际的 Java 对象更简单。此外,Java 序列化和反序列化的速度非常慢,这种模式也会让您的应用程序面临安全漏洞。

关于java - 引入中间基类导致ActiveMQ/JMS NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57664852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com