Search code examples
python-3.xactivemq-classicstomp

How to send XML message from Python Client to a Spring boot microservice


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.


Solution

  • 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.