Java 在 Python 中等效于使用 wsdl 的映射适配器

Java Map Adapter Equivalent in Python to use wsdl

我需要解决另一个程序的 Web 服务接口。 API 以 wsdl 格式提供,我已经通过 zeep 实现了集成。 API 的一个功能是强制性的,它需要来自 Java 的 MapAdapter 作为传递参数(在 XML 文档“值”中)。我自己的程序是用Python写的。有没有人遇到同样的问题并有解决方案?

编辑:XML API 函数的文档:

<soapenv:Envelope >
   <soapenv:Header/>
   <soapenv:Body>
      <v23:write>
         <connection>
             <handle>?</handle>
         </connection>
         <channel>?</channel>
         <values>
            <!--Zero or more repetitions:-->
            <entries>
               <key>?</key>
               <value>?</value>
            </entries>
         <values>
      </v23:write>
   </soapenv:Body>
</soapenv:Envelope>

除非 SOAP web 服务真的写得很糟糕,否则您无需担心任何事情 Java,即使服务是用 Java 编写的。因此,Web 服务方法可能不需要 Java MapAdapter 作为参数,您也不需要查找 Python 等价物。

您正在使用接收 XML 请求的 SOAP Web 服务,并且您已经有一个 WSDL 文件。那应该告诉您需要发送的 XML 的结构,包含哪些元素和哪些类型。 Zeep 读取您传入的 WSDL,并允许您像 Python 函数一样调用 SOAP Web 服务并发送 Python 数据。

最有可能发生的情况是您发送的一些 XML 消息不完全是 Web 服务所期望的,并且该服务在处理它方面做得不好(您说 API 虽然没有数据写入 CAN-Bus,但它自己发送肯定响应。

我建议您从等式中删除 Python 代码并使用 SoapUI 对服务调用进行故障排除。将 WSDL 提供给 SoapUI 并使用它为您正在调用的特定 Web 服务方法生成请求示例。填写请求的所有必需详细信息并使用 SoapUI 进行调用,直到您看到服务的预期结果。

完成后,使用 zeep 编写 Python 代码,以从您的代码中获取发送到服务的相同请求。您可以 log the messages zeep sends 看看您这样做时发生了什么。

希望这有用。我只能提供一个通用的答案,因为你没有在你的问题中提供很多细节。将 WSDL 或 link 发布到 Web 服务文档将有助于弄清楚这个神秘的 MapAdapter 参数是什么。