I upgraded a project from Java 11/Spring Boot 2.7.9 to Java 17/Spring Boot 3.1.3. The sender still can send an object to a RabbitMQ, but the listener throws a Cannot convert exception during message parsing (Java 11/Spring Boot 2.7.9 did not have this object conversion issue). JsonMessageConverter can solve the problem but I have to use object conversion now. How to fix that the consumer module fails to convert the object generated from the producer module?
Producer Module
rabbitTemplate.convertAndSend("EXCHANGE", "PAC", new ca.open.pac.models.ScannerPub("a", "b"));Producer and Consumer share the object in the common module
package ca.open.pac.models; @Data @NoArgsConstructor @AllArgsConstructor public class ScannerPub implements Serializable { private String filePath; private String dateTime; }
Consumer
@RabbitListener(queues = "${pac.pac-queue}") public void receivePACMessage(@Payload ca.bc.gov.open.pac.models.ScannerPub message) throws IOException { ... }
Consumer Lister Message Convert Exception:
Endpoint handler details:
Method [public void ca.pac.open.jag.pac.transformer.services.QueueListenerService.receivePACMessage(ca.open.pac.models.ScannerPub) throws java.io.IOException]
Bean [ca.pac.open.jag.pac.transformer.services.QueueListenerService@4dce5095]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:281)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandlerAndProcessResult(MessagingMessageListenerAdapter.java:224)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:149)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1662)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1581)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1569)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:1560)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListenerAndHandleException(AbstractMessageListenerContainer.java:1505)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.lambda$executeListener$8(AbstractMessageListenerContainer.java:1483)
at io.micrometer.observation.Observation.observe(Observation.java:499)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1483)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:994)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:941)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.mainLoop(SimpleMessageListenerContainer.java:1325)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1227)
at java.base/java.lang.Thread.run(Thread.java:833)
**Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [ca.open.pac.models.ScannerPub] to [ca.open.pac.models.ScannerPub] for GenericMessage [payload=ScannerPub(filePath=a, dateTime=b), headers={amqp_receivedDeliveryMode=PERSISTENT, amqp_receivedRoutingKey=PAC, amqp_receivedExchange=EXCHANGE, amqp_deliveryTag=1, amqp_consumerQueue=pac_queue, amqp_redelivered=false, id=7cf595af-4b92-95b7-8ca1-81ddd99083e5, amqp_consumerTag=amq.ctag-W4k9qOJAAo_FHYSaW6FYIQ, amqp_lastInBatch=false, contentType=application/x-java-serialized-object, timestamp=1711318782296}]**
at org.springframework.messaging.handler.annotation.support.PayloadMethodArgumentResolver.resolveArgument(PayloadMethodArgumentResolver.java:151)
at org.springframework.amqp.rabbit.listener.adapter.AmqpMessageHandlerMethodFactory$OptionalEmptyAwarePayloadArgumentResolver.resolveArgument(AmqpMessageHandlerMethodFactory.java:99)
at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:118)
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:147)
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:115)
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:75)
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:277)
... 15 common frames omitted