'Spring Boot JMS MappingJackson2MessageConverter cannot find `_type` field even though it exists
I'm using Spring boot to receive JMS message and cURL to send it.
Here's the Spring config:
@Bean
public MessageConverter jsonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
When I try to send a message, I get:
org.springframework.jms.support.converter.MessageConversionException: Could not find type id property [_type] on message [ID:b5151b422e8a-41371-1526292561432-6:3:1:1:14] from destination [queue://ssg]
My cURL command is:
curl -u 'un:pw' -H '_type: com.me.SSMessage' -d 'body={"_type": "com.me.SSMessage", "url": "https://www.google.com"}' "http://localhost:8161/api/message/ssg?type=queue&clientId=consumerA"
_type
is set, both as a header (I don't think this is right) and as a field in the JSON. Why do I get that error from the Spring app?
Solution 1:[1]
This is more an Activemq/REST question than Spring:
converter.setTypeIdPropertyName("_type");
This sets a JMS Message property, it is not a field in the message. The stuff about message headers is here: https://docs.oracle.com/javaee/7/api/javax/jms/Message.html
The trick is how to do this with the Activemq REST interface (and thus CURL). The answer is to add it as a GET
parameter on the query:
curl -u 'un:pw' -H '_type: com.me.SSMessage' \
-d 'body={"url": "https://www.google.com"}' \
"http://localhost:8161/api/message/ssg? \
type=queue&clientId=consumerA&_type=com.me.SSMessage"
Edit: I can't test it, but I don't think the -H '_type: com.me.SSMessage'
is needed above...
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |