The problem with the complex with SOAPpy

I am trying to access the function defined in my WSDL using HP Server Automation, I can get the / etc servers, but I could not extract anything that refers to the server link through SOAPpy.

import SOAPpy from SOAPpy import WSDL from SOAPpy import structType SOAPpy.Config.debug=1 server = WSDL.Proxy('ServerService.wsdl') serverRef = structType(name='self', typed=0) serverRef._addItem('id',SOAPpy.longType(19250001)) print server.getCustAttr(serverRef,key='HPSW_ED_win32_diskspace',useScope=False) The SOAP envelope generated from this code looks like this: *** Outgoing SOAP ****************************************************** <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd2="http://www.w3.org/2000/10/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" > <SOAP-ENV:Body> <ns1:getCustAttr xmlns:ns1="http://server.opsware.com" SOAP-ENC:root="1"> <xsd:self> <id xsi:type="xsd2:long">19250001</id> </xsd:self> <useScope xsi:type="xsd:boolean">False</useScope> <key xsi:type="xsd:string">HPSW_ED_win32_diskspace</key> </ns1:getCustAttr> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

And it should look like this (successfully executed via SOAPUI):

 <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://server.opsware.com"> <soapenv:Header/> <soapenv:Body> <ser:getCustAttr soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <self xsi:type="ser:ServerRef"> <id xsi:type="xsd:long">19250001</id> </self> <key xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HPSW_ED_win32_diskspace</key> <useScope xsi:type="xsd:boolean">False</useScope> </ser:getCustAttr> </soapenv:Body> </soapenv:Envelope> 

I believe the problem is that xsi: type = "ser: ServerRef" is not installed and not quite sure how to do this with SOAPpy ...

+4
source share
1 answer

There are two different types of soap styles ( RPC literal and document literal ), it seems that the mentioned soap server just supports RPC

I saw this problem with juicy and drunk. after some tests and tests, I found the problem. ASP.NET and juicy. you need to create an rpc envelope with an icon, not an alphabetic type of envelope.

just ZSI (Zolera Soap Infrastructure) works with asp.net and complex types.

this command creates a client proxy for you:

 wsdl2py http://terraservice.net/TerraService.asmx?WSDL 

and you can import the generated modules into your code and use web methods.

+4
source

All Articles