当前位置: 首页 > 知识库问答 >
问题:

Spring集成序列化MessageHeader对象

胡新
2023-03-14

我有一些服务,一个是用Grails 2.4.2(Spring 4.0.5)实现的,一些是用Spring Web(Spring 4.0.5)实现的,还有一个是用Spring Boot 1.2.1(Spring 4.1.4)实现的。

这些服务通过RabbitMQ和Spring-Integration进行通信。

Grails和Spring Web服务之间的通信很好,但不可能与Spring Boot服务进行通信。因为Spring Boot使用了较新的Spring版本,并且MessageHeader类的串行版本已经更改。

我该怎么做才能避免这个问题呢?

这里有个例外:

Caused by: org.springframework.messaging.MessagingException: Failure occured in AMQP listener while attempting to convert and dispatch Message.; nested exception is org.springframework.amqp.support.converter.MessageConversionException: failed to convert serialized
 Message content
        at org.springframework.integration.amqp.channel.AbstractSubscribableAmqpChannel$DispatchingMessageListener.onMessage(AbstractSubscribableAmqpChannel.java:201) ~[spring-integration-amqp-4.0.2.RELEASE.jar:na]
        at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:693) ~[spring-rabbit-1.3.4.RELEASE.jar:na]
        ... 10 common frames omitted
Caused by: org.springframework.amqp.support.converter.MessageConversionException: failed to convert serialized Message content
        at org.springframework.amqp.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:112) ~[spring-amqp-1.3.4.RELEASE.jar:na]
        at org.springframework.integration.amqp.channel.AbstractSubscribableAmqpChannel$DispatchingMessageListener.onMessage(AbstractSubscribableAmqpChannel.java:176) ~[spring-integration-amqp-4.0.2.RELEASE.jar:na]
        ... 11 common frames omitted
Caused by: java.lang.IllegalArgumentException: Could not deserialize object
        at org.springframework.amqp.utils.SerializationUtils.deserialize(SerializationUtils.java:79) ~[spring-amqp-1.3.4.RELEASE.jar:na]
        at org.springframework.amqp.support.converter.SimpleMessageConverter.fromMessage(SimpleMessageConverter.java:107) ~[spring-amqp-1.3.4.RELEASE.jar:na]
        ... 12 common frames omitted
Caused by: java.io.InvalidClassException: org.springframework.messaging.MessageHeaders; local class incompatible: stream classdesc serialVersionUID = -4615750558355702881, local class serialVersionUID = 7035068984263400920
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617) ~[na:1.7.0_51]
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622) ~[na:1.7.0_51]
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) ~[na:1.7.0_51]
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) ~[na:1.7.0_51]
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350) ~[na:1.7.0_51]
>       at org.springframework.amqp.utils.SerializationUtils.deserialize(SerializationUtils.java:76) ~[spring-amqp-1.3.4.RELEASE.jar:na]

共有1个答案

穆单鹗
2023-03-14

不要序列化整个消息<?>;使用AMQP适配器消息标头映射到AMQP标头,反之亦然。

我不确定这在grails端是如何工作的,但您也需要在那里进行映射。

 类似资料:
  • 我有以下控制器: 使用以下请求对象: 当帖子通过并查看我得到的对象时,有效负载列表中有LinkedHashMap对象,而不是我的DTO类型的对象。 如何让Spring jackson将JSON转换为我的DTO对象。请记住,我计划对其他对象列表重用包装器响应DTO,这就是我使用通用列表(List)的原因。 这是我正在尝试的JSON。

  • 我有一个配置类,它存储在hz IMap 这个配置类是1-st实例成员 P. S成员是两个不同的应用程序的一部分。 此配置作为对象从第一个集群成员推送到IMap 我的目标是在另一个模块中看到这个配置 如何在第二个成员实例中序列化该对象 如果调用 我得到了

  • 本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化        将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化

  • 我已经开始将一个项目从使用Java标准日期迁移到Joda DateTime。 我的项目使用XML序列化将对象保存到XML文件中。在这个特殊的例子中,我有一个Item类,它有一个DateTime属性。 在某个时候,我正在初始化对象,包括像这样的DateTime属性: 我使用XMLEncoder使用辅助类序列化项目: 显然,日期时间被保存在xml中。。。但毫无价值: 显然,它没有保存任何东西,但不,它

  • 我遇到了这个问题,无法使用JDBC使用quartz JobDataMap反序列化对象。使用RAMJobStore的代码也可以正常工作。 我只是创建了一个测试的基本类 然后是石英 在石英行业 我得到的例外是这个 JAVAlang.ClassCastException:com。文克洛瓦斯。石英建筑。无法将测试转换为com。文克洛瓦斯。石英建筑。在com上测试。文克洛瓦斯。石英建筑。建筑升级工作。在or