【问题标题】:AttributeError: 'lxml.etree.QName' object has no attribute 'resolve'AttributeError:“lxml.etree.QName”对象没有属性“resolve”
【发布时间】:2019-07-10 12:04:42
【问题描述】:

我正在尝试使用 python Zeep 库来玩一些 SOAP API。但是在尝试创建客户端时,我无法弄清楚我的问题是什么。以下是我的代码示例:

from requests import Session
from requests.auth import HTTPBasicAuth
from zeep import Client, Settings
from zeep.cache import SqliteCache
from zeep.transports import Transport

from conf.shared_vars import B2B_PROXY, WSDL_PROXY

session = Session()
session.auth = HTTPBasicAuth(B2B_PROXY['key'], B2B_PROXY['secret'])
wsdl = WSDL_PROXY + "SomeServices.wsdl"

client = Client(
    wsdl=wsdl, 
    transport=Transport(
        session=session, 
        cache=SqliteCache(path='./sqlite.db')))

执行该脚本时,它似乎加载了数据(./sqlite 不为空),但我收到以下错误(回溯):

File "test_zeep.py", line 17, in <module>
    cache=SqliteCache(path='./sqlite.db')))
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/client.py", line 68, in __init__
    self.wsdl = Document(wsdl, self.transport, settings=self.settings)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/wsdl/wsdl.py", line 82, in __init__
    root_definitions = Definition(self, document, self.location)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/wsdl/wsdl.py", line 184, in __init__
    self.parse_types(doc)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/wsdl/wsdl.py", line 316, in parse_types
    self.types.add_documents(schema_nodes, self.location)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 117, in add_documents
    document.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 451, in resolve
    schema.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 451, in resolve
    schema.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 451, in resolve
    schema.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 475, in resolve
    _resolve_dict(self._elements)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/schema.py", line 456, in _resolve_dict
    new = obj.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 301, in resolve
    self.resolve_type()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 298, in resolve_type
    self.type = self.type.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/unresolved.py", line 23, in resolve
    return retval.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/complex.py", line 355, in resolve
    self._resolved = self.extend(self._extension)
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/complex.py", line 401, in extend
    self._element = self._element.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/indicators.py", line 213, in resolve
    self[i] = elm.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 301, in resolve
    self.resolve_type()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 298, in resolve_type
    self.type = self.type.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/unresolved.py", line 23, in resolve
    return retval.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/complex.py", line 361, in resolve
    self._element = self._element.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/indicators.py", line 213, in resolve
    self[i] = elm.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 301, in resolve
    self.resolve_type()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/elements/element.py", line 298, in resolve_type
    self.type = self.type.resolve()
  File "/home/max/Documents/dev/django/nmtoolpy/venv/lib/python3.6/site-packages/zeep/xsd/types/collection.py", line 21, in resolve
    self.item_type = self.item_type.resolve()
AttributeError: 'lxml.etree.QName' object has no attribute 'resolve'

不幸的是,我不知道如何处理这些信息,它涉及什么以及如何克服这个问题,以便我可以正确使用客户端!

感谢您在此主题上为我提供的帮助。

【问题讨论】:

    标签: python python-3.x soap zeep


    【解决方案1】:

    解决这个问题的一种方法是修改zeep/xsd/types/collection.py中涉及的方法:

    def resolve(self):
        try:
            self.item_type = self.item_type.resolve()
        except Exception:
            print("No resolve method for {}".format(self.item_type))
        self.base_class = self.item_type.__class__
        return self
    

    这只是一个修复,绝对不是最好的解决方案,但至少它允许我正确使用 Zeep 客户端!我将在 Zeep GitHub 上填写一个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 2021-04-19
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多