Je suis en train de passer plusieurs instances d'un élément à un serviles Web qui a le wsdl suivantComment passer un paramètre de liste sous la forme de plusieurs éléments nommés par un lien au lieu d'un tableau dans SOAPpy?
<complexType name="OAMCommand">
<sequence>
<element name="m-strName" type="xsd:string" minOccurs="1" maxOccurs="1"/>
<element name="m-argVector" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
Ceci est mon code en python pour le client
oamCmdStruct = SOAPpy.structType()
oamCmdStruct._addItem('m-strName','set-log-level')
oamCmdStruct._addItem('m-argVector', logLevel)
oamCmdStruct._addItem('m-argVector', loggerName)
self.serverConnection.executeCommand({'in-cmd':oamCmdStruct}
Voici la sortie que je reçois de SOAPpy qui est rejetée par le service Web, il crée un tableau pour les éléments 2 m-argVector.
<xsd:in-cmd>
<m-strName xsi:type="xsd:string">set-log-level</m-strName>
<m-argVector SOAP-ENC:arrayType="xsd:string[2]" xsi:type="SOAP-ENC:Array">
<item>WARN_LOG_LEVEL</item>
<item>netborder</item>
</m-argVector>
</xsd:in-cmd>
Voici la sortie qu'un autre client envoie qui fonctionne. Pas de tableau, juste deux éléments qui ont le même nom. Comment puis-je modifier mon code SOAPpy pour générer la sortie xml comme celle ci-dessus?
<SoapOAM:executeCommand>
<in-cmd>
<m-strName>set-log-level</m-strName>
<m-argVector>ERROR_LOG_LEVEL</m-argVector>
<m-argVector>netborder.media</m-argVector>
</in-cmd>
</SoapOAM:executeCommand>
EDIT: J'ai essayé le code suivant en python
oamCmdStruct = SOAPpy.structType(data = {"m-strName":"set-log-level",
"m-argVector": logLevel,
"m-argVector": loggerName})
Mais c'est ce que la sortie XML de SOAPpy ressemblait
<xsd:in-cmd>
<m-strName xsi:type="xsd:string">set-log-level</m-strName>
<m-argVector xsi:type="xsd:string">loggerName</m-argVector>
</xsd:in-cmd>
La valeur logLevel est écrasée par loggerName au lieu de créer 2 entrées ...
Une solution plus élégante serait de mettre la valeur ** typed ** à 0 au lieu de commenter tout ce code ... –