我不是经验丰富的 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。