You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-commits@lucene.apache.org by va...@apache.org on 2011/08/05 16:45:10 UTC

svn commit: r1154245 - in /lucene/pylucene/trunk/jcc/jcc/sources: JCCEnv.cpp JObject.cpp

Author: vajda
Date: Fri Aug  5 14:45:10 2011
New Revision: 1154245

URL: http://svn.apache.org/viewvc?rev=1154245&view=rev
Log:
 - improved recovery from toString() failure, displaying class name instead

Modified:
    lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
    lucene/pylucene/trunk/jcc/jcc/sources/JObject.cpp

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp?rev=1154245&r1=1154244&r2=1154245&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp Fri Aug  5 14:45:10 2011
@@ -839,9 +839,26 @@ char *JCCEnv::toUTF(jstring str) const
 
 char *JCCEnv::toString(jobject obj) const
 {
-    return obj
-        ? toUTF((jstring) callObjectMethod(obj, _mids[mid_obj_toString]))
-        : NULL;
+    try {
+        return obj
+            ? toUTF((jstring) callObjectMethod(obj, _mids[mid_obj_toString]))
+            : NULL;
+    } catch (int e) {
+        switch (e) {
+          case _EXC_PYTHON:
+            return NULL;
+          case _EXC_JAVA: {
+              JNIEnv *vm_env = get_vm_env();
+
+              vm_env->ExceptionDescribe();
+              vm_env->ExceptionClear();
+
+              return NULL;
+          }
+          default:
+            throw;
+        }
+    }
 }
 
 char *JCCEnv::getClassName(jobject obj) const

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JObject.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JObject.cpp?rev=1154245&r1=1154244&r2=1154245&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JObject.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JObject.cpp Fri Aug  5 14:45:10 2011
@@ -143,10 +143,18 @@ static PyObject *t_JObject_str(t_JObject
     if (self->object.this$)
     {
         char *utf = env->toString(self->object.this$);
-        PyObject *unicode = PyUnicode_DecodeUTF8(utf, strlen(utf), "strict");
 
-        delete utf;
-        return unicode;
+        if (utf == NULL)
+            utf = env->getClassName(self->object.this$);
+
+        if (utf != NULL)
+        {
+            PyObject *unicode =
+                PyUnicode_DecodeUTF8(utf, strlen(utf), "strict");
+
+            delete utf;
+            return unicode;
+        }
     }
 
     return PyString_FromString("<null>");