gpt4 book ai didi

java - ObjectMessage.setObject() 抛出 javax.jms.JMSException 没有明显的原因

转载 作者:行者123 更新时间:2023-12-02 10:36:34 25 4
gpt4 key购买 nike

有一个像这样的自定义对象:

package Messages;

import java.io.Serializable;
import javax.jms.TextMessage;

public class MessageObject implements Serializable{

private static final long serialVersionUID = 1L;
private TextMessage message;
private String state;
private String sender;
private String receiver;

public MessageObject() {

}

public TextMessage getMessage() {
return message;
}

public void setMessage(TextMessage message) {
this.message = message;
}
* the rest of the getters and setters *

}

然后我尝试将包含自定义消息对象的 ObjectMessage 发送到我的 jms 队列:

try {
Context context = new InitialContext();

QueueConnectionFactory factory =
(QueueConnectionFactory)context.lookup("tiwconnectionfactory");
Queue queue = (Queue) context.lookup("tiwqueue");
Connection connection = factory.createConnection();
connection.start();
Session session= connection.createSession(false,
javax.jms.Session.AUTO_ACKNOWLEDGE);

MessageProducer producer = session.createProducer(queue);


MessageObject mymessage = new MessageObject();


ObjectMessage object = session.createObjectMessage();


TextMessage message = session.createTextMessage();
message.setText("Hi");


mymessage.setState("still not read");
mymessage.setMessage(message);
mymessage.setSender("Peter");
mymessage.setReceiver("John");


object.setObject(mymessage);


producer.send(object);

当尝试运行代码时,抛出的异常是:

[2018-11-11T19:20:07.270+0100] [glassfish 5.0] [SEVERE] [] [] [tid: _ThreadID=28 _ThreadName=Thread-9] [timeMillis: 1541960407270] [levelValue: 1000] [[ javax.jms.JMSException:MQJMSRA_DM4001::Exception:ObjectMessage.setObject()object=Messages.MessageObject@d8b66e3:message=com.sun.messaging.jms.ra.DirectTextPacktatcom.sun.messaging.jms.ra.DirectObjectPacket.setObject(DirectObjectPacket.java:218)

那么问题出在哪里呢?我在代码中没有发现任何错误,并且我的对象是可序列化的。

最佳答案

我用谷歌来分析你的错误消息:

[2018-11-11T19:20:07.270+0100] [glassfish 5.0] [SEVERE] [] [] [tid: _ThreadID=28 _ThreadName=Thread-9] [timeMillis: 1541960407270] [levelValue: 1000] 
[[ javax.jms.JMSException:MQJMSRA_DM4001::Exception:ObjectMessage.setObject()
object=Messages.MessageObject@d8b66e3:
message=com.sun.messaging.jms.ra.DirectTextPacket
at com.sun.messaging.jms.ra.DirectObjectPacket.setObject(DirectObjectPacket.java:218)

看起来 TextMessage 对象实际上是 com.sun.messaging.jms.ra.DirectTextPacket 的实例。

但是,要使 MessageObject 可序列化,其所有字段也需要可序列化。由于 DirectTextPacket 不可序列化,因此您的 MessageObject 也不可序列化。

<小时/>

回答“为什么会出现此异常而不是 NotSerializedException”的问题?

这是因为 JMS 将 NotSerializedException 之类的异常包装到它自己的异常中。

<小时/>

我不明白的是:为什么您希望您的 MessageObject 包含包装的 TextMessage?为什么不将文本本身添加到您的 MessageObject 中?

关于java - ObjectMessage.setObject() 抛出 javax.jms.JMSException 没有明显的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53252277/

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