如何将XML消息从Python客户端发送到Spring引导微服务

时间:2018-11-20 05:29:26

标签: python-3.x activemq stomp

我有一个使用“ stomp.py”库的python客户端,用于将XML有效负载发送到Spring Boot微服务,该服务具有反序列化JMS消息的实现。

我有一个简单的python类

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()

当我发送以下有效载荷时

<?xml version="1.0" encoding="utf-8"?>
<line timestamp="2018-03-14T14:03:11+0000" id="866381">
    <total/>
</line>

到Spring boot micro服务时出现错误

threw exception; nested exception is java.lang.ClassCastException: 
org.apache.activemq.command.ActiveMQBytesMessage cannot be cast to 
org.apache.activemq.command.ActiveMQTextMessage. 

我了解上述异常,但是我无法在python客户端中设置正确的内容类型,标头,因此不会发生此异常。

我尝试了一些变体,但徒劳无功。 有人可以阐明我需要在客户端中设置内容类型,标题的情况吗? 预先感谢。

1 个答案:

答案 0 :(得分:0)

我已经解决了该问题,除了对现有代码进行了简单添加之外,没有做任何更改。就像

一样简单
conn = stomp.StompConnection12(auto_content_length=False).

该信息有点隐藏,位于stomp协议文档中。 但是,如果有人偶然遇到与我类似的问题,以上代码可以解决我的问题。