[Zope] Getting ZClass instances from Zope via XML-RPC ??
Mark Lilly
marq@europa.com
Sun, 17 Feb 2002 10:27:29 -0000
Thanks for the Note.
I too found that returning a collection of primitives from Python worked
fine. I sent back to Java a list (i believe that's right: something like
this> results[[][]] ), one of which's items was another list. These came
across as vectors in Java.
Cheers,
mark
> -----Original Message-----
> From: Gilles Lenfant [mailto:glenfant@bigfoot.com]
> Sent: Wednesday, February 13, 2002 8:34 PM
> To: marq@europa.com
> Cc: zope@zope.org
> Subject: Re: [Zope] Getting ZClass instances from Zope via XML-RPC ??
>
>
> 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 )
> >
> >
>
>
>