目前我正在使用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库创建了这个简单的soap消息:
<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构建消息,而不是实际使用webservice。我将在ActiveMQ中的ESB上发布消息。我正在尝试使用PySimpleSoap,但也遇到了不同的问题,所以我没有过去验证WSDL文件。
答案 0 :(得分:0)
你应该谷歌周围的示例消息/示例。我已经链接了一个相关的StackOverflow问题。
带附件的SOAP是一个有许多方法的区域,您需要确保与目标服务保持一致。我建议使用像SOAPUI这样的工具来帮助制作消息有效负载,然后您可以手动测试。一旦格式化了,在Python中构建应该是直截了当的 - 使用现有的Python SOAP库或手动作为最后的手段。
注意:这与ActiveMQ无关,因为ActiveMQ将通过STOMP接受基于文本的有效负载,无论带有或不带附件的SOAP。删除ActiveMQ标记可能是一个好主意,以避免堆栈溢出保管人的愤怒。