2 * //******************************************************************
4 * // Copyright 2015 Intel Corporation.
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * // Licensed under the Apache License, Version 2.0 (the "License");
9 * // you may not use this file except in compliance with the License.
10 * // You may obtain a copy of the License at
12 * // http://www.apache.org/licenses/LICENSE-2.0
14 * // Unless required by applicable law or agreed to in writing, software
15 * // distributed under the License is distributed on an "AS IS" BASIS,
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * // See the License for the specific language governing permissions and
18 * // limitations under the License.
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 #include "JniOcStack.h"
24 #include "OCPlatform.h"
25 #include "OCRepresentation.h"
30 jclass g_cls_Integer = NULL;
31 jclass g_cls_int1DArray = NULL;
32 jclass g_cls_int2DArray = NULL;
33 jclass g_cls_Double = NULL;
34 jclass g_cls_double1DArray = NULL;
35 jclass g_cls_double2DArray = NULL;
36 jclass g_cls_Boolean = NULL;
37 jclass g_cls_boolean1DArray = NULL;
38 jclass g_cls_boolean2DArray = NULL;
39 jclass g_cls_String = NULL;
40 jclass g_cls_String1DArray = NULL;
41 jclass g_cls_String2DArray = NULL;
42 jclass g_cls_LinkedList = NULL;
43 jclass g_cls_Map = NULL;
44 jclass g_cls_MapEntry = NULL;
45 jclass g_cls_Set = NULL;
46 jclass g_cls_Iterator = NULL;
47 jclass g_cls_HashMap = NULL;
48 jclass g_cls_OcException = NULL;
49 jclass g_cls_OcResource = NULL;
50 jclass g_cls_OcRepresentation = NULL;
51 jclass g_cls_OcRepresentation1DArray = NULL;
52 jclass g_cls_OcRepresentation2DArray = NULL;
53 jclass g_cls_OcResourceRequest = NULL;
54 jclass g_cls_OcResourceResponse = NULL;
55 jclass g_cls_OcResourceHandle = NULL;
56 jclass g_cls_OcPresenceHandle = NULL;
57 jclass g_cls_OcRequestHandle = NULL;
58 jclass g_cls_OcPresenceStatus = NULL;
59 jclass g_cls_OcHeaderOption = NULL;
60 jclass g_cls_ObservationInfo = NULL;
61 jclass g_cls_OcResourceIdentifier = NULL;
63 jclass g_cls_OcProvisionResult = NULL;
64 jclass g_cls_OcSecureResource = NULL;
65 jclass g_cls_OcOicSecAcl = NULL;
67 jmethodID g_mid_Integer_ctor = NULL;
68 jmethodID g_mid_Double_ctor = NULL;
69 jmethodID g_mid_Boolean_ctor = NULL;
70 jmethodID g_mid_LinkedList_ctor = NULL;
71 jmethodID g_mid_LinkedList_add_object = NULL;
72 jmethodID g_mid_Map_entrySet = NULL;
73 jmethodID g_mid_MapEntry_getKey = NULL;
74 jmethodID g_mid_MapEntry_getValue = NULL;
75 jmethodID g_mid_Set_iterator = NULL;
76 jmethodID g_mid_Iterator_hasNext = NULL;
77 jmethodID g_mid_Iterator_next = NULL;
78 jmethodID g_mid_HashMap_ctor = NULL;
79 jmethodID g_mid_HashMap_put = NULL;
80 jmethodID g_mid_OcException_ctor = NULL;
81 jmethodID g_mid_OcException_setNativeExceptionLocation = NULL;
82 jmethodID g_mid_OcResource_ctor = NULL;
83 jmethodID g_mid_OcRepresentation_N_ctor = NULL;
84 jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;
85 jmethodID g_mid_OcResourceRequest_N_ctor = NULL;
86 jmethodID g_mid_OcResourceResponse_N_ctor = NULL;
87 jmethodID g_mid_OcResourceHandle_N_ctor = NULL;
88 jmethodID g_mid_OcPresenceHandle_N_ctor = NULL;
89 jmethodID g_mid_OcRequestHandle_N_ctor = NULL;
90 jmethodID g_mid_OcHeaderOption_ctor = NULL;
91 jmethodID g_mid_OcHeaderOption_get_id = NULL;
92 jmethodID g_mid_OcHeaderOption_get_data = NULL;
93 jmethodID g_mid_ObservationInfo_N_ctor = NULL;
94 jmethodID g_mid_OcPresenceStatus_get = NULL;
95 jmethodID g_mid_OcResourceIdentifier_N_ctor = NULL;
97 jmethodID g_mid_OcProvisionResult_ctor = NULL;
98 jmethodID g_mid_OcSecureResource_ctor = NULL;
100 jmethodID g_mid_OcOicSecAcl_get_subject = NULL;
101 jmethodID g_mid_OcOicSecAcl_get_resources_cnt = NULL;
102 jmethodID g_mid_OcOicSecAcl_get_resources = NULL;
103 jmethodID g_mid_OcOicSecAcl_get_permission = NULL;
104 jmethodID g_mid_OcOicSecAcl_get_periods_cnt = NULL;
105 jmethodID g_mid_OcOicSecAcl_get_periods = NULL;
106 jmethodID g_mid_OcOicSecAcl_get_recurrences = NULL;
107 jmethodID g_mid_OcOicSecAcl_get_owners_cnt = NULL;
108 jmethodID g_mid_OcOicSecAcl_get_owners = NULL;
110 jobject getOcException(JNIEnv* env, const char* file, const char* functionName,
111 const int line, const int code, const char* message)
113 std::string codeStr = JniUtils::stackResultToStr(code);
116 codeStr = JniUtils::stackResultToStr(JNI_INVALID_VALUE);
118 jobject ex = env->NewObject(g_cls_OcException,
119 g_mid_OcException_ctor,
120 env->NewStringUTF(codeStr.c_str()),
121 env->NewStringUTF(message));
126 env->CallVoidMethod(ex,
127 g_mid_OcException_setNativeExceptionLocation,
128 env->NewStringUTF(file),
129 env->NewStringUTF(functionName),
131 if (env->ExceptionCheck())
138 void throwOcException(JNIEnv* env, jobject ex)
140 env->Throw((jthrowable)ex);
144 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
150 if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
152 LOGE("Failed to get the environment using GetEnv()");
156 jclass clazz = nullptr;
159 clazz = env->FindClass("java/lang/Integer");
160 if (!clazz) return JNI_ERR;
161 g_cls_Integer = (jclass)env->NewGlobalRef(clazz);
162 env->DeleteLocalRef(clazz);
164 g_mid_Integer_ctor = env->GetMethodID(g_cls_Integer, "<init>", "(I)V");
165 if (!g_mid_Integer_ctor) return JNI_ERR;
167 clazz = env->FindClass("[I");
168 if (!clazz) return JNI_ERR;
169 g_cls_int1DArray = (jclass)env->NewGlobalRef(clazz);
170 env->DeleteLocalRef(clazz);
172 clazz = env->FindClass("[[I");
173 if (!clazz) return JNI_ERR;
174 g_cls_int2DArray = (jclass)env->NewGlobalRef(clazz);
175 env->DeleteLocalRef(clazz);
178 clazz = env->FindClass("java/lang/Double");
179 if (!clazz) return JNI_ERR;
180 g_cls_Double = (jclass)env->NewGlobalRef(clazz);
181 env->DeleteLocalRef(clazz);
183 g_mid_Double_ctor = env->GetMethodID(g_cls_Double, "<init>", "(D)V");
184 if (!g_mid_Double_ctor) return JNI_ERR;
186 clazz = env->FindClass("[D");
187 if (!clazz) return JNI_ERR;
188 g_cls_double1DArray = (jclass)env->NewGlobalRef(clazz);
189 env->DeleteLocalRef(clazz);
191 clazz = env->FindClass("[[D");
192 if (!clazz) return JNI_ERR;
193 g_cls_double2DArray = (jclass)env->NewGlobalRef(clazz);
194 env->DeleteLocalRef(clazz);
197 clazz = env->FindClass("java/lang/Boolean");
198 if (!clazz) return JNI_ERR;
199 g_cls_Boolean = (jclass)env->NewGlobalRef(clazz);
200 env->DeleteLocalRef(clazz);
202 g_mid_Boolean_ctor = env->GetMethodID(g_cls_Boolean, "<init>", "(Z)V");
203 if (!g_mid_Boolean_ctor) return JNI_ERR;
205 clazz = env->FindClass("[Z");
206 if (!clazz) return JNI_ERR;
207 g_cls_boolean1DArray = (jclass)env->NewGlobalRef(clazz);
208 env->DeleteLocalRef(clazz);
210 clazz = env->FindClass("[[Z");
211 if (!clazz) return JNI_ERR;
212 g_cls_boolean2DArray = (jclass)env->NewGlobalRef(clazz);
213 env->DeleteLocalRef(clazz);
216 clazz = env->FindClass("java/lang/String");
217 if (!clazz) return JNI_ERR;
218 g_cls_String = (jclass)env->NewGlobalRef(clazz);
219 env->DeleteLocalRef(clazz);
221 clazz = env->FindClass("[Ljava/lang/String;");
222 if (!clazz) return JNI_ERR;
223 g_cls_String1DArray = (jclass)env->NewGlobalRef(clazz);
224 env->DeleteLocalRef(clazz);
226 clazz = env->FindClass("[[Ljava/lang/String;");
227 if (!clazz) return JNI_ERR;
228 g_cls_String2DArray = (jclass)env->NewGlobalRef(clazz);
229 env->DeleteLocalRef(clazz);
232 clazz = env->FindClass("java/util/LinkedList");
233 if (!clazz) return JNI_ERR;
234 g_cls_LinkedList = (jclass)env->NewGlobalRef(clazz);
235 env->DeleteLocalRef(clazz);
237 g_mid_LinkedList_ctor = env->GetMethodID(g_cls_LinkedList, "<init>", "()V");
238 if (!g_mid_LinkedList_ctor) return JNI_ERR;
240 g_mid_LinkedList_add_object = env->GetMethodID(g_cls_LinkedList, "add", "(Ljava/lang/Object;)Z");
241 if (!g_mid_LinkedList_add_object) return JNI_ERR;
244 clazz = env->FindClass("java/util/Map");
245 if (!clazz) return JNI_ERR;
246 g_cls_Map = (jclass)env->NewGlobalRef(clazz);
247 env->DeleteLocalRef(clazz);
249 g_mid_Map_entrySet = env->GetMethodID(g_cls_Map, "entrySet", "()Ljava/util/Set;");
250 if (!g_mid_Map_entrySet) return JNI_ERR;
253 clazz = env->FindClass("java/util/Map$Entry");
254 if (!clazz) return JNI_ERR;
255 g_cls_MapEntry = (jclass)env->NewGlobalRef(clazz);
256 env->DeleteLocalRef(clazz);
258 g_mid_MapEntry_getKey = env->GetMethodID(g_cls_MapEntry, "getKey", "()Ljava/lang/Object;");
259 if (!g_mid_MapEntry_getKey) return JNI_ERR;
260 g_mid_MapEntry_getValue = env->GetMethodID(g_cls_MapEntry, "getValue", "()Ljava/lang/Object;");
261 if (!g_mid_MapEntry_getValue) return JNI_ERR;
264 clazz = env->FindClass("java/util/Set");
265 if (!clazz) return JNI_ERR;
266 g_cls_Set = (jclass)env->NewGlobalRef(clazz);
267 env->DeleteLocalRef(clazz);
269 g_mid_Set_iterator = env->GetMethodID(g_cls_Set, "iterator", "()Ljava/util/Iterator;");
270 if (!g_mid_Set_iterator) return JNI_ERR;
273 clazz = env->FindClass("java/util/Iterator");
274 if (!clazz) return JNI_ERR;
275 g_cls_Iterator = (jclass)env->NewGlobalRef(clazz);
276 env->DeleteLocalRef(clazz);
278 g_mid_Iterator_hasNext = env->GetMethodID(g_cls_Iterator, "hasNext", "()Z");
279 if (!g_mid_Iterator_hasNext) return JNI_ERR;
281 g_mid_Iterator_next = env->GetMethodID(g_cls_Iterator, "next", "()Ljava/lang/Object;");
282 if (!g_mid_Iterator_next) return JNI_ERR;
285 clazz = env->FindClass("java/util/HashMap");
286 if (!clazz) return JNI_ERR;
287 g_cls_HashMap = (jclass)env->NewGlobalRef(clazz);
288 env->DeleteLocalRef(clazz);
290 g_mid_HashMap_ctor = env->GetMethodID(g_cls_HashMap, "<init>", "()V");
291 if (!g_mid_HashMap_ctor) return JNI_ERR;
293 g_mid_HashMap_put = env->GetMethodID(g_cls_HashMap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
294 if (!g_mid_HashMap_put) return JNI_ERR;
297 clazz = env->FindClass("org/iotivity/base/OcException");
298 if (!clazz) return JNI_ERR;
299 g_cls_OcException = (jclass)env->NewGlobalRef(clazz);
300 env->DeleteLocalRef(clazz);
302 g_mid_OcException_ctor = env->GetMethodID(g_cls_OcException, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");
303 if (!g_mid_OcException_ctor) return JNI_ERR;
305 g_mid_OcException_setNativeExceptionLocation = env->GetMethodID(g_cls_OcException, "setNativeExceptionLocation",
306 "(Ljava/lang/String;""Ljava/lang/String;""I)V");
307 if (!g_mid_OcException_setNativeExceptionLocation) return JNI_ERR;
310 clazz = env->FindClass("org/iotivity/base/OcResource");
311 if (!clazz) return JNI_ERR;
312 g_cls_OcResource = (jclass)env->NewGlobalRef(clazz);
313 env->DeleteLocalRef(clazz);
315 g_mid_OcResource_ctor = env->GetMethodID(g_cls_OcResource, "<init>", "(J)V");
316 if (!g_mid_OcResource_ctor) return JNI_ERR;
319 clazz = env->FindClass("org/iotivity/base/OcRepresentation");
320 if (!clazz) return JNI_ERR;
321 g_cls_OcRepresentation = (jclass)env->NewGlobalRef(clazz);
322 env->DeleteLocalRef(clazz);
324 g_mid_OcRepresentation_N_ctor = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(J)V");
325 if (!g_mid_OcRepresentation_N_ctor) return JNI_ERR;
327 g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");
328 if (!g_mid_OcRepresentation_N_ctor_bool) return JNI_ERR;
330 clazz = env->FindClass("[Lorg/iotivity/base/OcRepresentation;");
331 if (!clazz) return JNI_ERR;
332 g_cls_OcRepresentation1DArray = (jclass)env->NewGlobalRef(clazz);
333 env->DeleteLocalRef(clazz);
335 clazz = env->FindClass("[[Lorg/iotivity/base/OcRepresentation;");
336 if (!clazz) return JNI_ERR;
337 g_cls_OcRepresentation2DArray = (jclass)env->NewGlobalRef(clazz);
338 env->DeleteLocalRef(clazz);
341 clazz = env->FindClass("org/iotivity/base/OcHeaderOption");
342 if (!clazz) return JNI_ERR;
343 g_cls_OcHeaderOption = (jclass)env->NewGlobalRef(clazz);
344 env->DeleteLocalRef(clazz);
345 g_mid_OcHeaderOption_ctor = env->GetMethodID(g_cls_OcHeaderOption, "<init>", "(ILjava/lang/String;)V");
346 if (!g_mid_OcHeaderOption_ctor) return JNI_ERR;
348 g_mid_OcHeaderOption_get_id = env->GetMethodID(g_cls_OcHeaderOption, "getOptionId", "()I");
349 if (!g_mid_OcHeaderOption_get_id) return JNI_ERR;
351 g_mid_OcHeaderOption_get_data = env->GetMethodID(g_cls_OcHeaderOption, "getOptionData", "()Ljava/lang/String;");
352 if (!g_mid_OcHeaderOption_get_data) return JNI_ERR;
355 clazz = env->FindClass("org/iotivity/base/OcResourceRequest");
356 if (!clazz) return JNI_ERR;
357 g_cls_OcResourceRequest = (jclass)env->NewGlobalRef(clazz);
358 env->DeleteLocalRef(clazz);
360 g_mid_OcResourceRequest_N_ctor = env->GetMethodID(g_cls_OcResourceRequest, "<init>", "(J)V");
361 if (!g_mid_OcResourceRequest_N_ctor) return JNI_ERR;
364 clazz = env->FindClass("org/iotivity/base/OcResourceResponse");
365 if (!clazz) return JNI_ERR;
366 g_cls_OcResourceResponse = (jclass)env->NewGlobalRef(clazz);
367 env->DeleteLocalRef(clazz);
369 g_mid_OcResourceResponse_N_ctor = env->GetMethodID(g_cls_OcResourceResponse, "<init>", "(J)V");
370 if (!g_mid_OcResourceResponse_N_ctor) return JNI_ERR;
373 clazz = env->FindClass("org/iotivity/base/OcResourceHandle");
374 if (!clazz) return JNI_ERR;
375 g_cls_OcResourceHandle = (jclass)env->NewGlobalRef(clazz);
376 env->DeleteLocalRef(clazz);
377 g_mid_OcResourceHandle_N_ctor = env->GetMethodID(g_cls_OcResourceHandle, "<init>", "(J)V");
378 if (!g_mid_OcResourceHandle_N_ctor) return JNI_ERR;
381 clazz = env->FindClass("org/iotivity/base/OcPresenceHandle");
382 if (!clazz) return JNI_ERR;
383 g_cls_OcPresenceHandle = (jclass)env->NewGlobalRef(clazz);
384 env->DeleteLocalRef(clazz);
385 g_mid_OcPresenceHandle_N_ctor = env->GetMethodID(g_cls_OcPresenceHandle, "<init>", "(J)V");
386 if (!g_mid_OcPresenceHandle_N_ctor) return JNI_ERR;
389 clazz = env->FindClass("org/iotivity/base/OcRequestHandle");
390 if (!clazz) return JNI_ERR;
391 g_cls_OcRequestHandle = (jclass)env->NewGlobalRef(clazz);
392 env->DeleteLocalRef(clazz);
393 g_mid_OcRequestHandle_N_ctor = env->GetMethodID(g_cls_OcRequestHandle, "<init>", "(J)V");
394 if (!g_mid_OcRequestHandle_N_ctor) return JNI_ERR;
397 clazz = env->FindClass("org/iotivity/base/OcPresenceStatus");
398 if (!clazz) return JNI_ERR;
399 g_cls_OcPresenceStatus = (jclass)env->NewGlobalRef(clazz);
400 env->DeleteLocalRef(clazz);
401 g_mid_OcPresenceStatus_get = env->GetStaticMethodID(g_cls_OcPresenceStatus, "get",
402 "(Ljava/lang/String;)Lorg/iotivity/base/OcPresenceStatus;");
403 if (!g_mid_OcPresenceStatus_get) return JNI_ERR;
406 clazz = env->FindClass("org/iotivity/base/ObservationInfo");
407 if (!clazz) return JNI_ERR;
408 g_cls_ObservationInfo = (jclass)env->NewGlobalRef(clazz);
409 env->DeleteLocalRef(clazz);
410 g_mid_ObservationInfo_N_ctor = env->GetMethodID(g_cls_ObservationInfo, "<init>", "(IB)V");
411 if (!g_mid_ObservationInfo_N_ctor) return JNI_ERR;
413 clazz = env->FindClass("org/iotivity/base/OcResourceIdentifier");
414 if (!clazz) return JNI_ERR;
415 g_cls_OcResourceIdentifier = (jclass)env->NewGlobalRef(clazz);
416 env->DeleteLocalRef(clazz);
417 g_mid_OcResourceIdentifier_N_ctor = env->GetMethodID(g_cls_OcResourceIdentifier, "<init>", "(J)V");
418 if (!g_mid_OcResourceIdentifier_N_ctor) return JNI_ERR;
421 clazz = env->FindClass("org/iotivity/base/OcSecureResource");
422 if (!clazz) return JNI_ERR;
423 g_cls_OcSecureResource = (jclass)env->NewGlobalRef(clazz);
424 env->DeleteLocalRef(clazz);
425 g_mid_OcSecureResource_ctor = env->GetMethodID(g_cls_OcSecureResource, "<init>", "(J)V");
426 if (!g_mid_OcSecureResource_ctor) return JNI_ERR;
429 clazz = env->FindClass("org/iotivity/base/ProvisionResult");
430 if (!clazz) return JNI_ERR;
431 g_cls_OcProvisionResult = (jclass)env->NewGlobalRef(clazz);
432 env->DeleteLocalRef(clazz);
433 g_mid_OcProvisionResult_ctor = env->GetMethodID(g_cls_OcProvisionResult, "<init>", "(Ljava/lang/String;I)V");
434 if (!g_mid_OcProvisionResult_ctor) return JNI_ERR;
437 clazz = env->FindClass("org/iotivity/base/OicSecAcl");
438 if (!clazz) return JNI_ERR;
439 g_cls_OcOicSecAcl = (jclass)env->NewGlobalRef(clazz);
440 env->DeleteLocalRef(clazz);
442 g_mid_OcOicSecAcl_get_subject = env->GetMethodID(g_cls_OcOicSecAcl, "getSubject", "()Ljava/lang/String;");
443 if (!g_mid_OcOicSecAcl_get_subject) return JNI_ERR;
445 g_mid_OcOicSecAcl_get_resources_cnt = env->GetMethodID(g_cls_OcOicSecAcl, "getResourcesCount", "()I");
446 if (!g_mid_OcOicSecAcl_get_resources_cnt) return JNI_ERR;
448 g_mid_OcOicSecAcl_get_resources = env->GetMethodID(g_cls_OcOicSecAcl, "getResources", "(I)Ljava/lang/String;");
449 if (!g_mid_OcOicSecAcl_get_resources) return JNI_ERR;
451 g_mid_OcOicSecAcl_get_permission = env->GetMethodID(g_cls_OcOicSecAcl, "getPermission", "()I");
452 if (!g_mid_OcOicSecAcl_get_permission) return JNI_ERR;
454 g_mid_OcOicSecAcl_get_periods_cnt = env->GetMethodID(g_cls_OcOicSecAcl, "getPeriodsCount", "()I");
455 if (!g_mid_OcOicSecAcl_get_periods_cnt) return JNI_ERR;
457 g_mid_OcOicSecAcl_get_periods = env->GetMethodID(g_cls_OcOicSecAcl, "getPeriods", "(I)Ljava/lang/String;");
458 if (!g_mid_OcOicSecAcl_get_periods) return JNI_ERR;
460 g_mid_OcOicSecAcl_get_recurrences = env->GetMethodID(g_cls_OcOicSecAcl, "getRecurrences", "(I)Ljava/lang/String;");
461 if (!g_mid_OcOicSecAcl_get_recurrences) return JNI_ERR;
463 g_mid_OcOicSecAcl_get_owners_cnt = env->GetMethodID(g_cls_OcOicSecAcl, "getOwnersCount", "()I");
464 if (!g_mid_OcOicSecAcl_get_owners_cnt) return JNI_ERR;
466 g_mid_OcOicSecAcl_get_owners = env->GetMethodID(g_cls_OcOicSecAcl, "getOwners", "(I)Ljava/lang/String;");
467 if (!g_mid_OcOicSecAcl_get_owners) return JNI_ERR;
469 return JNI_CURRENT_VERSION;
472 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)
474 LOGI("JNI_OnUnload");
477 if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)
479 LOGE("Failed to get the environment using GetEnv()");
483 env->DeleteGlobalRef(g_cls_Integer);
484 env->DeleteGlobalRef(g_cls_int1DArray);
485 env->DeleteGlobalRef(g_cls_int2DArray);
486 env->DeleteGlobalRef(g_cls_Double);
487 env->DeleteGlobalRef(g_cls_double1DArray);
488 env->DeleteGlobalRef(g_cls_double2DArray);
489 env->DeleteGlobalRef(g_cls_Boolean);
490 env->DeleteGlobalRef(g_cls_boolean1DArray);
491 env->DeleteGlobalRef(g_cls_boolean2DArray);
492 env->DeleteGlobalRef(g_cls_String);
493 env->DeleteGlobalRef(g_cls_String1DArray);
494 env->DeleteGlobalRef(g_cls_String2DArray);
495 env->DeleteGlobalRef(g_cls_LinkedList);
496 env->DeleteGlobalRef(g_cls_Map);
497 env->DeleteGlobalRef(g_cls_MapEntry);
498 env->DeleteGlobalRef(g_cls_Set);
499 env->DeleteGlobalRef(g_cls_Iterator);
500 env->DeleteGlobalRef(g_cls_HashMap);
501 env->DeleteGlobalRef(g_cls_OcResource);
502 env->DeleteGlobalRef(g_cls_OcException);
503 env->DeleteGlobalRef(g_cls_OcRepresentation);
504 env->DeleteGlobalRef(g_cls_OcRepresentation1DArray);
505 env->DeleteGlobalRef(g_cls_OcRepresentation2DArray);
506 env->DeleteGlobalRef(g_cls_OcResourceRequest);
507 env->DeleteGlobalRef(g_cls_OcResourceResponse);
508 env->DeleteGlobalRef(g_cls_OcResourceHandle);
509 env->DeleteGlobalRef(g_cls_OcPresenceHandle);
510 env->DeleteGlobalRef(g_cls_OcRequestHandle);
511 env->DeleteGlobalRef(g_cls_OcPresenceStatus);
512 env->DeleteGlobalRef(g_cls_OcHeaderOption);
513 env->DeleteGlobalRef(g_cls_ObservationInfo);
514 env->DeleteGlobalRef(g_cls_OcResourceIdentifier);
515 env->DeleteGlobalRef(g_cls_OcSecureResource);
516 env->DeleteGlobalRef(g_cls_OcProvisionResult);
517 env->DeleteGlobalRef(g_cls_OcOicSecAcl);