2014-12-23 67 views
0

我想用Java EE JMS創建一個簡單的例子。JMS ObjectMessage類路徑

如果我嘗試接收ObjectMessage,則需要與發送ObjectMessage的其他項目具有完全相同的路徑(包名)。

例如,我在發件人項目中有一個名爲Person的類,名稱爲「org.queue.sender」,而我的接收器項目中的類「org.queue.receiver」中的類完全相同。

前面已經說過,如果我試圖讓objectmessage我得到以下例外情況:如果我在命名接收器項目中創建一個新的包org.queue.sender.Person

: 拋出java.lang.ClassNotFoundException org.queue.sender並將類Peron傳輸到那裏,然後運行。但我認爲我不可能是真正的解決方案。

有沒有更好的解決方案?

回答

0

JavaDoc

ObjectMessage的object對象用於發送包含在Java編程語言中序列化的對象( 「Java對象」)的消息。它從Message接口繼承,並將包含單個引用的主體添加到對象。只能使用可序列化的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); 
+0

感謝您的回答。我可以訪問發件人項目中的原始類(Person)嗎?所以我不需要製作一個Person類的副本? – user3477008

+0

如果類* Person存在於* BOTH *發送者和接收者(與完全相同的包完全相同的類),那麼您可以使用ObjectMessage並重用Person類。否則,你不能重用,並應爲此使用其他類型的序列化。 – wassgren