java - 通过 Tibco JMS 发送可序列化对象会引发反序列化失败错误

标签 java serialization jms tibco

我有一个 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 时不会出错 有什么我可以做或检查的吗?

最佳答案

首先,您需要找出该JMSExceptionlinkedException

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/

相关文章:

oracle - 为什么 OracleAQ 将死订户留在队列中?

java - lombok @Builder 与构造函数

java - 属性 DTO 中格式化日期的符号 Gson

java - Java EE 中 MDB 的管道和过滤器模式

java - 如何将内部没有可序列化字段的java对象序列化为字节数组并反序列化该数组以获得原始对象

使用 Jackson 序列化 JSON 的 Java 类实现

java - 从远程客户端使用 Glassfish JMS

java - 单例类设计问题

java - 在JavaFX中的Initialize方法中使用Scanner

java - JPA 标准 JOIN : what does {oj . ..} 在 SQL 中意味着什么?