+static cjni_callback_info_t *cjni_callback_info_create (JNIEnv *jvm_env, /* {{{ */
+ jobject obj, const char *method_name, const char *signature)
+{
+ cjni_callback_info_t *cbi;
+
+ cbi = (cjni_callback_info_t *) malloc (sizeof (*cbi));
+ if (cbi == NULL)
+ {
+ ERROR ("java plugin: cjni_callback_info_create: malloc failed.");
+ return (NULL);
+ }
+ memset (cbi, 0, sizeof (*cbi));
+
+ cbi->class = (*jvm_env)->GetObjectClass (jvm_env, obj);
+ if (cbi->class == NULL)
+ {
+ ERROR ("java plugin: cjni_callback_info_create: GetObjectClass failed.");
+ free (cbi);
+ return (NULL);
+ }
+
+ cbi->object = obj;
+
+ cbi->method = (*jvm_env)->GetMethodID (jvm_env, cbi->class,
+ method_name, signature);
+ if (cbi->method == NULL)
+ {
+ ERROR ("java plugin: cjni_callback_info_create: "
+ "Cannot find the `%s' method with signature `%s'.",
+ method_name, signature);
+ free (cbi);
+ return (NULL);
+ }
+
+ (*jvm_env)->NewGlobalRef (jvm_env, obj);
+
+ return (cbi);
+} /* }}} cjni_callback_info_t cjni_callback_info_create */
+