Re: [Py4j-users] Interface troubles
Status: Beta
Brought to you by:
barthe
|
From: Alec C. <ar...@fa...> - 2011-03-16 21:53:33
|
Hi Barthélémy,
Thanks for the fix! It's working great now.
Alec
Quoting Barthelemy Dagenais <ba...@cs...>:
> Hi Alec,
>
> Thanks for reporting this bug and for the test case, it was very helpful!
>
> I just pushed a fix to the git repository and I added your test case in
> the unit test suite.
>
> Don't hesitate to post again if you find another bug!
>
> Barthélémy
>
> On 03/16/2011 02:20 PM, Alec Chapman wrote:
> > Hi,
> > I've just started trying out py4j and am finding it really helpful so far.
> I
> > was able to implement a simple Java interface in Python, but I'm running
> into
> > trouble with more complicated interfaces.
> >
> > Specifically, I'm having trouble when one interface has a function that
> returns
> > another interface, with both interfaces implemented in Python. The problem
> > seems to be that the python object is only treated as a Java interface when
> it
> > is passed as an argument, not when it is the return value.
> >
> > I've included a simple example below. Is what I'm trying to do possible?
> > Thanks for any help,
> > Alec
> >
> > Here's the python code:
> > --------------------------------------------------
> >
> > from py4j.java_gateway import JavaGateway
> >
> > class A(object):
> > class Java:
> > implements = ['py4j.examples.InterfaceA']
> >
> > class B(object):
> > def foo(self):
> > return A() #this doesn't work
> > return gateway.jvm.py4j.examples.ClassA() #this does
> > class Java:
> > implements = ['py4j.examples.InterfaceB']
> >
> > gateway = JavaGateway(start_callback_server=True)
> > gateway.entry_point.test(B())
> >
> > And here's the Java code:
> > --------------------------------------------
> >
> > public interface InterfaceA {
> > }
> >
> > public interface InterfaceB {
> > public InterfaceA foo();
> > }
> >
> > public class ClassA implements InterfaceA{
> > }
> >
> > public class InterfaceExample {
> >
> > public void test(InterfaceB b) {
> > InterfaceA a = b.foo();
> > }
> >
> > public static void main(String[] args) {
> > GatewayServer server = new GatewayServer(new InterfaceExample());
> > server.start();
> > }
> > }
> >
> > -------------------------------------
> > The error occurs in the line 'return A()':
> >
> > py4j.protocol.Py4JJavaError: An error occurred while calling t.test.
> > : py4j.Py4JException: An exception was raised by the Python Proxy.
> > at py4j.Protocol.getReturnValue(Protocol.java:393)
> > at py4j.reflection.PythonProxyHandler.invoke(PythonProxyHandler.java:100)
> > at $Proxy0.foo(Unknown Source)
> > at py4j.examples.InterfaceExample.test(InterfaceExample.java:8)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> > at
> >
>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> > at java.lang.reflect.Method.invoke(Method.java:597)
> > at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:119)
> > at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:392)
> > at py4j.Gateway.invoke(Gateway.java:255)
> > at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:124)
> > at py4j.commands.CallCommand.execute(CallCommand.java:81)
> > at py4j.GatewayConnection.run(GatewayConnection.java:175)
> > at java.lang.Thread.run(Thread.java:662)
> >
> >
> >
> >
> ------------------------------------------------------------------------------
> > Colocation vs. Managed Hosting
> > A question and answer guide to determining the best fit
> > for your organization - today and in the future.
> > http://p.sf.net/sfu/internap-sfd2d
> > _______________________________________________
> > Py4j-users mailing list
> > Py4...@li...
> > https://lists.sourceforge.net/lists/listinfo/py4j-users
>
>
> ------------------------------------------------------------------------------
> Colocation vs. Managed Hosting
> A question and answer guide to determining the best fit
> for your organization - today and in the future.
> http://p.sf.net/sfu/internap-sfd2d
> _______________________________________________
> Py4j-users mailing list
> Py4...@li...
> https://lists.sourceforge.net/lists/listinfo/py4j-users
>
|