lucene-pylucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andi Vajda <>
Subject Re: throwing an exception *through* Java?
Date Mon, 27 Sep 2010 20:26:45 GMT

On Mon, 27 Sep 2010, Bill Janssen wrote:

> Here's a printout of what I'm seeing:
>  UpLibQueryParser.parse('_query_language:nl janssen')...
>  => lucene.VERSION: 3.0.2 , jcc._jcc.JCC_VERSION 2.6
>  => Exception received is JavaError(<Throwable: org.apache.jcc.PythonException:
Query specifies language 'nl'
>  Traceback (most recent call last):
>    File "/u/python/uplib/", line 591, in getFieldQuery
>      raise RequiresQueryLanguage(text)
>  __main__.RequiresQueryLanguage: Query specifies language 'nl'
>  >,)

You are using --shared because the exception you're getting is 

> Is there some way to check to see if lucene is using --shared at runtime?

No direct way that I can think of at the moment.

So, it looks like you're getting a JavaError that wraps a PythonException.
Yet it's wrapped by a JavaError. This could mean that the test that checks 
if the PythonException instance is of class PythonException line 426 in 
JCCEnv.cpp is failing.

As a hack, try changing that line to do a string compare on the class names 
instead. Or just force it to true, even.

If that solves the problem, then you have an issue where this class, 
PythonException is loaded multiple times. You might want to consider using 
the new --import flag with --shared to better share common classes between 
your modules. That being said, PythonException comes from the JCC runtime 
itself, so it shouldn't be duplicated that way but I've been fooled by 
class loaders before.


> The actual exception class I'm raising:
>  class RequiresQueryLanguage (Exception):
>      def __init__(self, msg):
>          Exception.__init__(self, "Query specifies language '%s'" % msg)
>          self.language = msg
> from this code segment:
>            elif (fieldname == "_query_language"):
>                if not _check_analyzer(self.getAnalyzer(), fieldtext):
>                    raise RequiresQueryLanguage(fieldtext)
>                else:
>                    # we want to remove it if the condition is satisfied
>                    return None
> Bill

View raw message