native exception handling added
authorAndrey Pavlenko <no@email>
Mon, 11 Jul 2011 15:28:09 +0000 (15:28 +0000)
committerAndrey Pavlenko <no@email>
Mon, 11 Jul 2011 15:28:09 +0000 (15:28 +0000)
modules/java/gen_java.py
modules/java/src/java/CvException.java [new file with mode: 0644]

index 7e2e7f9..b085dc5 100644 (file)
@@ -503,11 +503,14 @@ class JavaWrapperGenerator(object):
             # jni_func(..) { return cv_func(..); }\r
             ret = "return "\r
             ext = ""\r
+            default = "return 0"\r
             if fi.ctype == "void":\r
                 ret = ""\r
+                default = ""\r
             elif fi.ctype == "string":\r
                 ret = "return env->NewStringUTF"\r
                 ext = ".c_str()"\r
+                default = 'return env->NewStringUTF("")'\r
             elif fi.ctype in self.classes: # wrapped class:\r
                 ret = "return (jlong) new " + self.classes[fi.ctype].jname\r
 \r
@@ -537,9 +540,22 @@ class JavaWrapperGenerator(object):
 JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_$fname\r
   ($args)\r
 {\r
-    //LOGD("$module::$fname()");\r
-    $j2cv\r
-    $ret( $cvname( $cvargs )$ext );\r
+    try {\r
+        //LOGD("$module::$fname()");\r
+        $j2cv\r
+        $ret( $cvname( $cvargs )$ext );\r
+    } catch(cv::Exception e) {\r
+        //LOGD("$module::$fname() catched cv::Exception: %s", e.what());\r
+        jclass je = env->FindClass("org/opencv/CvException");\r
+        if(!je) je = env->FindClass("java/lang/Exception");\r
+        env->ThrowNew(je, e.what());\r
+        $default;\r
+    } catch (...) {\r
+        //LOGD("$module::$fname() catched ...");\r
+        jclass je = env->FindClass("java/lang/Exception");\r
+        env->ThrowNew(je, "Unknown exception in JNI code {$module::$fname()}");\r
+        $default;\r
+    }\r
 }\r
 \r
 \r
@@ -553,6 +569,7 @@ JNIEXPORT $rtype JNICALL Java_org_opencv_${module}_$fname
         cvname = cvname, \\r
         cvargs = ", ".join([a for a in cvargs]), \\r
         ext = ext, \\r
+        default = default\r
     ) )\r
 \r
             # processing args with default values\r
diff --git a/modules/java/src/java/CvException.java b/modules/java/src/java/CvException.java
new file mode 100644 (file)
index 0000000..824c855
--- /dev/null
@@ -0,0 +1,15 @@
+package org.opencv;\r
+\r
+public class CvException extends Exception {\r
+\r
+       private static final long serialVersionUID = 1L;\r
+\r
+       public CvException(String msg) {\r
+               super(msg);\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               return "CvException [" + super.toString() + "]";\r
+       }\r
+}\r