Je suis un peu rouillé avec Python mais j'ai besoin de configurer un appel SOAP avec le client zeep. J'ai réussi à appeler quelques méthodes en passant seulement un objet du dictionnaire mais je n'ai pas de chance en définissant cette partie et je ne suis pas sûr que ce soit possible avec cette technique.Module client Python Zeep SOAP - impossible de définir des attributs pour un élément
Ceci est la partie de l'enveloppe que j'ai du mal avec:
<xs:complexType name="setupParameter">
<xs:sequence />
<xs:attribute name="key" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
qui est intégré à l'intérieur:
<xs:complexType name="transportSettings">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="setupParameter" type="tns:setupParameter" />
</xs:sequence>
</xs:complexType>
J'ai essayé passer cette params comme ceci:
'transportSettings': {
[
{'setupParameter': {'key': 'key1', 'value': 'val1'}},
{'setupParameter': {'key': 'key2', 'value': 'val2'}}
]
}
à l'intérieur de l'enveloppe mais il semble que cela ne fonctionne pas. Étant donné que la méthode SOAP n'a pas une grande validation, elle crée deux éléments de type setupParameter
mais les deux valeurs key
et value
sont manquantes.
Poussez un peu de lumière sur ceci pour moi, s'il vous plaît.
Edit1
Ceci est la sortie de SoapUI (partie de la demande) que je suis en train de répliquer:
<transportSettings>
<!--Zero or more repetitions:-->
<setupParameter key="?" value="?"/>
</transportSettings>
Edit2
Alors, je l'ai ajouté un plugin pour zeep client (comme décrit dans leur documentation) qui imprime les demandes et les réponses SOAP et c'est la demande:
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:provisionService xmlns:ns0="http://ntc.nms.slm.hub.provisioning">
<service>
<vn>test</vn>
<serviceClass>Satellite Internet Access - 3100 Forward</serviceClass>
<linkType>MULTIPLE_ACCESS</linkType>
<channelCarrier>false</channelCarrier>
<transportSettings>
<setupParameter key="" value=""/>
</transportSettings>
<multicastRequired>false</multicastRequired>
<linkTopology>POINT_TO_POINT</linkTopology>
<serviceGuiOptions>
<enableBooking>true</enableBooking>
<enableUnManagedTransmitter>false</enableUnManagedTransmitter>
<enableCustomSetupParameters>true</enableCustomSetupParameters>
</serviceGuiOptions>
<qosParameters>
<bestEffortPirFixed>0</bestEffortPirFixed>
<bestEffortPirPct>0</bestEffortPirPct>
<criticalData1CirFixed>0</criticalData1CirFixed>
<criticalData1CirPct>0</criticalData1CirPct>
<criticalData1PirFixed>0</criticalData1PirFixed>
<criticalData1PirPct>0</criticalData1PirPct>
<criticalData2CirFixed>0</criticalData2CirFixed>
<criticalData2CirPct>0</criticalData2CirPct>
<criticalData2PirFixed>0</criticalData2PirFixed>
<criticalData2PirPct>0</criticalData2PirPct>
<criticalData3CirFixed>0</criticalData3CirFixed>
<criticalData3CirPct>0</criticalData3CirPct>
<criticalData3PirFixed>0</criticalData3PirFixed>
<criticalData3PirPct>0</criticalData3PirPct>
<realTime1CirFixed>6000</realTime1CirFixed>
<realTime1CirPct>0</realTime1CirPct>
<realTime2CirFixed>0</realTime2CirFixed>
<realTime2CirPct>0</realTime2CirPct>
<realTime3CirFixed>0</realTime3CirFixed>
<realTime3CirPct>80</realTime3CirPct>
</qosParameters>
</service>
</ns0:provisionService>
</soap-env:Body>
</soap-env:Envelope>
qui est créé à partir de ce dictionnaire d'entrée (en passant comme celui-ci - client.service.serviceName(inputDict)
):
{
'serviceClass': '${serviceName}',
'vn': '${testVnName}',
'linkType': 'MULTIPLE_ACCESS',
'linkTopology': 'POINT_TO_POINT',
'serviceGuiOptions': {
'enableBooking': 1,
'enableUnManagedTransmitter': 0,
'enableCustomSetupParameters': 1
},
'multicastRequired': 0,
'channelCarrier': 0,
'qosParameters': {
'realTime1CirFixed': 6000,
'realTime1CirPct': 0,
'realTime2CirFixed': 0,
'realTime2CirPct': 0,
'realTime3CirFixed': 0,
'realTime3CirPct': 80,
'criticalData1CirFixed': 0,
'criticalData1CirPct': 0,
'criticalData1PirFixed': 0,
'criticalData1PirPct': 0,
'criticalData2CirFixed': 0,
'criticalData2CirPct': 0,
'criticalData2PirFixed': 0,
'criticalData2PirPct': 0,
'criticalData3CirFixed': 0,
'criticalData3CirPct': 0,
'criticalData3PirFixed': 0,
'criticalData3PirPct': 0,
'bestEffortPirFixed': 0,
'bestEffortPirPct': 0
},
'transportSettings': [
{'setupParameter': {'key': 'forwardGateway', 'value': 'dialog'}},
{'setupParameter': {'key': 'referenceServiceProfileDomainName', 'value': 'hno'}}
]
}
Et ce que je veux est (juste la partie problématique):
<transportSettings>
<setupParameter key="key1" value="val1"/>
<setupParameter key="key2" value="val2"/>
<setupParameter key="key3" value="val3"/>
</transportSettings>