我有一个 java 应用程序,它通过 JMS 向另一个 java 应用程序发送一个简单的 java bean。
ActiveMQ 工作完全正常,但是当我切换到 Tibco JMS Broker 时,接收应用程序会抛出错误。该 bean 实现了 Serialized 接口(interface),并且两个应用程序都从包含该 bean 类的同一个 jar 中运行。
我使用 tibjmsd.exe 启动 Tibco JMS。版本是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 时不会出错 有什么我可以做或检查的吗?
最佳答案
首先,您需要找出该JMSException
的linkedException
catch(MessageFormatException mfe)
{
mfe.printStackTrace(); // what you told us
mfe.getLinkedException().printStackTrace(); // the interesting one
}
我感觉这与他们的 TibjmsObjectMessage$CLOIS.resolveClass
无法正确解析 native 数组的类名有关。
似乎有些人在消息中添加简单的 long
时遇到了麻烦:
https://jira.springsource.org/browse/SPR-1231?page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel
一个可行的建议解决方案是自己序列化对象并使用javax.jms.BytesMessage
。
关于java - 通过 Tibco JMS 发送可序列化对象会引发反序列化失败错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296562/