🎄 Happy Holidays! 🥳
Most of Solace is closed December 24–January 1 so our employees can spend time with their families. We will re-open Thursday, January 2, 2024. Please expect slower response times during this period and open a support ticket for anything needing immediate assistance.
Happy Holidays!
Please note: most of Solace is closed December 25–January 2, and will re-open Tuesday, January 3, 2023.
When i read message from solace queue using a consumer i get some issues while casting it
java.lang.ClassCastException: class com.solacesystems.jcsmp.impl.BytesMessageImpl cannot be cast to class com.solacesystems.jcsmp.TextMessage (com.solacesystems.jcsmp.impl.BytesMessageImpl and com.solacesystems.jcsmp.TextMessage are in unnamed module of loader 'app')
What i get it is SolaceBytesMessage, cant not case to TextMessage, Cant cast To Message, because message.getBody() wont work solace has not implemented it and i cant provide class name arguments.
I need to no how do we get the actual message from this bytes message ?
Comments
-
Hi Team,
We also get the same issue when spring cloud stream reply the message to non spring cloud stream service.
com.solacesystems.jcsmp.impl.BytesMessageImpl cannot be cast to com.solacesystems.jcsmp.TextMessage"
Code:
textMessage.setText(((TextMessage)replyMessage).getText());
Do we need to type cast to BytesMessage and use getData API and convert to String?
0 -
You will not be able to cast from BytesMessage to TextMessage. You will need to grab the bytes from the payload and convert to string.
I would do something like the following:
if (replyMessage instanceof TextMessage) {
textMessage.setText(((TextMessage)replyMessage).getText());
} else if (replyMessage instanceof BytesMessage) {
textMessage.setText(new String(((BytesMessage)replyMessage).getData()));
} else ...
Haven't tested the above so I will put that caveat in. Plus there is likely a more efficient way of doing this, but this is the simplest.
2