jakarta.jms.JMSException:无法从内容构建正文。可序列化的类不可用于代理

问题描述 投票:0回答:1

我在 Spring Boot 应用程序中遇到一个问题,无法显示

ObjectMessage
主体。我收到的错误消息是:

jakarta.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException:

代码涉及发送和接收JMS消息。您能否帮助我确定根本原因并提供解决此序列化问题的解决方案?

这是代码片段:

public void send(Test test) {
    try {
        log.info("Sending Message with JMSCorrelationID: {}", test);
        ObjectMessage message = jmsTemplate.getConnectionFactory().createContext().createObjectMessage();
        message.setObject(test);
        jmsTemplate.convertAndSend(destinationName, message);
    } catch (Exception e) {
        throw new RuntimeException("Cannot send message to the Queue");
    }
}

@JmsListener(destination = "yourQueueName")
public void receiveMessage(Message message) {
    try {
        ObjectMessage objectMessage = (ObjectMessage) message;
        log.info("Received Message: " + objectMessage.getObject());
    } catch (Exception e) {
        log.error("Received Exception: " + e);
    }
}

感谢您帮助解决此问题。

java jms spring-jms
1个回答
1
投票

当使用 ObjectMessage 序列化和反序列化对象时,该类需要位于发送和接收应用程序的类路径上。我一般来说,您的项目需要在接收端包含一个通用 Jar,其中包含要传输的类才能正常工作。

ObjectMessage 在安全漏洞方面有相当多的过去,应该尽可能避免,因为许多代理对您可以在没有专门配置的情况下发送的类型进行限制,您可能需要考虑在 TextMessage 中发送 JSON 等有效负载。

© www.soinside.com 2019 - 2024. All rights reserved.