2012-04-24 85 views
1

我發送簡單的java bean過JMS到另一個Java應用程序的Java應用程序。通過Tibco的JMS發送序列化對象將引發反序列化失敗的錯誤

這項工作完全沒ActiveMQ的,但是當我切換到Tibco的JMS經紀人引發錯誤的接收應用程序。 bean實現了序列化接口,並且兩個應用程序從包含bean的類相同的罐子運行。

我開始使用TIBCO JMS tibjmsd.exe。版本是4.1.0。

從發送Java客戶端內的簡單的檢查產生下面的錯誤:

代碼:

.. 
.... 
MyBean bean = new MyBean(1,」Test」); 
final ObjectMessage msg = jmssession.createObjectMessage(bean); 
    try { 
     msg.getObject(); 
    } catch (Exception e) { 
     LOG.error("Problem with storing bean", e); 
    } 
.... 
.. 

從上面的代碼的錯誤消息:

javax.jms.MessageFormatException: Deserialization failed: [Ljava.lang.String; 
    at com.tibco.tibjms.TibjmsObjectMessage.getObject(TibjmsObjectMessage.java:199) 

相同的代碼工作沒有錯誤運行ActiveMQ 有什麼我可以做或檢查?

+0

發送應用程序使用JMS – ManojGumber 2012-04-24 12:07:17

+0

的執行發送應用程序使用客戶端的Tibco罐。連接是通過一個通用的JMS實現,即Context.lookup連接工廠,得到連接等 – Ben 2012-04-24 15:14:14

+0

進一步的研究發現,當JavaBean的具有基本數組錯誤「反序列化」的發生做出(即字符串[])。更改爲列表修復了問題,但是這確實是這種情況,Tibco無法接受包含原始陣列的對象? – Ben 2012-04-24 16:49:09

回答

1

首先,你需要找出linkedExceptionJMSException

catch(MessageFormatException mfe) 
{ 
     mfe.printStackTrace(); // what you told us 
     mfe.getLinkedException().printStackTrace(); // the interesting one 
} 

我有這將關係到他們TibjmsObjectMessage$CLOIS.resolveClass無法正確解析類名的本地陣列的感覺。

看來,一些有麻煩有,即使在他們的信息簡單longhttps://jira.springsource.org/browse/SPR-1231?page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel

以及建議的解決方案,將工作,是給自己的序列化對象,並使用javax.jms.BytesMessage