I have a python client using "stomp.py" library which I use to send a XML payload to a Spring boot microservice which has the implementation to deserialise JMS messages.
I have a simple python class
class ActiveMqMessageProducer():
def active_mq_props(self):
active_mq_property = PropertyParser.PropertyParser().get_property(property_for='active-mq')
return {'username': active_mq_property['username'], 'password': active_mq_property['password'], 'topic': active_mq_property['topic']}
def active_mq_connection(self):
props = self.active_mq_props()
conn = stomp.StompConnection12()
conn.start()
conn.connect(username=props['username'], passcode=props['password'], wait=True)
return conn
def send_payload(self, payload):
props = self.active_mq_props()
conn = self.active_mq_connection()
conn.send(destination=f'/topic/{props["topic"]}', body=payload)
conn.disconnect()
When I send the below payload
<?xml version="1.0" encoding="utf-8"?>
<line timestamp="2018-03-14T14:03:11+0000" id="866381">
<total/>
</line>
to Spring boot micro service I get an error
threw exception; nested exception is java.lang.ClassCastException:
org.apache.activemq.command.ActiveMQBytesMessage cannot be cast to
org.apache.activemq.command.ActiveMQTextMessage.
I understand the above exception but I am not able to set the correct content-type, headers in the python client so this exception won't happen.
I have tried a few variations but all in vain. Can someone shed some light as to what I need to set the content-type, headers in the client. Thanks in advance.
I have solved the issue and did no change other than a simple addition to my existing code. It was as simple as
conn = stomp.StompConnection12(auto_content_length=False).
The information is kinda hidden and lies within the stomp protocol documentation. But if anyone stumbles with a similar issue as I had, the above piece of code solved my issue.