JMS ObjectMessage类路径

时间:2014-12-23 16:07:21

标签: java java-ee jms

我试图用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类,那么它就会运行。但我认为我无法成为真正的解决方案。

有更好的解决方案吗?

1 个答案:

答案 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);