jvpp: ignore messages if callback method is missing (VPP-548) 79/7979/3
authorMarek Gradzki <mgradzki@cisco.com>
Thu, 10 Aug 2017 12:57:42 +0000 (14:57 +0200)
committerDave Wallace <dwallacelf@gmail.com>
Mon, 14 Aug 2017 14:39:16 +0000 (14:39 +0000)
Change-Id: I6a06dbcd8339bd6645a6b02ae70154aa0885dcf8
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
src/vpp-api/java/jvpp/gen/jvppgen/jvpp_c_gen.py

index 1425cdb..7e59cc4 100644 (file)
@@ -226,11 +226,19 @@ static void vl_api_${handler_name}_t_handler (vl_api_${handler_name}_t * mp)
 {
     ${plugin_name}_main_t *plugin_main = &${plugin_name}_main;
     JNIEnv *env = jvpp_main.jenv;
+    jthrowable exc;
 
     $err_handler
 
     jmethodID constructor = (*env)->GetMethodID(env, ${class_ref_name}Class, "<init>", "()V");
     jmethodID callbackMethod = (*env)->GetMethodID(env, plugin_main->callbackClass, "on${dto_name}", "(Lio/fd/vpp/jvpp/${plugin_name}/dto/${dto_name};)V");
+    exc = (*env)->ExceptionOccurred(env);
+    if (exc) {
+        clib_warning("Unable to extract on${dto_name} method reference from ${plugin_name} plugin's callbackClass. Ignoring message.\\n");
+        (*env)->ExceptionDescribe(env);
+        (*env)->ExceptionClear(env);
+        return;
+    }
 
     jobject dto = (*env)->NewObject(env, ${class_ref_name}Class, constructor);
     $dto_setters