I've created a very simple value object that contains 1 string and 2 ints.
In the Spring-AMQP Stock example, I do not see any config of the JSON converter that I have not included (my messageListenerAdapter bean is identical).
When I pass this as an argument to convertAndSend, I still get the following error from Jackson. Why would I need to 'add/enable type information' when the Stock example does not? I am using jackson-all-1.6.4.jar and the 12/27 SNAPSHOT build of Spring-AMQP.
Code:
WARN] SimpleMessageListenerContainer - Execution of Rabbit message listener failed, and no ErrorHandler has been set. <org.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content>org.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content
at org.springframework.amqp.support.converter.JsonMessageConverter.fromMessage(JsonMessageConverter.java:118)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.extractMessage(MessageListenerAdapter.java:384)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:332)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:280)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:243)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:222)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:192)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.receiveAndExecute(SimpleMessageListenerContainer.java:388)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:307)
at java.lang.Thread.run(Thread.java:680)
Caused by: org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class rabbit.gateway.MyDataGateway$MyMockObject]: can not instantiate from JSON object (need to add/enable type information?)
at [Source: java.io.StringReader@54a50a00; line: 1, column: 2]
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:160)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:478)
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:350)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1980)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1271)
at org.springframework.amqp.support.converter.JsonMessageConverter.convertBytesToObject(JsonMessageConverter.java:137)
at org.springframework.amqp.support.converter.JsonMessageConverter.fromMessage(JsonMessageConverter.java:109)
... 9 more