Spring cloud stream Message Type Conversion Issue

as63010 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?


  • Aaron
    Aaron Member, Administrator, Moderator, Employee Posts: 541 admin
    edited September 2021 #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.