Как я могу использовать дополнительный xsd с python zeep?

Мне нужно реализовать интерфейс SPML, который в конце выполняет запрос SOAP по HTTP(s). У меня есть wsdl для этого, который сводится к этому:

<wsdl:types>
  <schema targetNamespace="http://soapadapter.something" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="receiveRequest" type="xsd:anyType"/>
  </schema>
</wsdl:types>
[...]
<wsdl:operation name="receiveRequest">
 <wsdl:input message="impl:receiveRequestRequest" name="receiveRequestRequest"/>
</wsdl:operation>

Как видите, единственный определенный элемент запроса имеет тип "xsd:anyType". У меня есть отдельный xsd, совсем не связанный в wsdl, который описывает, как должен формироваться запрос.

Я хотел бы использовать Zeep для реализации SOAP-запроса для использования интерфейса. Как я могу сообщить Zeep об этом (локальном) xsd-файле?

Я нашел zeep.xsd.schema.SchemaDocument класс, но не пример его использования где-либо. Может ли кто-нибудь дать мне пример использования, как создать клиент, который использует wsdl и отдельный файл xsd?

0 ответов

Да, вы можете добавить дополнительные схемы в свой клиент zeep следующим образом:

import os
from zeep.loader import load_external
from zeep import Client


XSD_SCHEMA_FILE = "/path/to/your.xsd"
CONTAINER_DIR = os.path.dirname(XSD_SCHEMA_FILE)  # Where to load dependencies if any

client = Client('https://path/to/your.wsdl')
schema_doc = load_external(open(XSD_SCHEMA_FILE, "rb"), None)
doc = client.wsdl.types.create_new_document(schema_doc, f"file://{CONTAINER_DIR}")
doc.resolve()
Другие вопросы по тегам