我试图用Java EE JMS创建一个简单的例子。
如果我尝试接收ObjectMessage,我需要与发送ObjectMessage的其他项目具有完全相同的路径(packagename)。
例如,我在我的发件人项目中有一个名为Person的类在包装中" org.queue.sender"和我的接收器项目中的完全相同的类" org.queue.receiver"。
如前所述,如果我尝试获取objectmessage,我会得到以下异常: java.lang.ClassNotFoundException:org.queue.sender.Person
如果我在名为org.queue.sender的接收器项目中创建一个新包并在那里传输Peron类,那么它就会运行。但我认为我无法成为真正的解决方案。
有更好的解决方案吗?
答案 0 :(得分:1)
来自JavaDoc:
ObjectMessage对象用于发送包含Java编程语言中可序列化对象的消息(" Java对象")。它继承自Message接口,并添加一个包含对象的单个引用的主体。只能使用Serializable Java对象。
因此,通过ObjectMessages传递的对象必须是Serializable
,即它必须是同一个类和完全相同的包。
如果您需要更灵活的处理邮件,我建议您使用例如TextMessage
并使用例如序列化/反序列化对象。 JSON或XML。
ObjectMapper mapper = ... ; // Get hold of a Jackson ObjectMapper
session.createTextMessage(mapper.writeValueAsString(myPojo));
// and on the receiving side
TextMessage message = ....; // From the message receiver
MyPojo myPojo = mapper.readValue(message.getText(), MyPojo.class);