投射 activemqObjectMessage 时发生 ClassCastException

ClassCastException while casting activemqObjectMessage

为什么我不能在这段代码中转换 ActiveMQObjectMessage

public void onMessage(Message message) {
    try {
        ActiveMQObjectMessage mqObjectMessage = (ActiveMQObjectMessage)  message; //i got exception here

        distributor.sendMessage(mqObjectMessage);

    } catch (ClassCastException e) {
        e.printStackTrace();
    }
}

如果传入类型是 TextMessage 类型,那么您当然不能将其转换为 ObjectMessage,因为这不是正确的类型,因为 TextMessage 未实现 ObjectMessage 接口。您需要使用类型检查来确定您正在处理的消息类型并执行正确的转换。

if (message instanceof ObjectMessage) {
} else if message instanceof TextMessage) {
} // etc

您的代码没有任何问题,它正在按预期执行。

  1. 将类型转换的消息分配给 ActiveMQObjectMessage,如果它直接或间接实现了 ObjectMessage
  2. 如果没有捕获到异常并进行适当的日志记录,以便您可以检查消息的来源以进行更正。