0

我正在使用 ActiveMQ(带有 Spring)将消息发送到远程 OSGi-Container。这工作得很好,但有一个问题。

我有两个实现可序列化的类。一个类是另一个类的类成员,如下所示:

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 的 Member 为 null。

希望你明白我的问题是什么:)

编辑:有趣的问题:我的班级中有一个 java.util.date 被正确序列化,但这是唯一的,所有双打等都是空的

4

2 回答 2

11

如果对象是一个选项,你可能会选择这样的东西

制作方:

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();
        }
    }
}
于 2012-11-09T15:27:15.810 回答
2

字节消息中的序列化对象有点难以处理。

正如 Aksel Willgert 建议的那样,我会使用对象消息,或者只是将其采用更松散耦合的格式,例如序列化 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.
于 2012-11-09T14:57:47.873 回答