1

我有一个 java 应用程序,它通过 JMS 将一个简单的 java bean 发送到另一个 java 应用程序。

这完全可以正常工作 ActiveMQ,但是当我切换到 Tibco JMS Broker 时,接收应用程序会引发错误。bean 实现了Serializable接口,并且两个应用程序都从包含 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 时相同的代码可以正常工作有什么我可以做或检查的吗?

4

1 回答 1

1

首先,你需要找出linkedException那个JMSException

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

我觉得这与他们TibjmsObjectMessage$CLOIS.resolveClass无法正确解析原生数组的类名有关。

似乎有些人很难在他们的信息中包含一个简单long的信息: https ://jira.springsource.org/browse/SPR-1231?page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel

一个可行的建议解决方案是自己序列化对象并使用javax.jms.BytesMessage.

于 2012-04-25T09:40:44.210 回答