On Fri, 27 Feb 2009, Bill Janssen wrote:

Actually, the wrapping of neo4j doesn't work with the latest JCC -- it
just doesn't fail obviously.  However, some vital methods are not
produced for several classes.  For instance, the org.neo4j.api.core.Node
class doesn't have the vital method "hasRelationship(RelationshipType...)".
In fact, it doesn't seem to have a number of methods, like
"Iterable<Relationship> getRelationships()".

So, this is (I suppose) a variant of the Java 5 stuff not being
supported by PyLucene.

Might be nice to have JCC fail more obviously in this case...

No, this is different. It's not related to these Java 1.5 features.

It's because java.lang.Iterable is not 'known' to that JCC invocation by default.

As documented [1], to avoid runaway transitive closures, JCC will only wrap methods where all parameters and return type are part of the requested set of classes, jars or packages specified on the command line (see [1]).

A few core classes are 'known' by default, but java.lang.Iterable is not.
If you add --package java.lang to the invocation, these methods appear in the wrappers as expected.

You'd probably ask for --package java.lang to be part of the defaults and it's a reasonable request at first glance. In JCC's cpp.py, there is currently a list of classes considered always 'known' to JCC. java.lang.Iterable is not one of them. Maybe, again, it's because Iterable appeared in Java 1.5 (unsure).

Andi..

[1] http://lucene.apache.org/pylucene/jcc/documentation/readme.html#use

Reply via email to