【发布时间】:2017-06-03 01:02:49
【问题描述】:
目前我正在使用 Python 的 STOMP 库 (http://jasonrbriggs.github.io/stomp.py) 来发送和接收存储在 ActiveMQ 实例上的 SOAP 消息。此 ActiveMQ 连接到 WSO2 ESB,该 ESB 已配置为根据内容类型和/或 SoapAction 基本上重新排列不同框中的消息。
我目前正在使用一个 python 软件,并且只能使用某个帐户访问这个 ActiveMQ。我应该使用 stomp.py 向队列发送和接收。我只使用 SOAP 消息成功地做到了这两种方式。我会在 XML 中构建正文并将标题留空。
现在询问问题是使用带附件的 SOAP (SwA),因为附件也是必需的。我知道最终接收这些消息的系统不还没有处理 MTOM,所以我只能发送 SwA 消息。
我已经在标头中提供了带有 application/octet-stream 的内容类型,但我终其一生都无法弄清楚如何将文件本身实际合并到这些消息中。
为了发送消息,我构建了 XML 正文、字典形式的标头并使用以下代码:
conn = self._build_connection()[0]
destination = self.subscription_id.queue_name
# Connect to the server
conn.connect(username=self.env.user.company_id.login_name, password=self.env.user.company_id.password)
# Send the actual message out
conn.send(destination, self.body, headers=self.header)
conn.disconnect()
"_build_connection" 只是为我提供了所需的 ActiveMQ 队列的连接。如果这与答案相关,请告诉我。
我觉得我非常接近一个可行的解决方案,但我只是失败了,所以缺少的链接。 ------------------ 编辑----------------
我发现我现在看错了方向。将附件插入 SOAP 消息是我的问题,而不是将消息发送到 ActiveMQ。我还注意到该消息将是单个文件/对 ActiveMQ 的调用,因此我需要重新表述我的问题。
也就是说,我目前正在尝试弄清楚如何使用 PySimpleSoap 来构建我的消息。成功后会更新。
----------------- EDIT2 ----------------
我的问题的改写。假设我有这个使用 Python 标准 ElementTree 库创建的简单肥皂消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tec="someURLtech">
<soapenv:Header/>
<soapenv:Body>
<tec:SomethingTechnical>
<tec:SomeValue>140</tec:SomeValue>
</SomethingTechnical>
</soapenv:Body>
</soapenv:Envelope>
我想使用 SwA 添加一个附件,我必须确保它以某种方式位于信封内。
我已经找到了this link to another question on the differences between SwA and MTOM,但我只是看不到我应该在哪里指出该文件确实是一个图像(例如),以及在哪里放置实际的 base64 编码数据。注意:我知道如何获得这些,我只是询问如何以 XML 接受的方式定位这些。
询问的原因是目标应用程序 WSDL(很遗憾我不允许共享)确实有附件标签,但没有实际数据标签(如 )或类似的东西。
再一次,我觉得我完全错过了这里的重点,如果有人能解释一下,我将不胜感激。
另外请注意,我只需要根据提供的 WSDL 来制作消息,而不是实际使用 Web 服务。我将在 ActiveMQ 中的 ESB 上发布所述消息。我正在尝试使用 PySimpleSoap,但在那里也遇到了不同的问题,所以我没有通过验证 WSDL 文件。
【问题讨论】:
标签: python soap attachment