<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>In other words, the return value may affect which method is called. Since you broke the interface contract by returning  a concrete class, it cannot find the concrete class (Which one to choose from?).  I think the highest return type in the hierarchy may be the return type in pyjnius (but might need a bit more research).  I don’t know enough about pyjnius internals, and if we can’t get support from kivy (try GitHub next), I don’t know if we should make it the centerpiece of our API.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>It seems apparent to me that the interface type is being returned somehow, I just don’t know how, except in a signature, which would likely strip the type information about the concrete class.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I’m no genius, just guessing here. I’d rather use a broken, but working SAI than fix pyjnius.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='border:none;padding:0in'><b>From: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Sent: </b>Monday, April 22, 2019 11:27 PM<br><b>To: </b><a href="mailto:brutzman@nps.edu">Brutzman, Donald (Don) (CIV)</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>RE: [x3d-public] Sample X3D Python API;examplespublishedforcontinuing improvement</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I think it has something to do with the method signatures and how pyjnius handles them.   The jar has the abstract class, so any code in Java which references the abstract class will load it.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>See my code for a non-SAI solution.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Locations of X3DViewpointNode:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>$ find . -type f -print0| xargs -0 grep -l X3DViewpointNode<o:p></o:p></p><p class=MsoNormal>./classes.json<o:p></o:p></p><p class=MsoNormal>./fieldTypes.js<o:p></o:p></p><p class=MsoNormal>./mapToMethod.js<o:p></o:p></p><p class=MsoNormal>./org/web3d/x3d/sai/Navigation/X3DViewpointNode.py<o:p></o:p></p><p class=MsoNormal>./X3Dautoclass.py<o:p></o:p></p><p class=MsoNormal>./__pycache__/X3Dautoclass.cpython-36.pyc<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>So you can try removing X3DViewpointNode.py and X3Dautoclass.py for a test.  I am happy with my fix until we find something we can’t fix.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>John<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b>From: </b><a href="mailto:brutzman@nps.edu">Brutzman, Donald (Don) (CIV)</a><br><b>Sent: </b>Monday, April 22, 2019 10:57 PM<br><b>To: </b><a href="mailto:yottzumm@gmail.com">John Carlson</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] Sample X3D Python API; examplespublishedforcontinuing improvement<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Our messages crossed but are quite similar... we might have the problem surrounded I hope...<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 4/22/2019 8:45 PM, John Carlson wrote:<o:p></o:p></p><p class=MsoNormal>> This is a more broad problem than pyjnius, and is likely a Java problem that is letting things past the interface contract.  Okay, I will try to explain what the bug is:<o:p></o:p></p><p class=MsoNormal>> <o:p></o:p></p><p class=MsoNormal>> setDEF in X3DViewpointNode returns an X3DViewpointNode (interface)<o:p></o:p></p><p class=MsoNormal>> <o:p></o:p></p><p class=MsoNormal>> public X3DViewpointNode setDEF(String newValue);<o:p></o:p></p><p class=MsoNormal>[...]<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please make sure that you have _no_ references to abstract class X3DViewpointNode anywhere in your code.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The Java source for concrete class ViewpointObject specifically overrides its abstract parent superclass with an @Override annotation.  Inside X3DJSAIL the setDEF() method correctly returns type ViewpointObject.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If we remove all references to X3D*Node abstract classes everywhere and the problem still occurs, then<o:p></o:p></p><p class=MsoNormal>- perhaps not all of those definitions are removed, or<o:p></o:p></p><p class=MsoNormal>- perhaps an old file in the path is somehow visible, or<o:p></o:p></p><p class=MsoNormal>- we have isolated a bug in Pyjnius that we can ask them to fix.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Good luck sir.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>all the best, Don<o:p></o:p></p><p class=MsoNormal>-- <o:p></o:p></p><p class=MsoNormal>Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman@nps.edu<o:p></o:p></p><p class=MsoNormal>Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149<o:p></o:p></p><p class=MsoNormal>X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>