Python zeep - в XML-теге отсутствует объявление типа для строкового типа - PullRequest
0 голосов
/ 16 октября 2018

При использовании zeep следующий код:

string_type = client.get_type("xsd:string")
string_expression = string_type("my string value")

Результат таков:

<ns1:Value>my string value</ns1:Value>

На самом деле сериализатор на сервере SOAP ожидает:

<ns1:Value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">my string value</ns1:Value>

Это несоответствие приводит к тому, что сервер SOAP выдает исключение:

zeep.exceptions.Fault: Средство форматирования выдало исключение при попытке десериализации сообщения: при попытке произошла ошибкадля десериализации параметра http://Services.IPWS/. Сообщение InnerException было «Значение элемента из пространства имен http://schemas.datacontract.org/, не может иметь дочернее содержимое, которое должно быть десериализовано как объект.Пожалуйста, используйте XmlNode [] для десериализации этого шаблона XML. '.Пожалуйста, смотрите InnerException для более подробной информации.

Что можно сделать, чтобы Zeep сохранил объявление типа в теге XML?

1 Ответ

0 голосов
/ 16 октября 2018

Я нашел способ заставить zeep сгенерировать следующий тег, который ожидает SOAP-сервер:

value = zeep.xsd.AnyObject(zeep.xsd.String(), "my string value")

В результате:

<ns1:Value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">my string value</ns1:Value>
...