【问题标题】:Java Map Adapter Equivalent in Python to use wsdlJava Map Adapter 等效于 Python 中使用 wsdl
【发布时间】:2021-07-27 18:20:54
【问题描述】:

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

编辑:API函数的XML文档:

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

【问题讨论】:

  • 什么意思“需要Java的MapAdapter作为传递参数”?您正在调用需要 XML 消息的 SOAP Web 服务。您所要做的就是向它发送一个结构正确的 XML 请求。您不必在 Python 代码中处理任何 Java。也许编辑您的问题以添加有关它的更多详细信息并明确问题所在。
  • 我正在使用 zeep 来包含 wsdl 文件。通过 zeep 可以访问 API 的方法。所以该方法需要Java类MapAdapter。 API 对 f.e. 没问题。一个 Python 字典,但在 API 后面,它只接受这个类。
  • zeep 允许您使用 Python 代码和 Python 数据调用 Web 服务方法以发送到这些方法。 Zeep 然后将所有这些编组为 XML 格式,并将您的 Python 方法调用转换为对 Web 服务的 SOAP 调用。没有 Java 类。如果服务是用 Java 编写的,则可能在 Web 服务端,但您并不关心这一点,因为客户端从 Python 调用服务。我要求提供更多详细信息,因为您的问题对 SOAP Web 服务的工作方式没有真正意义。
  • Web 服务代码是用Java 编写的,没错。我的问题有点复杂,因为 API 只检查对象是否是可迭代的,所以它发送了一个肯定的响应。在我看来,错误在 API 后面,如果 MapAdapter 接口访问函数,并且这里发生错误,我无法读出。
  • 那么你得到了什么结果?错误信息?一个空的结果?您是如何发现 MapAdapter 问题的?

标签: java python api dictionary soap


【解决方案1】:

除非 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 或 Web 服务文档的链接将有助于弄清楚这个神秘的 MapAdapter 参数是什么。

【讨论】:

  • 很抱歉,我不能也可能不会提供更多信息。我已经使用 SoapUi,如果我在此处正确输入参数,API 会正确发送数据。因此,您绝对正确地假设我将数据错误地传递给 zeep。我将尝试发布该函数的 XML 文档,也许您可​​以再次帮助我。
  • 我解决了这个问题。我只需要提供嵌套的字典。 values = {'values': {'entries': {'key': 'TheKey', 'value': 'TheValue'}}} 通过 SoapUi 检查 XML 以及您对日志的建议对我有帮助。感谢您的支持!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 2010-10-15
  • 2017-03-02
  • 2023-03-26
  • 2016-08-04
  • 1970-01-01
相关资源
最近更新 更多