From: Sherrell, D. <dsh...@ad...> - 2010-02-16 17:01:36
|
Hello, I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces...i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? So if my interface looked something like: public interface AFE_ClientInterface { public int messageId(); public String clientName(); public NetworkDefinition getNetworkDefinition(); .... .... public void shutDown(); } How do I translate the jython NetworkDefinition object into one that java can understand? Thanks, Dana |
From: Alex G. <ale...@ne...> - 2010-02-16 17:07:52
|
16.2.2010 18:48, Sherrell, Dana kirjoitti: > > Hello, > > I am fairly new to java/jython integration so please be patient. I > followed the jython factory examples to use the interpreter to call my > jython objects and all is well until I need to access a user defined > object in jython from java. The examples that I have seen use simple > types in the interfaces...i need to access a complex data type. How > do I access a user defined type -- defined in the jython module -- in > my java app? > > So if my interface looked something like: > > *public* *interface* AFE_ClientInterface { > > *public* *int* messageId(); > > *public* String clientName(); > > *public* NetworkDefinition getNetworkDefinition(); > > .... > > .... > > *public* *void* shutDown(); > > } > > How do I translate the jython NetworkDefinition object into one that > java can understand? > > Thanks, > > Dana > > You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. |
From: Sherrell, D. <dsh...@ad...> - 2010-02-16 19:13:54
|
Allright, So I have a MessageInterface interface in Java as: package jyinterface.interfaces; public interface MessageInterface { public int getSource(); public int getDestination(); public int getLength(); public int getVersion(); public int getMessageID(); public int setSource(int val); public int setDestination(int val); public int setLength(int val); public int setVersion(int val); public int setMessageID(int val); } And a jython object that implements the interface: class Message(MessageInterface): def __init__(self): """@sig Message()""" self.length = 0 self.msg_verion = 0 self.source = 0 self.destination = 0 self.Message_ID = 0 f=open(path + 'Message.txt','r') #dictionary containing class attribute information useful for encode/decode #has keys: type complex_name bits name dimensions self.properties = pickle.load(f) f.close() def getLength(self): return self.length def getSource(self): return self.source def getDestination(self): return self.destination def getMessageID(self): return self.Message_ID def getVersion(self): return self.msg_version def setLength(self, val): self.length = val def setSource(self, val): self.source = val def setDestination(self, val): self.destination = val def setMessageId(self, val): self.Message_ID = val def setVersion(self, val): self.msg_version = val there is another jython object that inherits the Message object like this: class Network_Definition_Fields(NetworkDefinitionInterface,Message): def __init__(self, message = None): Message.__init__(self) self.number_of_subnets = None self.Preset_Net_Profiles = None .... .... when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? Your help is greatly appreciated. Thanks, Dana -----Original Message----- From: Alex Grönholm [mailto:ale...@ne...] Sent: Tuesday, February 16, 2010 9:08 AM To: jyt...@li... Subject: Re: [Jython-users] use jython object from java 16.2.2010 18:48, Sherrell, Dana kirjoitti: Hello, I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? So if my interface looked something like: public interface AFE_ClientInterface { public int messageId(); public String clientName(); public NetworkDefinition getNetworkDefinition(); .. .. public void shutDown(); } How do I translate the jython NetworkDefinition object into one that java can understand? Thanks, Dana You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. |
From: Sherrell, D. <dsh...@ad...> - 2010-02-16 19:32:53
|
One more thing..the trace shows that the problem occurs in the pyamf codec..but it is at the point that the Message constructor is invoked and at some point the recursion depth is exceeded... Exception in thread Thread:Traceback (most recent call last): File "c:\Jython\Lib\threading.py", line 178, in _Thread__bootstrap self.run() File "__pyclasspath__/MessageInterfaceClient.py", line 99, in run File "c:\Python26\Lib\pyamf\__init__.py", line 1050, in decode yield decoder.readElement() File "c:\Python26\Lib\pyamf\__init__.py", line 1050, in decode yield decoder.readElement() File "c:\Python26\Lib\pyamf\__init__.py", line 677, in readElement return func() File "c:\Python26\Lib\pyamf\amf0.py", line 310, in readTypedObject ret = alias.createInstance(codec=self) File "c:\Python26\Lib\pyamf\amf0.py", line 310, in readTypedObject ret = alias.createInstance(codec=self) File "c:\Python26\Lib\pyamf\__init__.py", line 562, in createInstance return self.klass(*args, **kwargs) File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 312, in __init__ Message.__init__(self) File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 90, in __init__ self.length = 0 File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val -----Original Message----- From: Sherrell, Dana Sent: Tuesday, February 16, 2010 11:14 AM To: Alex Grönholm; jyt...@li... Subject: Re: [Jython-users] use jython object from java Allright, So I have a MessageInterface interface in Java as: package jyinterface.interfaces; public interface MessageInterface { public int getSource(); public int getDestination(); public int getLength(); public int getVersion(); public int getMessageID(); public int setSource(int val); public int setDestination(int val); public int setLength(int val); public int setVersion(int val); public int setMessageID(int val); } And a jython object that implements the interface: class Message(MessageInterface): def __init__(self): """@sig Message()""" self.length = 0 self.msg_verion = 0 self.source = 0 self.destination = 0 self.Message_ID = 0 f=open(path + 'Message.txt','r') #dictionary containing class attribute information useful for encode/decode #has keys: type complex_name bits name dimensions self.properties = pickle.load(f) f.close() def getLength(self): return self.length def getSource(self): return self.source def getDestination(self): return self.destination def getMessageID(self): return self.Message_ID def getVersion(self): return self.msg_version def setLength(self, val): self.length = val def setSource(self, val): self.source = val def setDestination(self, val): self.destination = val def setMessageId(self, val): self.Message_ID = val def setVersion(self, val): self.msg_version = val there is another jython object that inherits the Message object like this: class Network_Definition_Fields(NetworkDefinitionInterface,Message): def __init__(self, message = None): Message.__init__(self) self.number_of_subnets = None self.Preset_Net_Profiles = None .... .... when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? Your help is greatly appreciated. Thanks, Dana -----Original Message----- From: Alex Grönholm [mailto:ale...@ne...] Sent: Tuesday, February 16, 2010 9:08 AM To: jyt...@li... Subject: Re: [Jython-users] use jython object from java 16.2.2010 18:48, Sherrell, Dana kirjoitti: Hello, I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? So if my interface looked something like: public interface AFE_ClientInterface { public int messageId(); public String clientName(); public NetworkDefinition getNetworkDefinition(); .. .. public void shutDown(); } How do I translate the jython NetworkDefinition object into one that java can understand? Thanks, Dana You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Sherrell, D. <dsh...@ad...> - 2010-02-16 20:14:44
|
I just found this issue on the bugs list. Could this be what is happening here and does anyone know of a work around besides changing my class to not inherit from the base Message class? http://bugs.jython.org/issue1540 thanks, Dana -----Original Message----- From: Sherrell, Dana Sent: Tuesday, February 16, 2010 11:33 AM To: Alex Grönholm; jyt...@li... Subject: Re: [Jython-users] use jython object from java One more thing..the trace shows that the problem occurs in the pyamf codec..but it is at the point that the Message constructor is invoked and at some point the recursion depth is exceeded... Exception in thread Thread:Traceback (most recent call last): File "c:\Jython\Lib\threading.py", line 178, in _Thread__bootstrap self.run() File "__pyclasspath__/MessageInterfaceClient.py", line 99, in run File "c:\Python26\Lib\pyamf\__init__.py", line 1050, in decode yield decoder.readElement() File "c:\Python26\Lib\pyamf\__init__.py", line 1050, in decode yield decoder.readElement() File "c:\Python26\Lib\pyamf\__init__.py", line 677, in readElement return func() File "c:\Python26\Lib\pyamf\amf0.py", line 310, in readTypedObject ret = alias.createInstance(codec=self) File "c:\Python26\Lib\pyamf\amf0.py", line 310, in readTypedObject ret = alias.createInstance(codec=self) File "c:\Python26\Lib\pyamf\__init__.py", line 562, in createInstance return self.klass(*args, **kwargs) File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 312, in __init__ Message.__init__(self) File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 90, in __init__ self.length = 0 File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val File "C:\RIB AFE Collaborative\AFE_Interface\src\message_interface.py", line 121, in setLength self.length = val -----Original Message----- From: Sherrell, Dana Sent: Tuesday, February 16, 2010 11:14 AM To: Alex Grönholm; jyt...@li... Subject: Re: [Jython-users] use jython object from java Allright, So I have a MessageInterface interface in Java as: package jyinterface.interfaces; public interface MessageInterface { public int getSource(); public int getDestination(); public int getLength(); public int getVersion(); public int getMessageID(); public int setSource(int val); public int setDestination(int val); public int setLength(int val); public int setVersion(int val); public int setMessageID(int val); } And a jython object that implements the interface: class Message(MessageInterface): def __init__(self): """@sig Message()""" self.length = 0 self.msg_verion = 0 self.source = 0 self.destination = 0 self.Message_ID = 0 f=open(path + 'Message.txt','r') #dictionary containing class attribute information useful for encode/decode #has keys: type complex_name bits name dimensions self.properties = pickle.load(f) f.close() def getLength(self): return self.length def getSource(self): return self.source def getDestination(self): return self.destination def getMessageID(self): return self.Message_ID def getVersion(self): return self.msg_version def setLength(self, val): self.length = val def setSource(self, val): self.source = val def setDestination(self, val): self.destination = val def setMessageId(self, val): self.Message_ID = val def setVersion(self, val): self.msg_version = val there is another jython object that inherits the Message object like this: class Network_Definition_Fields(NetworkDefinitionInterface,Message): def __init__(self, message = None): Message.__init__(self) self.number_of_subnets = None self.Preset_Net_Profiles = None .... .... when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? Your help is greatly appreciated. Thanks, Dana -----Original Message----- From: Alex Grönholm [mailto:ale...@ne...] Sent: Tuesday, February 16, 2010 9:08 AM To: jyt...@li... Subject: Re: [Jython-users] use jython object from java 16.2.2010 18:48, Sherrell, Dana kirjoitti: Hello, I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? So if my interface looked something like: public interface AFE_ClientInterface { public int messageId(); public String clientName(); public NetworkDefinition getNetworkDefinition(); .. .. public void shutDown(); } How do I translate the jython NetworkDefinition object into one that java can understand? Thanks, Dana You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Alex G. <ale...@ne...> - 2010-02-17 05:07:40
|
16.2.2010 21:13, Sherrell, Dana kirjoitti: > Allright, > > So I have a MessageInterface interface in Java as: > > package jyinterface.interfaces; > > public interface MessageInterface { > > public int getSource(); > public int getDestination(); > public int getLength(); > public int getVersion(); > public int getMessageID(); > > public int setSource(int val); > public int setDestination(int val); > public int setLength(int val); > public int setVersion(int val); > public int setMessageID(int val); > > } > > > And a jython object that implements the interface: > > class Message(MessageInterface): > def __init__(self): > """@sig Message()""" > > self.length = 0 > self.msg_verion = 0 > self.source = 0 > self.destination = 0 > self.Message_ID = 0 > > f=open(path + 'Message.txt','r') > > #dictionary containing class attribute information useful for encode/decode > #has keys: type complex_name bits name dimensions > self.properties = pickle.load(f) > f.close() > > > > def getLength(self): > return self.length > > def getSource(self): > return self.source > > def getDestination(self): > return self.destination > > def getMessageID(self): > return self.Message_ID > > def getVersion(self): > return self.msg_version > > def setLength(self, val): > self.length = val > > > def setSource(self, val): > self.source = val > > def setDestination(self, val): > self.destination = val > > def setMessageId(self, val): > self.Message_ID = val > > def setVersion(self, val): > self.msg_version = val > > > there is another jython object that inherits the Message object like this: > > class Network_Definition_Fields(NetworkDefinitionInterface,Message): > def __init__(self, message = None): > > Message.__init__(self) > self.number_of_subnets = None > self.Preset_Net_Profiles = None > .... > .... > > > when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded > > > A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? > > Your help is greatly appreciated. > > The problem arises because self.length = val is automatically calling self.setLength since Jython creates bean properties automatically in Java proxies. You could try to remove those setters and getters or name the actual fields with _ in front. (_length et al). > Thanks, > Dana > > -----Original Message----- > From: Alex Grönholm [mailto:ale...@ne...] > Sent: Tuesday, February 16, 2010 9:08 AM > To: jyt...@li... > Subject: Re: [Jython-users] use jython object from java > > 16.2.2010 18:48, Sherrell, Dana kirjoitti: > > Hello, > > > > I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? > > > > So if my interface looked something like: > > > > public interface AFE_ClientInterface { > > > > public int messageId(); > > public String clientName(); > > public NetworkDefinition getNetworkDefinition(); > > .. > > .. > > > > public void shutDown(); > > > > > > > > } > > > > How do I translate the jython NetworkDefinition object into one that java can understand? > > > > Thanks, > > Dana > > > > > You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. > > |
From: Sherrell, D. <dsh...@ad...> - 2010-02-22 20:28:49
|
I have the following very simple classes in jython: from jyinterface.interfaces import BuildingType from jyinterface.interfaces import PropertyInterface class Building(BuildingType): def __init__(self): self._name = "API" self._address = "1849 Wabash, Redlands" self._id = 1 def getBuildingName(self): return self._name def getBuildingAddress(self): return self._address def getBuldingId(self): return self._id class Property(PropertyInterface, Building): def __init__(self, building=None): Building.__init__(self) self._type = "commercial" def getType(self): return self._type Then the corresponding interfaces in Java: package jyinterface.interfaces; public interface BuildingType { public String getBuildingName(); public String getBuildingAddress(); public String getBuildingId(); } package jyinterface.interfaces; public interface PropertyInterface { public String getType(); public BuildingType getBuildingType(); } In main I attempt the following: public class Main { public static void main(String[] args) { JythonFactory factory = new JythonFactory( BuildingType.class, "Building", "Building"); BuildingType building = (BuildingType)factory.createObject(); factory = new JythonFactory( PropertyInterface.class, "Building", "Property"); PropertyInterface property = (PropertyInterface)factory.createObject(building); System.out.println(building.getBuildingAddress()); System.out.println(property.getType()); System.out.println(property.getBuildingType().getBuildingAddress()); <--- CAN YOU PLEASE EXPLAIN WHY THIS CAUSES A NULL EXCEPTION? I ALSO TRIED TO REPLACE : System.out.println(property.getBuildingType().getBuildingAddress()); WITH System.out.println(property.getBuildingAddress()); but getBuildingAddress is not recognized as part of the interface to the Property object even though it is derived from Building. I am confused, can you please enlighten me on how to access methods of interfaces from the Java code when there is an inheritance relationship on the Jython side? } } Thank you, dana -----Original Message----- From: Alex Grönholm [mailto:ale...@ne...] Sent: Tuesday, February 16, 2010 9:07 PM Cc: jyt...@li... Subject: Re: [Jython-users] use jython object from java 16.2.2010 21:13, Sherrell, Dana kirjoitti: > Allright, > > So I have a MessageInterface interface in Java as: > > package jyinterface.interfaces; > > public interface MessageInterface { > > public int getSource(); > public int getDestination(); > public int getLength(); > public int getVersion(); > public int getMessageID(); > > public int setSource(int val); > public int setDestination(int val); > public int setLength(int val); > public int setVersion(int val); > public int setMessageID(int val); > > } > > > And a jython object that implements the interface: > > class Message(MessageInterface): > def __init__(self): > """@sig Message()""" > > self.length = 0 > self.msg_verion = 0 > self.source = 0 > self.destination = 0 > self.Message_ID = 0 > > f=open(path + 'Message.txt','r') > > #dictionary containing class attribute information useful for encode/decode > #has keys: type complex_name bits name dimensions > self.properties = pickle.load(f) > f.close() > > > > def getLength(self): > return self.length > > def getSource(self): > return self.source > > def getDestination(self): > return self.destination > > def getMessageID(self): > return self.Message_ID > > def getVersion(self): > return self.msg_version > > def setLength(self, val): > self.length = val > > > def setSource(self, val): > self.source = val > > def setDestination(self, val): > self.destination = val > > def setMessageId(self, val): > self.Message_ID = val > > def setVersion(self, val): > self.msg_version = val > > > there is another jython object that inherits the Message object like this: > > class Network_Definition_Fields(NetworkDefinitionInterface,Message): > def __init__(self, message = None): > > Message.__init__(self) > self.number_of_subnets = None > self.Preset_Net_Profiles = None > .... > .... > > > when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded > > > A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? > > Your help is greatly appreciated. > > The problem arises because self.length = val is automatically calling self.setLength since Jython creates bean properties automatically in Java proxies. You could try to remove those setters and getters or name the actual fields with _ in front. (_length et al). > Thanks, > Dana > > -----Original Message----- > From: Alex Grönholm [mailto:ale...@ne...] > Sent: Tuesday, February 16, 2010 9:08 AM > To: jyt...@li... > Subject: Re: [Jython-users] use jython object from java > > 16.2.2010 18:48, Sherrell, Dana kirjoitti: > > Hello, > > > > I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? > > > > So if my interface looked something like: > > > > public interface AFE_ClientInterface { > > > > public int messageId(); > > public String clientName(); > > public NetworkDefinition getNetworkDefinition(); > > .. > > .. > > > > public void shutDown(); > > > > > > > > } > > > > How do I translate the jython NetworkDefinition object into one that java can understand? > > > > Thanks, > > Dana > > > > > You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. > > ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Sherrell, D. <dsh...@ad...> - 2010-02-23 16:18:04
|
Here is the PropertyInterface java interface.... > public interface PropertyInterface { > > public String getType(); > > > } > > What I want to do is retrieve the Building properties (_address, _name, _id) from the Java code through the Property interface...which inherits from Building and I am not sure how to do this. Since Property inherits from Building in the jython object...shouldn't the getBuildingAddress() and other getters from Building be available through the Property instance in the java code? -----Original Message----- From: Jeff Emanuel [mailto:jem...@fr...] Sent: Monday, February 22, 2010 4:24 PM To: Sherrell, Dana Cc: jyt...@li... Subject: Re: [Jython-users] use jython object from java At first glance, your class Property doesn't implement the getBuildingType method of interface PropertyInterface. Sherrell, Dana wrote: > > I have the following very simple classes in jython: > > from jyinterface.interfaces import BuildingType > from jyinterface.interfaces import PropertyInterface > > class Building(BuildingType): > def __init__(self): > self._name = "API" > self._address = "1849 Wabash, Redlands" > self._id = 1 > > def getBuildingName(self): > return self._name > > def getBuildingAddress(self): > return self._address > > def getBuldingId(self): > return self._id > > > class Property(PropertyInterface, Building): > def __init__(self, building=None): > Building.__init__(self) > self._type = "commercial" > > > > > def getType(self): > return self._type > > > > Then the corresponding interfaces in Java: > > > > package jyinterface.interfaces; > > public interface BuildingType { > > public String getBuildingName(); > public String getBuildingAddress(); > public String getBuildingId(); > > } > > package jyinterface.interfaces; > > > public interface PropertyInterface { > > public String getType(); > public BuildingType getBuildingType(); > > } > > > > > In main I attempt the following: > > > public class Main { > > > public static void main(String[] args) { > > > JythonFactory factory = new JythonFactory( BuildingType.class, "Building", "Building"); > BuildingType building = (BuildingType)factory.createObject(); > > factory = new JythonFactory( PropertyInterface.class, "Building", "Property"); > > PropertyInterface property = (PropertyInterface)factory.createObject(building); > > > System.out.println(building.getBuildingAddress()); > System.out.println(property.getType()); > > System.out.println(property.getBuildingType().getBuildingAddress()); <--- CAN YOU PLEASE EXPLAIN WHY THIS CAUSES A NULL EXCEPTION? > > I ALSO TRIED TO REPLACE : System.out.println(property.getBuildingType().getBuildingAddress()); > > WITH > > System.out.println(property.getBuildingAddress()); but getBuildingAddress is not recognized as part of the interface to the Property object even though it is derived from Building. I am confused, can you please enlighten me on how to access methods of interfaces from the Java code when there is an inheritance relationship on the Jython side? > > } > } > > Thank you, > dana > > -----Original Message----- > From: Alex Grönholm [mailto:ale...@ne...] > Sent: Tuesday, February 16, 2010 9:07 PM > Cc: jyt...@li... > Subject: Re: [Jython-users] use jython object from java > > 16.2.2010 21:13, Sherrell, Dana kirjoitti: >> Allright, >> >> So I have a MessageInterface interface in Java as: >> >> package jyinterface.interfaces; >> >> public interface MessageInterface { >> >> public int getSource(); >> public int getDestination(); >> public int getLength(); >> public int getVersion(); >> public int getMessageID(); >> >> public int setSource(int val); >> public int setDestination(int val); >> public int setLength(int val); >> public int setVersion(int val); >> public int setMessageID(int val); >> >> } >> >> >> And a jython object that implements the interface: >> >> class Message(MessageInterface): >> def __init__(self): >> """@sig Message()""" >> >> self.length = 0 >> self.msg_verion = 0 >> self.source = 0 >> self.destination = 0 >> self.Message_ID = 0 >> >> f=open(path + 'Message.txt','r') >> >> #dictionary containing class attribute information useful for encode/decode >> #has keys: type complex_name bits name dimensions >> self.properties = pickle.load(f) >> f.close() >> >> >> >> def getLength(self): >> return self.length >> >> def getSource(self): >> return self.source >> >> def getDestination(self): >> return self.destination >> >> def getMessageID(self): >> return self.Message_ID >> >> def getVersion(self): >> return self.msg_version >> >> def setLength(self, val): >> self.length = val >> >> >> def setSource(self, val): >> self.source = val >> >> def setDestination(self, val): >> self.destination = val >> >> def setMessageId(self, val): >> self.Message_ID = val >> >> def setVersion(self, val): >> self.msg_version = val >> >> >> there is another jython object that inherits the Message object like this: >> >> class Network_Definition_Fields(NetworkDefinitionInterface,Message): >> def __init__(self, message = None): >> >> Message.__init__(self) >> self.number_of_subnets = None >> self.Preset_Net_Profiles = None >> .... >> .... >> >> >> when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded >> >> >> A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? >> >> Your help is greatly appreciated. >> >> > The problem arises because self.length = val is automatically calling > self.setLength since Jython creates bean properties automatically in > Java proxies. You could try to remove those setters and getters or name > the actual fields with _ in front. (_length et al). >> Thanks, >> Dana >> >> -----Original Message----- >> From: Alex Grönholm [mailto:ale...@ne...] >> Sent: Tuesday, February 16, 2010 9:08 AM >> To: jyt...@li... >> Subject: Re: [Jython-users] use jython object from java >> >> 16.2.2010 18:48, Sherrell, Dana kirjoitti: >> >> Hello, >> >> >> >> I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? >> >> >> >> So if my interface looked something like: >> >> >> >> public interface AFE_ClientInterface { >> >> >> >> public int messageId(); >> >> public String clientName(); >> >> public NetworkDefinition getNetworkDefinition(); >> >> .. >> >> .. >> >> >> >> public void shutDown(); >> >> >> >> >> >> >> >> } >> >> >> >> How do I translate the jython NetworkDefinition object into one that java can understand? >> >> >> >> Thanks, >> >> Dana >> >> >> >> >> You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. >> >> > > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Jeff E. <jem...@fr...> - 2010-02-23 17:02:48
|
In your Java code here: PropertyInterface property = (PropertyInterface)factory.createObject(building); Java only knows that property is a PropertyInterface. It does not know that property's class also extends Building which implements BuildingType. Java is strongly typed, so it won't let you try to call methods for interfaces it doesn't know your object implements. You should be able to cast property to BuildingType and call those methods: ((BuildingType)property).getBuildingId(); Alternatively, maybe your PropertyInterface can extend the BuildingType interface. Sherrell, Dana wrote: > Here is the PropertyInterface java interface.... > > >> public interface PropertyInterface { >> >> public String getType(); >> > >> } >> >> > > What I want to do is retrieve the Building properties (_address, _name, _id) from the Java code through the Property interface...which inherits from Building and I am not sure how to do this. Since Property inherits from Building in the jython object...shouldn't the getBuildingAddress() and other getters from Building be available through the Property instance in the java code? > > > -----Original Message----- > From: Jeff Emanuel [mailto:jem...@fr...] > Sent: Monday, February 22, 2010 4:24 PM > To: Sherrell, Dana > Cc: jyt...@li... > Subject: Re: [Jython-users] use jython object from java > > At first glance, your class Property doesn't implement the > getBuildingType method of interface PropertyInterface. > > Sherrell, Dana wrote: >> I have the following very simple classes in jython: >> >> from jyinterface.interfaces import BuildingType >> from jyinterface.interfaces import PropertyInterface >> >> class Building(BuildingType): >> def __init__(self): >> self._name = "API" >> self._address = "1849 Wabash, Redlands" >> self._id = 1 >> >> def getBuildingName(self): >> return self._name >> >> def getBuildingAddress(self): >> return self._address >> >> def getBuldingId(self): >> return self._id >> >> >> class Property(PropertyInterface, Building): >> def __init__(self, building=None): >> Building.__init__(self) >> self._type = "commercial" >> >> >> >> >> def getType(self): >> return self._type >> >> >> >> Then the corresponding interfaces in Java: >> >> >> >> package jyinterface.interfaces; >> >> public interface BuildingType { >> >> public String getBuildingName(); >> public String getBuildingAddress(); >> public String getBuildingId(); >> >> } >> >> package jyinterface.interfaces; >> >> >> public interface PropertyInterface { >> >> public String getType(); >> public BuildingType getBuildingType(); >> >> } >> >> >> >> >> In main I attempt the following: >> >> >> public class Main { >> >> >> public static void main(String[] args) { >> >> >> JythonFactory factory = new JythonFactory( BuildingType.class, "Building", "Building"); >> BuildingType building = (BuildingType)factory.createObject(); >> >> factory = new JythonFactory( PropertyInterface.class, "Building", "Property"); >> >> PropertyInterface property = (PropertyInterface)factory.createObject(building); >> >> >> System.out.println(building.getBuildingAddress()); >> System.out.println(property.getType()); >> >> System.out.println(property.getBuildingType().getBuildingAddress()); <--- CAN YOU PLEASE EXPLAIN WHY THIS CAUSES A NULL EXCEPTION? >> >> I ALSO TRIED TO REPLACE : System.out.println(property.getBuildingType().getBuildingAddress()); >> >> WITH >> >> System.out.println(property.getBuildingAddress()); but getBuildingAddress is not recognized as part of the interface to the Property object even though it is derived from Building. I am confused, can you please enlighten me on how to access methods of interfaces from the Java code when there is an inheritance relationship on the Jython side? >> >> } >> } >> >> Thank you, >> dana >> >> -----Original Message----- >> From: Alex Grönholm [mailto:ale...@ne...] >> Sent: Tuesday, February 16, 2010 9:07 PM >> Cc: jyt...@li... >> Subject: Re: [Jython-users] use jython object from java >> >> 16.2.2010 21:13, Sherrell, Dana kirjoitti: >>> Allright, >>> >>> So I have a MessageInterface interface in Java as: >>> >>> package jyinterface.interfaces; >>> >>> public interface MessageInterface { >>> >>> public int getSource(); >>> public int getDestination(); >>> public int getLength(); >>> public int getVersion(); >>> public int getMessageID(); >>> >>> public int setSource(int val); >>> public int setDestination(int val); >>> public int setLength(int val); >>> public int setVersion(int val); >>> public int setMessageID(int val); >>> >>> } >>> >>> >>> And a jython object that implements the interface: >>> >>> class Message(MessageInterface): >>> def __init__(self): >>> """@sig Message()""" >>> >>> self.length = 0 >>> self.msg_verion = 0 >>> self.source = 0 >>> self.destination = 0 >>> self.Message_ID = 0 >>> >>> f=open(path + 'Message.txt','r') >>> >>> #dictionary containing class attribute information useful for encode/decode >>> #has keys: type complex_name bits name dimensions >>> self.properties = pickle.load(f) >>> f.close() >>> >>> >>> >>> def getLength(self): >>> return self.length >>> >>> def getSource(self): >>> return self.source >>> >>> def getDestination(self): >>> return self.destination >>> >>> def getMessageID(self): >>> return self.Message_ID >>> >>> def getVersion(self): >>> return self.msg_version >>> >>> def setLength(self, val): >>> self.length = val >>> >>> >>> def setSource(self, val): >>> self.source = val >>> >>> def setDestination(self, val): >>> self.destination = val >>> >>> def setMessageId(self, val): >>> self.Message_ID = val >>> >>> def setVersion(self, val): >>> self.msg_version = val >>> >>> >>> there is another jython object that inherits the Message object like this: >>> >>> class Network_Definition_Fields(NetworkDefinitionInterface,Message): >>> def __init__(self, message = None): >>> >>> Message.__init__(self) >>> self.number_of_subnets = None >>> self.Preset_Net_Profiles = None >>> .... >>> .... >>> >>> >>> when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded >>> >>> >>> A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? >>> >>> Your help is greatly appreciated. >>> >>> >> The problem arises because self.length = val is automatically calling >> self.setLength since Jython creates bean properties automatically in >> Java proxies. You could try to remove those setters and getters or name >> the actual fields with _ in front. (_length et al). >>> Thanks, >>> Dana >>> >>> -----Original Message----- >>> From: Alex Grönholm [mailto:ale...@ne...] >>> Sent: Tuesday, February 16, 2010 9:08 AM >>> To: jyt...@li... >>> Subject: Re: [Jython-users] use jython object from java >>> >>> 16.2.2010 18:48, Sherrell, Dana kirjoitti: >>> >>> Hello, >>> >>> >>> >>> I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? >>> >>> >>> >>> So if my interface looked something like: >>> >>> >>> >>> public interface AFE_ClientInterface { >>> >>> >>> >>> public int messageId(); >>> >>> public String clientName(); >>> >>> public NetworkDefinition getNetworkDefinition(); >>> >>> .. >>> >>> .. >>> >>> >>> >>> public void shutDown(); >>> >>> >>> >>> >>> >>> >>> >>> } >>> >>> >>> >>> How do I translate the jython NetworkDefinition object into one that java can understand? >>> >>> >>> >>> Thanks, >>> >>> Dana >>> >>> >>> >>> >>> You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. >>> >>> >> >> ------------------------------------------------------------------------------ >> SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, >> Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW >> http://p.sf.net/sfu/solaris-dev2dev >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users >> >> ------------------------------------------------------------------------------ >> Download Intel® Parallel Studio Eval >> Try the new software tools for yourself. Speed compiling, find bugs >> proactively, and fine-tune applications for parallel performance. >> See why Intel Parallel Studio got high marks during beta. >> http://p.sf.net/sfu/intel-sw-dev >> _______________________________________________ >> Jython-users mailing list >> Jyt...@li... >> https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Sherrell, D. <dsh...@ad...> - 2010-02-24 17:10:44
|
I took the advice suggested below to prepend all of my attributes with '_' so that self.length is now self._length. This eliminated the recursion error (I don't really understand why...) however it seems now that my pyamf encode/decode is broken. Adding an '_' to all properties and then passing them to encode seems to have some adverse effect. When I decode...the values are 0. The error suggestion to eliminate the recursion was to remove the getter/setter methods. I can't remove the getters and setters because I get an error that the attributes are readonly. Does anyone know why pyamf might not like attribute names that start with '_' and why that even eliminated the recursion problem in the first place? Thanks, Dana -----Original Message----- From: Alex Grönholm [mailto:ale...@ne...] Sent: Tuesday, February 16, 2010 9:07 PM Cc: jyt...@li... Subject: Re: [Jython-users] use jython object from java 16.2.2010 21:13, Sherrell, Dana kirjoitti: > Allright, > > So I have a MessageInterface interface in Java as: > > package jyinterface.interfaces; > > public interface MessageInterface { > > public int getSource(); > public int getDestination(); > public int getLength(); > public int getVersion(); > public int getMessageID(); > > public int setSource(int val); > public int setDestination(int val); > public int setLength(int val); > public int setVersion(int val); > public int setMessageID(int val); > > } > > > And a jython object that implements the interface: > > class Message(MessageInterface): > def __init__(self): > """@sig Message()""" > > self.length = 0 > self.msg_verion = 0 > self.source = 0 > self.destination = 0 > self.Message_ID = 0 > > f=open(path + 'Message.txt','r') > > #dictionary containing class attribute information useful for encode/decode > #has keys: type complex_name bits name dimensions > self.properties = pickle.load(f) > f.close() > > > > def getLength(self): > return self.length > > def getSource(self): > return self.source > > def getDestination(self): > return self.destination > > def getMessageID(self): > return self.Message_ID > > def getVersion(self): > return self.msg_version > > def setLength(self, val): > self.length = val > > > def setSource(self, val): > self.source = val > > def setDestination(self, val): > self.destination = val > > def setMessageId(self, val): > self.Message_ID = val > > def setVersion(self, val): > self.msg_version = val > > > there is another jython object that inherits the Message object like this: > > class Network_Definition_Fields(NetworkDefinitionInterface,Message): > def __init__(self, message = None): > > Message.__init__(self) > self.number_of_subnets = None > self.Preset_Net_Profiles = None > .... > .... > > > when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded > > > A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? > > Your help is greatly appreciated. > > The problem arises because self.length = val is automatically calling self.setLength since Jython creates bean properties automatically in Java proxies. You could try to remove those setters and getters or name the actual fields with _ in front. (_length et al). > Thanks, > Dana > > -----Original Message----- > From: Alex Grönholm [mailto:ale...@ne...] > Sent: Tuesday, February 16, 2010 9:08 AM > To: jyt...@li... > Subject: Re: [Jython-users] use jython object from java > > 16.2.2010 18:48, Sherrell, Dana kirjoitti: > > Hello, > > > > I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? > > > > So if my interface looked something like: > > > > public interface AFE_ClientInterface { > > > > public int messageId(); > > public String clientName(); > > public NetworkDefinition getNetworkDefinition(); > > .. > > .. > > > > public void shutDown(); > > > > > > > > } > > > > How do I translate the jython NetworkDefinition object into one that java can understand? > > > > Thanks, > > Dana > > > > > You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. > > ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Jeff E. <jem...@fr...> - 2010-02-23 00:54:27
|
At first glance, your class Property doesn't implement the getBuildingType method of interface PropertyInterface. Sherrell, Dana wrote: > > I have the following very simple classes in jython: > > from jyinterface.interfaces import BuildingType > from jyinterface.interfaces import PropertyInterface > > class Building(BuildingType): > def __init__(self): > self._name = "API" > self._address = "1849 Wabash, Redlands" > self._id = 1 > > def getBuildingName(self): > return self._name > > def getBuildingAddress(self): > return self._address > > def getBuldingId(self): > return self._id > > > class Property(PropertyInterface, Building): > def __init__(self, building=None): > Building.__init__(self) > self._type = "commercial" > > > > > def getType(self): > return self._type > > > > Then the corresponding interfaces in Java: > > > > package jyinterface.interfaces; > > public interface BuildingType { > > public String getBuildingName(); > public String getBuildingAddress(); > public String getBuildingId(); > > } > > package jyinterface.interfaces; > > > public interface PropertyInterface { > > public String getType(); > public BuildingType getBuildingType(); > > } > > > > > In main I attempt the following: > > > public class Main { > > > public static void main(String[] args) { > > > JythonFactory factory = new JythonFactory( BuildingType.class, "Building", "Building"); > BuildingType building = (BuildingType)factory.createObject(); > > factory = new JythonFactory( PropertyInterface.class, "Building", "Property"); > > PropertyInterface property = (PropertyInterface)factory.createObject(building); > > > System.out.println(building.getBuildingAddress()); > System.out.println(property.getType()); > > System.out.println(property.getBuildingType().getBuildingAddress()); <--- CAN YOU PLEASE EXPLAIN WHY THIS CAUSES A NULL EXCEPTION? > > I ALSO TRIED TO REPLACE : System.out.println(property.getBuildingType().getBuildingAddress()); > > WITH > > System.out.println(property.getBuildingAddress()); but getBuildingAddress is not recognized as part of the interface to the Property object even though it is derived from Building. I am confused, can you please enlighten me on how to access methods of interfaces from the Java code when there is an inheritance relationship on the Jython side? > > } > } > > Thank you, > dana > > -----Original Message----- > From: Alex Grönholm [mailto:ale...@ne...] > Sent: Tuesday, February 16, 2010 9:07 PM > Cc: jyt...@li... > Subject: Re: [Jython-users] use jython object from java > > 16.2.2010 21:13, Sherrell, Dana kirjoitti: >> Allright, >> >> So I have a MessageInterface interface in Java as: >> >> package jyinterface.interfaces; >> >> public interface MessageInterface { >> >> public int getSource(); >> public int getDestination(); >> public int getLength(); >> public int getVersion(); >> public int getMessageID(); >> >> public int setSource(int val); >> public int setDestination(int val); >> public int setLength(int val); >> public int setVersion(int val); >> public int setMessageID(int val); >> >> } >> >> >> And a jython object that implements the interface: >> >> class Message(MessageInterface): >> def __init__(self): >> """@sig Message()""" >> >> self.length = 0 >> self.msg_verion = 0 >> self.source = 0 >> self.destination = 0 >> self.Message_ID = 0 >> >> f=open(path + 'Message.txt','r') >> >> #dictionary containing class attribute information useful for encode/decode >> #has keys: type complex_name bits name dimensions >> self.properties = pickle.load(f) >> f.close() >> >> >> >> def getLength(self): >> return self.length >> >> def getSource(self): >> return self.source >> >> def getDestination(self): >> return self.destination >> >> def getMessageID(self): >> return self.Message_ID >> >> def getVersion(self): >> return self.msg_version >> >> def setLength(self, val): >> self.length = val >> >> >> def setSource(self, val): >> self.source = val >> >> def setDestination(self, val): >> self.destination = val >> >> def setMessageId(self, val): >> self.Message_ID = val >> >> def setVersion(self, val): >> self.msg_version = val >> >> >> there is another jython object that inherits the Message object like this: >> >> class Network_Definition_Fields(NetworkDefinitionInterface,Message): >> def __init__(self, message = None): >> >> Message.__init__(self) >> self.number_of_subnets = None >> self.Preset_Net_Profiles = None >> .... >> .... >> >> >> when this object is instantiated in the jython code and Message.__init__ is invoked, I get an error self.length = val RunTimeError: maximum recursion depth exceeded >> >> >> A little background..i have existing python code that I am trying to integrate with java. So I'm using jython as the glue rather than being in a situation where I am developing code from scratch. Could my problem here be that I am inheriting from both the NetworkDefinitionInterface and Message? >> >> Your help is greatly appreciated. >> >> > The problem arises because self.length = val is automatically calling > self.setLength since Jython creates bean properties automatically in > Java proxies. You could try to remove those setters and getters or name > the actual fields with _ in front. (_length et al). >> Thanks, >> Dana >> >> -----Original Message----- >> From: Alex Grönholm [mailto:ale...@ne...] >> Sent: Tuesday, February 16, 2010 9:08 AM >> To: jyt...@li... >> Subject: Re: [Jython-users] use jython object from java >> >> 16.2.2010 18:48, Sherrell, Dana kirjoitti: >> >> Hello, >> >> >> >> I am fairly new to java/jython integration so please be patient. I followed the jython factory examples to use the interpreter to call my jython objects and all is well until I need to access a user defined object in jython from java. The examples that I have seen use simple types in the interfaces.i need to access a complex data type. How do I access a user defined type - defined in the jython module - in my java app? >> >> >> >> So if my interface looked something like: >> >> >> >> public interface AFE_ClientInterface { >> >> >> >> public int messageId(); >> >> public String clientName(); >> >> public NetworkDefinition getNetworkDefinition(); >> >> .. >> >> .. >> >> >> >> public void shutDown(); >> >> >> >> >> >> >> >> } >> >> >> >> How do I translate the jython NetworkDefinition object into one that java can understand? >> >> >> >> Thanks, >> >> Dana >> >> >> >> >> You have to have a Java interface for NetworkDefinition, and the corresponding Jython class must inherit from that. >> >> > > > ------------------------------------------------------------------------------ > SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, > Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW > http://p.sf.net/sfu/solaris-dev2dev > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |