Try PubSub+

Spring cloud stream Message Type Conversion Issue

as63010as63010 Member Posts: 14

Hi Team,

We get the type casting 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"


Below is the code used in the non spring cloud stream service which is type casting to text message which sent by spring cloud stream service.


Do we need to type cast to BytesMessage and use getData API and convert to String?


  • AaronAaron Member, Moderator, Employee Posts: 285 Solace Employee
    edited September 30 #2

    HI @as63010 ..! Yeah, that's exactly right. The Spring Cloud Stream binder supports all of the standard formats of a Solace message (bytes, text, map, stream), and so your receiving app should do some checks:

    if (message instanceof TextMessage) {
      String payload = ((TextMessage)message).getText();
      // work with that
    } else if (message instanceof BytesMessage) {
      byte[] payload = ((BytesMessage)messsage).getData();
      // work with bytes.
      // if you know it's a UTF-8 string, you can do something else like:
      //   String payload = new String(((BytesMessage)messsage).getData(),Charset.forName("UTF-8"));
    } else ... 

    And a tip, because lots of people hit this problem: don't use getBytes() as that is a legacy leftover method for retrieving the XML Content portion of the message, which is disused. BytesMessage is getData(). Weird, I know.

Sign In or Register to comment.