我试图让 zeep 打开一个 WSDL,该 WSDL 在名称的开头绑定(bind)了点,并收到 ValueError: Invalid tag name '.USXMLWSSoapBinding' 错误消息。

WSDL 将绑定(bind)名称定义为:

<wsdl:binding name=".USXMLWSSoapBinding" type="impl:USXMLWS">

我可以让它与其他语言和库一起工作,但 python 和 zeep 似乎不同意我的看法:
python -mzeep <wsdl>

或者
import zeep
client = zeep.Client('https://example.com/service.wsdl')

最佳答案

您可以通过 unittest.mock 修补 Zeep 的崩溃行为

from unittest import mock
from zeep import Client

def my_as_qname(value, nsmap, target_namespace=None):
    value = value.strip()

    if '/' in value:  # This is my fix for slash in value
        value = value.replace('/', '-')

    # More stuff that i removed in this snippet


with mock.patch('zeep.utils.as_qname', side_effect=my_as_qname):
   client = Client(wsdl)

就我而言,失败的 WSDL 是法国邮局 « La Poste » 新的 Colissimo 网络服务。
https://ws.colissimo.fr/sls-ws/SlsServiceWS/2.0?wsdl

我想其他人尝试使用 Zeep 也会遇到同样的问题。

关于Python zeep - 绑定(bind)名称以点 (.) 开头时标签名称无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44157873/

10-13 02:43