java - 即使设置为正确的serialVersionUID,JMS activemq 序列化错误本地类也不兼容
问题描述
我不是经验丰富的 Java 开发人员。我正在尝试使用 JMS 向 ActiveMQ 发送对象消息。该消息无法在 AMQ 中处理,但本地类串行版本与流 classdesc 不匹配。serialVersionUID
我已经在我的序列化类中明确定义了。不知道是什么问题。请指导我。
Exception: javax.jms.JMSException: Failed to build body from bytes. Reason: java.io.InvalidClassException: com.mypkg.PaymentMessage; local class incompatible: stream classdesc serialVersionUID = 10020120822, local class serialVersionUID = 8437680918200181
PaymentMessage.java:
public class PaymentMessage implements Serializable {
private static final long serialVersionUID=10020120822L;
private String mymsg;
public String getPaymentMessage()
{
return mymsg;
}
public void setPaymentMessage(String mymsg)
{
this.mymsg=mymsg;
}
}
jmsSend.java:
public class jmsSend {
public static void main(String args[]) {
String strmsg = "Sample message";
try {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://XXXX");
Connection connection = cf.createConnection();
connection.start();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("myqueue");
MessageProducer producer = session.createProducer(queue);
PaymentMessage msg = new PaymentMessage();
msg.setPaymentMessage(strmsg);
ObjectMessage objmsg = session.createObjectMessage(msg);
producer.send(objmsg);
session.close();
} finally {
if (connection!=null) {
connection.close();
}
}
}
}
编辑 - 上述错误来自验证/处理消息的消费者。该应用程序有自己的 java 客户端来生成将来不支持的测试消息。所以尝试手动创建和发送消息。服务器端 jar 与我的本地 jar 不匹配,但我尝试将包命名为相同并从原始客户端复制 serialVersionUID。
解决方案
此错误消息来自 Java 对象序列化处理。该消息表明消费应用程序使用的类版本与生产者使用的版本不同。
如果 Java 检测到对象的序列化字节的 serialVersionUID 值与当前类路径中命名类的 serialVersionUID 值存在差异,它将引发错误。
潜在原因:
- 消费者类路径中的 jar 重复,并且该类的不良版本首先被解析。
- 消费者类路径中旧版本的 jar
- 本地 Maven 存储库中旧版本的 jar(然后是类路径)
- 远程 Maven 存储库中旧版本的 jar(然后是类路径)
推荐阅读
- mule-studio - Anypoint Studio 7.3 中的 db 连接器的 TestConnection 失败
- html - HTML:如何立即重定向页面?
- visual-studio - 如何使用 .NET Core 根据发布配置文件更新 appsettings.json?
- sql - 查找重复 ID 并添加新的序列 ID
- docker - 在树莓派上安装 Kubernetes 集群
- python-3.x - 使用 Python Pandas 组合 SIMILAR 值行
- python-3.x - SSL 证书验证失败,Install Certificates.command 上的权限错误
- macos - 如何获得帮助工具来访问 macOS 上的文件?
- c# - 如何声明公共静态字节?
- php - PHP FILTER_INPUT 不接收文本输入