我正在使用ActiveMQ(使用Spring)将消息发送到远程OSGi-Container。 这非常好,但有一个问题。
我有两个实现Serializable的类。一个类是另一个类的类成员,如下所示:
public class Member implements Serializble {
private int someValue;
private static final long serialVersionUID = -4329617004242031635L;
... }
public class Parent implements Serializable {
private static final long serialVersionUID = -667242031635L;
private double otherValue;
private Member;
}
因此,当发送Parent实例时,Parent的成员为空。
希望你明白我的问题是什么:)
编辑:有趣的问题:我的类中有一个java.util.date,它被正确序列化,但这是唯一的,所有双打等都是null
答案 0 :(得分:10)
如果对象是一个选项,你可能会选择这样的东西
制片人方:
SomeObject someObject = new SomeObject();
ObjectMessage objectMessage = session.createObjectMessage();
objectMessage.setObject(someObject);
producer.send(objectMessage);
消费者方:
private class MessageConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
logger.debug("onMessage() " + message);
if (message instanceof ObjectMessage) {
ObjectMessage objectMessage = (ObjectMessage) message;
SomeObject someObject = (SomeObject)objectMessage.getObject();
}
}
}
答案 1 :(得分:2)
字节消息中的序列化对象有点难以处理。
我会像Aksel Willgert建议的那样使用对象消息,或者简单地将它带到更多loosley耦合格式,例如序列化XML。我的快速解决方案是使用XStream以更松散耦合的方式进出XML,这是一个快速指南:XStream
更新,以及此处的一些代码(需要将xstream-.jar添加到您的项目中)
// for all, instanciate XStream
XStream xstream = new XStream(new StaxDriver());
// Producer side:
TextMessage message = session.createTextMessage(xstream.toXML(mp));
producer.send(message);
// consumer side:
TextMessage tmsg = (TextMessage)msg;
Parent par = (Parent)xstream.fromXML(tmsg.getText());
par.getMember() // etc should work just fine.