Python & WSDL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 241683

Topicstarter
Ik heb een probleem met het praten met mijn soap-server met python.

Ik probeer al een tijd key, value pairs te krijgen in python alleen lukt dit niet.

Wanneer ik met php bepaalde functies aanroep krijg ik deze output
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="link_2_wsdl" xmlns:ns3="http://xml.apache.org/xml-soap" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
        <ns1:testFunction>
                <tns:StringArray SOAP-ENC:arrayType="xsd:string[2]" xsi:type="ns2:StringArray">
                        <item xsi:type="xsd:string">user</item>
                        <item xsi:type="xsd:string">pass</item>
                </tns:StringArray>
               
                <xsd:anyType xsi:type="ns3:Map">
                        <item>
                                <key xsi:type="xsd:string">info</key>
                                <value xsi:type="xsd:int">1</value>
                        </item>
                </xsd:anyType>
        </ns1:testFunction>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Hierbij roep ik de functie op deze manier aan:

PHP:
1
$client->testFunction(array('user', 'pass'), array('info' => 1));


En dit komt prima over.
Alleen wanneer ik python gebruik en daar een 'dictionary' gebruik krijg ik andere output

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns3="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:xmethods-delayed-quotes" xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="link2_wsdl" xmlns:ns5="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
   <SOAP-ENV:Header/>
   <ns2:Body>
      <ns1:testFunction>
         <tns:StringArray xsi:type="ns4:StringArray">
            <value xsi:type="ns3:string">user</value>
            <value xsi:type="ns3:string">pass</value>
         </tns:StringArray>
         <xsd:anyType xsi:type="ns0:xsd:anyType">
            <info xsi:type="ns3:int">1</info>
         </xsd:anyType>
      </ns1:testFunction>
   </ns2:Body>
</SOAP-ENV:Envelope>


Python:
1
2
3
4
5
login = c.factory.create("StringArray")
login.value = ['user', 'pass']

x = {'info' : 1}
client.service.testFunction(login, x)


Ik probeer met python al een tijdje een map aan te maken zodat er op de manier van php een soap-envelope verstuurd kan worden, alleen ik krijg het maar niet voor elkaar. 8)7

Ik heb in de wsdl de StringArray al wel gebruikt en deze werkt goed, alleen een map aanmaken lukt niet niet.


De server is geschreven in php. Het connecten met de soap-server doe ik met suds