Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
/*
 * 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;
}