[Zope] Getting ZClass instances from Zope via XML-RPC ??

Gilles Lenfant glenfant@bigfoot.com
Wed, 13 Feb 2002 21:33:44 +0100


As Dieter says, you should convert those objects to collections/dictionaries
of simple objects (string, floating, integer,booleans)

This works for me (server side):

# Name : ProxyForAZClass_py
# This script exposes a ZClass object to XMLRPC client
# that will read a dictionnary of properties

props = ZClassObject.propertysheets.basic.propertyItems()
dprops = {}
for k,v in props:
    if k == 'someDate': # from propertysheet
        # It's a DateTime object (can't be marshaled for XMLRPC)
        v = v.timeTime() # Make it a float
    dprops[k] = v
return dprops

Python Client side:

s = xmlrpclib.Server(UrlOfObject)
dictobj = s.ProxyForAZClass_py()

HTH

----- Original Message -----
From: "Dieter Maurer" <dieter@handshake.de>
To: <marq@europa.com>
Cc: <zope@zope.org>
Sent: Wednesday, February 13, 2002 7:57 PM
Subject: Re: [Zope] Getting ZClass instances from Zope via XML-RPC ??


> marq@europa.com writes:
>  > I am wondering how to get ZClass instances from Zope to a Java XML-RPC
client.
>  >
>  > 1.
>  > I have (and please forgive the Java-like pseudocode; i'm new to Python)
a product with a ZClass call Invoice (meta = "Invoice Main")
>  > class Invoice {
>  > String invoice_name
>  > int invoice_id
>  > date invoice_date
>  > }
>  >
>  > 2.
>  > I have a Python Script (named 'invoice') that goes:
>  > results=[]
>  > for object in context.Projects.objectValues('Invoice Main'):
>  >   results.append(object)
>  > return results
>  >
>  > 3.
>  > When i test this script directly in Zope, i get:
>  > [<Project instance at 014A00F0>, <Project instance at 01832800>,
<Project instance at 015A2D80>]
>  >
>  > 4.
>  > If i call this from my XML-RPC client, i get the following Java/Zope
error:
>  >
>  > Unexpected Zope exception: cannot marshal <extension class
Acquisition.ImplicitAcquirerWrapper at 00C25140> objects
> The XML-RPC tries to serialize (Java terminology; its called
> "marshal" in Python/Corba) the instances and it unable to do it.
>
> Probably, you must convert your instances into something more
> elementary to help the marshaling process.
>
>
> Dieter
>
> _______________________________________________
> Zope maillist  -  Zope@zope.org
> http://lists.zope.org/mailman/listinfo/zope
> **   No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope-dev )
>
>