python 3 - zeep - soap - «Значение элемента из пространства имен xxx не может иметь дочернее содержимое для десериализации как объекта» - PullRequest
0 голосов
/ 24 октября 2019

у меня есть этот метод на моем wsdl

<xs:element name="createDocument">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="repositoryId" nillable="true" type="xs:string"/>
<xs:element xmlns:q7="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="properties" nillable="true" type="q7:ArrayOfKeyValueOfstringanyType"/>
<xs:element xmlns:q8="http://docs.oasis-open.org/ns/cmis/core/200908/" minOccurs="0" name="contentStream" nillable="true" type="q8:ContentStream"/>
<xs:element xmlns:q9="http://docs.oasis-open.org/ns/cmis/core/200908/" minOccurs="0" name="versioningState" type="q9:VersioningState"/>
<xs:element xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="policies" nillable="true" type="q10:ArrayOfstring"/>
</xs:sequence>
</xs:complexType>
</xs:element>

мне нужно вызвать библиотеку python3 zeep.

это то, что я написал


def test_createDocument():
    c_stream = file_to_b64bytes("assets/pdv/packagePdV.zip")
    c_length = len(c_stream)

    answer = client.service.createDocument(
        repositoryId="1",
        properties=[
            {
                "KeyValueOfstringanyType": {
                    "Key": "PdV_VerificaFirmaFiles",
                    "Value": False
                }
            },
            {
                "KeyValueOfstringanyType": {
                    "Key": "Firma_OggettiProduttore",
                    "Value": False
                }
            }

        ],
        contentStream={
            "filename": "packagePdV.zip",
            "length": c_length,
            "stream": c_stream
        }
    )

    print(answer)

но яполучено исключение

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

есть предложения?

1 Ответ

0 голосов
/ 28 октября 2019

, чтобы решить проблему, я изменил библиотеку с zeep на https://suds -py3.readthedocs.io / en / latest / , потому что это позволяет изменить сообщение XML перед отправкой через плагин.

Я также пытался использовать доктора, чтобы добавить пространство имен безуспешно,

это код

class FixTypes(MessagePlugin):
    def marshalled(self, context):
        context.envelope.getChild('Body').getChild('createDocument').getChild('properties')[0].getChild('Value').set('xmlns:c','http://www.w3.org/2001/XMLSchema')
        context.envelope.getChild('Body').getChild('createDocument').getChild('properties')[0].getChild('Value').set('i:type','c:boolean')
        context.envelope.getChild('Body').getChild('createDocument').getChild('properties')[1].getChild('Value').set('xmlns:c','http://www.w3.org/2001/XMLSchema')
        context.envelope.getChild('Body').getChild('createDocument').getChild('properties')[1].getChild('Value').set('i:type','c:boolean')
        context.envelope.getChild('Body').getChild('createDocument').getChild('properties').set('xmlns:i','http://www.w3.org/2001/XMLSchema-instance')

client = Client("", username="", password="", plugins=[FixTypes()])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...