saj_returnCode saj_construct_java_object( JNIEnv *env, const char *classname, PA_ADDRCAST gapi_obj_address, jobject *new_java_object) { saj_returnCode rc; /* construct a new java object */ rc = saj_create_new_java_object(env, classname, new_java_object); if(rc == SAJ_RETCODE_OK){ /* write the adress of the gapi object to the java object */ saj_write_gapi_address(env, *new_java_object, gapi_obj_address); /* write the adress of the java object to the gapi object */ saj_write_java_address(env, (gapi_object)gapi_obj_address, *new_java_object); } return rc; }
/* * Class: org_opensplice_dds_dcps_FooTypeSupportImpl * Method: jniAlloc * Signature: (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL SAJ_FUNCTION(jniAlloc) ( JNIEnv *env, jclass object, jobject TypeSupport, jstring type_name, jstring key_list, jarray type_descriptor) { const char *typeName; const char *keyList; char *typeDescriptor; PA_ADDRCAST typeSupport; int statusOK = TRUE; jsize type_descriptor_length; OS_UNUSED_ARG(object); typeName = (*env)->GetStringUTFChars (env, type_name, 0); /* Convert key_list */ keyList = (*env)->GetStringUTFChars (env, key_list, 0); /* Convert type_descriptor */ type_descriptor_length = (*env)->GetArrayLength(env, type_descriptor); typeDescriptor = os_malloc(type_descriptor_length * IDL_MAX_JSTRING_META_SIZE + 1); if (typeDescriptor) { jsize i; typeDescriptor[0] = '\0'; for (i = 0; i < type_descriptor_length && statusOK; i++) { jstring type_descriptor_frame = (jstring) (*env)->GetObjectArrayElement(env, type_descriptor, i); if (type_descriptor_frame) { const char *typeDescriptorFrame = (*env)->GetStringUTFChars (env, type_descriptor_frame, 0); if (typeDescriptorFrame) { os_strcat(typeDescriptor, typeDescriptorFrame); (*env)->ReleaseStringUTFChars (env, type_descriptor_frame, typeDescriptorFrame); } else { statusOK = FALSE; } } else { statusOK = FALSE; } } } if (typeName != NULL && keyList != NULL && typeDescriptor != NULL && statusOK) { typeSupport = (PA_ADDRCAST)gapi_fooTypeSupport__alloc ( typeName, keyList, typeDescriptor, NULL, /* type_load */ saj_copyInStruct, /* copyIn: copy in Java types */ saj_copyOutStruct, /* copyOut: copy out Java types */ 0, /* alloc_size */ NULL, /* alloc buffer */ NULL, /* writer copy */ saj_dataReaderCopy /* reader copy */ ); if (typeSupport) { saj_write_gapi_address (env, TypeSupport, typeSupport); saj_write_java_address (env, (gapi_object)typeSupport, TypeSupport); } else { return SAJ_RETCODE_ERROR; } } /* Release used strings */ if (type_name) { (*env)->ReleaseStringUTFChars (env, type_name, typeName); } if (key_list) { (*env)->ReleaseStringUTFChars (env, key_list, keyList); } if (typeDescriptor) { os_free(typeDescriptor); } return SAJ_RETCODE_OK; }