470,849 Members | 1,247 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,849 developers. It's quick & easy.

SOAPpy, client, execute method that has 'complex' input parameter (with list)?

I'am writting a simple SOAP client in python (2.4) using SOAPpy lib.

I've met with this problem:

when I want to send a list of complex type using
some method from WebService(java,WAS),
I'v got an exception:


<Fault Server.generalException: org.xml.sax.SAXException:
WSWS3136E: Error: No deserializer defined for
array type {http://www.w3.org/1999/XMLSchema}instance: >

I understand that this exception comes from WebService
and I know the reason of this exception,

A SOAP request genereted by SOAPpy contains invalid information
about Type of objects (which I've send).


ServerSide (I know a list o methods and data types, so I don't read
server serve method:

sendMyElements(MyClass input)


'MyClass' is a class which contains two fields:
'sessionId' --------- just STRING
'myElements'--------- an array of 'MyElement'


'MyElement' is class which contains some simple string fields (name,


from SOAPpy import WSDL

url =

serv = WSDL.Proxy(url)

print serv.methods.keys()

class MyElement:
def __init__(self,x,y):

class MyClass:
def __init__(self):

#!!!!!!!!!!!!!!!!!!!!!! LOOK THIS LINE
=MyElement("a","a"),MyElement("b","b"),MyElement(" c","")]

print serv.sendMyElements(MyClass())
Look at the line where I create list of elements MyElement,
In python type 'list' is able to store object of any type
(example: [123,"sddsf",MyElement()]),

Maybe this type ('list') gives me to abstract level, cause whey:
list=['a',213,MyElement('as',''),MyElement('adsf',''),My Element('asdsad','')]
print type(list)
for a in list:
print a,type(a)

I get ...
<type 'list'> -------for list, below for list's elements
a <type 'str'>
213 <type 'int'>
<__main__.MyElement instance at 0x00D4ABC0> <type 'instance'>
<__main__.MyElement instance at 0x00D56C10> <type 'instance'>
<__main__.MyElement instance at 0x00D56CD8> <type 'instance'>

Important, the type(MyElement("sadas","sad")) returns <type
and this information (I think) is used by SOAPpy lib while creating
SOAP request,

a piece of SOAP request:
<saveArrayOfData SOAP-ENC:arrayType="xsd:instance[3]"
xsi:type="SOAP-ENC:Array" SOAP-ENC:root="0" id="i2">
<item href="#i4"/>
<item href="#i5"/>
<item href="#i6"/>

I see here, that I'am sending an array of object 'instance'
but a want to send an array of MyElements.

1. What shoud I do send an array of objects only one type (MyElement) ?
- create more strict data type than 'list'?
- force object - an instance of MyElement class to return proper
about 'type' (type(MyElement('','')))

2. Maybe, I should use 'wsdl2py' to create valid structures (but
'wsdl2py' sometimes fails
while parsing my WSDLs - with error RuntimeError: maximum recursion
depth exceeded)

3. Maybe, I should use other library than SOAPpy

Thanks for any help,

Oct 5 '05 #1
0 2029

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by Harry George | last post: by
reply views Thread by Sameer Deshpande | last post: by
reply views Thread by benboals | last post: by
reply views Thread by Steve | last post: by
1 post views Thread by icius | last post: by
reply views Thread by linuxprog | last post: by
reply views Thread by Alex Ezell | last post: by
reply views Thread by pion | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.