Imported Upstream version 0.9.1
[platform/upstream/iotivity.git] / android / android_api / base / jni / JniOcStack.cpp
1 /*\r
2 * //******************************************************************\r
3 * //\r
4 * // Copyright 2015 Intel Corporation.\r
5 * //\r
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
7 * //\r
8 * // Licensed under the Apache License, Version 2.0 (the "License");\r
9 * // you may not use this file except in compliance with the License.\r
10 * // You may obtain a copy of the License at\r
11 * //\r
12 * //      http://www.apache.org/licenses/LICENSE-2.0\r
13 * //\r
14 * // Unless required by applicable law or agreed to in writing, software\r
15 * // distributed under the License is distributed on an "AS IS" BASIS,\r
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
17 * // See the License for the specific language governing permissions and\r
18 * // limitations under the License.\r
19 * //\r
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
21 */\r
22 #include "JniOcStack.h"\r
23 #include "OCApi.h"\r
24 #include "OCPlatform.h"\r
25 #include "OCRepresentation.h"\r
26 #include "JniUtils.h"\r
27 \r
28 JavaVM* g_jvm = NULL;\r
29 \r
30 jclass g_cls_Integer = NULL;\r
31 jclass g_cls_int1DArray = NULL;\r
32 jclass g_cls_int2DArray = NULL;\r
33 jclass g_cls_Double = NULL;\r
34 jclass g_cls_double1DArray = NULL;\r
35 jclass g_cls_double2DArray = NULL;\r
36 jclass g_cls_Boolean = NULL;\r
37 jclass g_cls_boolean1DArray = NULL;\r
38 jclass g_cls_boolean2DArray = NULL;\r
39 jclass g_cls_String = NULL;\r
40 jclass g_cls_String1DArray = NULL;\r
41 jclass g_cls_String2DArray = NULL;\r
42 jclass g_cls_LinkedList = NULL;\r
43 jclass g_cls_Map = NULL;\r
44 jclass g_cls_MapEntry = NULL;\r
45 jclass g_cls_Set = NULL;\r
46 jclass g_cls_Iterator = NULL;\r
47 jclass g_cls_HashMap = NULL;\r
48 jclass g_cls_OcException = NULL;\r
49 jclass g_cls_OcResource = NULL;\r
50 jclass g_cls_OcRepresentation = NULL;\r
51 jclass g_cls_OcRepresentation1DArray = NULL;\r
52 jclass g_cls_OcRepresentation2DArray = NULL;\r
53 jclass g_cls_OcResourceRequest = NULL;\r
54 jclass g_cls_OcResourceResponse = NULL;\r
55 jclass g_cls_OcResourceHandle = NULL;\r
56 jclass g_cls_OcPresenceHandle = NULL;\r
57 jclass g_cls_OcRequestHandle = NULL;\r
58 jclass g_cls_OcPresenceStatus = NULL;\r
59 jclass g_cls_OcHeaderOption = NULL;\r
60 jclass g_cls_ObservationInfo = NULL;\r
61 jclass g_cls_OcResourceIdentifier = NULL;\r
62 \r
63 jmethodID g_mid_Integer_ctor = NULL;\r
64 jmethodID g_mid_Double_ctor = NULL;\r
65 jmethodID g_mid_Boolean_ctor = NULL;\r
66 jmethodID g_mid_LinkedList_ctor = NULL;\r
67 jmethodID g_mid_LinkedList_add_object = NULL;\r
68 jmethodID g_mid_Map_entrySet = NULL;\r
69 jmethodID g_mid_MapEntry_getKey = NULL;\r
70 jmethodID g_mid_MapEntry_getValue = NULL;\r
71 jmethodID g_mid_Set_iterator = NULL;\r
72 jmethodID g_mid_Iterator_hasNext = NULL;\r
73 jmethodID g_mid_Iterator_next = NULL;\r
74 jmethodID g_mid_HashMap_ctor = NULL;\r
75 jmethodID g_mid_HashMap_put = NULL;\r
76 jmethodID g_mid_OcException_ctor = NULL;\r
77 jmethodID g_mid_OcException_setNativeExceptionLocation = NULL;\r
78 jmethodID g_mid_OcResource_ctor = NULL;\r
79 jmethodID g_mid_OcRepresentation_N_ctor = NULL;\r
80 jmethodID g_mid_OcRepresentation_N_ctor_bool = NULL;\r
81 jmethodID g_mid_OcResourceRequest_N_ctor = NULL;\r
82 jmethodID g_mid_OcResourceResponse_N_ctor = NULL;\r
83 jmethodID g_mid_OcResourceHandle_N_ctor = NULL;\r
84 jmethodID g_mid_OcPresenceHandle_N_ctor = NULL;\r
85 jmethodID g_mid_OcRequestHandle_N_ctor = NULL;\r
86 jmethodID g_mid_OcHeaderOption_ctor = NULL;\r
87 jmethodID g_mid_OcHeaderOption_get_id = NULL;\r
88 jmethodID g_mid_OcHeaderOption_get_data = NULL;\r
89 jmethodID g_mid_ObservationInfo_N_ctor = NULL;\r
90 jmethodID g_mid_OcPresenceStatus_get = NULL;\r
91 jmethodID g_mid_OcResourceIdentifier_N_ctor = NULL;\r
92 \r
93 jobject getOcException(JNIEnv* env, const char* file, const char* functionName,\r
94     const int line, const int code, const char* message)\r
95 {\r
96     std::string codeStr = JniUtils::stackResultToStr(code);\r
97     if (codeStr.empty())\r
98     {\r
99         codeStr = JniUtils::stackResultToStr(JNI_INVALID_VALUE);\r
100     }\r
101     jobject ex = env->NewObject(g_cls_OcException,\r
102         g_mid_OcException_ctor,\r
103         env->NewStringUTF(codeStr.c_str()),\r
104         env->NewStringUTF(message));\r
105     if (!ex)\r
106     {\r
107         return nullptr;\r
108     }\r
109     env->CallVoidMethod(ex,\r
110         g_mid_OcException_setNativeExceptionLocation,\r
111         env->NewStringUTF(file),\r
112         env->NewStringUTF(functionName),\r
113         line);\r
114     if (env->ExceptionCheck())\r
115     {\r
116         return nullptr;\r
117     }\r
118     return ex;\r
119 }\r
120 \r
121 void throwOcException(JNIEnv* env, jobject ex)\r
122 {\r
123     env->Throw((jthrowable)ex);\r
124 }\r
125 \r
126 // JNI OnLoad\r
127 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)\r
128 {\r
129     LOGI("JNI_OnLoad");\r
130     JNIEnv* env;\r
131     g_jvm = vm;\r
132 \r
133     if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
134     {\r
135         LOGE("Failed to get the environment using GetEnv()");\r
136         return JNI_ERR;\r
137     }\r
138 \r
139     jclass clazz = nullptr;\r
140 \r
141     //Integer\r
142     clazz = env->FindClass("java/lang/Integer");\r
143     if (!clazz) return JNI_ERR;\r
144     g_cls_Integer = (jclass)env->NewGlobalRef(clazz);\r
145     env->DeleteLocalRef(clazz);\r
146 \r
147     g_mid_Integer_ctor = env->GetMethodID(g_cls_Integer, "<init>", "(I)V");\r
148     if (!g_mid_Integer_ctor) return JNI_ERR;\r
149 \r
150     clazz = env->FindClass("[I");\r
151     if (!clazz) return JNI_ERR;\r
152     g_cls_int1DArray = (jclass)env->NewGlobalRef(clazz);\r
153     env->DeleteLocalRef(clazz);\r
154 \r
155     clazz = env->FindClass("[[I");\r
156     if (!clazz) return JNI_ERR;\r
157     g_cls_int2DArray = (jclass)env->NewGlobalRef(clazz);\r
158     env->DeleteLocalRef(clazz);\r
159 \r
160     //Double\r
161     clazz = env->FindClass("java/lang/Double");\r
162     if (!clazz) return JNI_ERR;\r
163     g_cls_Double = (jclass)env->NewGlobalRef(clazz);\r
164     env->DeleteLocalRef(clazz);\r
165 \r
166     g_mid_Double_ctor = env->GetMethodID(g_cls_Double, "<init>", "(D)V");\r
167     if (!g_mid_Double_ctor) return JNI_ERR;\r
168 \r
169     clazz = env->FindClass("[D");\r
170     if (!clazz) return JNI_ERR;\r
171     g_cls_double1DArray = (jclass)env->NewGlobalRef(clazz);\r
172     env->DeleteLocalRef(clazz);\r
173 \r
174     clazz = env->FindClass("[[D");\r
175     if (!clazz) return JNI_ERR;\r
176     g_cls_double2DArray = (jclass)env->NewGlobalRef(clazz);\r
177     env->DeleteLocalRef(clazz);\r
178 \r
179     //Boolean\r
180     clazz = env->FindClass("java/lang/Boolean");\r
181     if (!clazz) return JNI_ERR;\r
182     g_cls_Boolean = (jclass)env->NewGlobalRef(clazz);\r
183     env->DeleteLocalRef(clazz);\r
184 \r
185     g_mid_Boolean_ctor = env->GetMethodID(g_cls_Boolean, "<init>", "(Z)V");\r
186     if (!g_mid_Boolean_ctor) return JNI_ERR;\r
187 \r
188     clazz = env->FindClass("[Z");\r
189     if (!clazz) return JNI_ERR;\r
190     g_cls_boolean1DArray = (jclass)env->NewGlobalRef(clazz);\r
191     env->DeleteLocalRef(clazz);\r
192 \r
193     clazz = env->FindClass("[[Z");\r
194     if (!clazz) return JNI_ERR;\r
195     g_cls_boolean2DArray = (jclass)env->NewGlobalRef(clazz);\r
196     env->DeleteLocalRef(clazz);\r
197 \r
198     //String\r
199     clazz = env->FindClass("java/lang/String");\r
200     if (!clazz) return JNI_ERR;\r
201     g_cls_String = (jclass)env->NewGlobalRef(clazz);\r
202     env->DeleteLocalRef(clazz);\r
203 \r
204     clazz = env->FindClass("[Ljava/lang/String;");\r
205     if (!clazz) return JNI_ERR;\r
206     g_cls_String1DArray = (jclass)env->NewGlobalRef(clazz);\r
207     env->DeleteLocalRef(clazz);\r
208 \r
209     clazz = env->FindClass("[[Ljava/lang/String;");\r
210     if (!clazz) return JNI_ERR;\r
211     g_cls_String2DArray = (jclass)env->NewGlobalRef(clazz);\r
212     env->DeleteLocalRef(clazz);\r
213 \r
214     //LinkedList\r
215     clazz = env->FindClass("java/util/LinkedList");\r
216     if (!clazz) return JNI_ERR;\r
217     g_cls_LinkedList = (jclass)env->NewGlobalRef(clazz);\r
218     env->DeleteLocalRef(clazz);\r
219 \r
220     g_mid_LinkedList_ctor = env->GetMethodID(g_cls_LinkedList, "<init>", "()V");\r
221     if (!g_mid_LinkedList_ctor) return JNI_ERR;\r
222 \r
223     g_mid_LinkedList_add_object = env->GetMethodID(g_cls_LinkedList, "add", "(Ljava/lang/Object;)Z");\r
224     if (!g_mid_LinkedList_add_object) return JNI_ERR;\r
225 \r
226     //Map\r
227     clazz = env->FindClass("java/util/Map");\r
228     if (!clazz) return JNI_ERR;\r
229     g_cls_Map = (jclass)env->NewGlobalRef(clazz);\r
230     env->DeleteLocalRef(clazz);\r
231 \r
232     g_mid_Map_entrySet = env->GetMethodID(g_cls_Map, "entrySet", "()Ljava/util/Set;");\r
233     if (!g_mid_Map_entrySet) return JNI_ERR;\r
234 \r
235     //MapEntry\r
236     clazz = env->FindClass("java/util/Map$Entry");\r
237     if (!clazz) return JNI_ERR;\r
238     g_cls_MapEntry = (jclass)env->NewGlobalRef(clazz);\r
239     env->DeleteLocalRef(clazz);\r
240 \r
241     g_mid_MapEntry_getKey = env->GetMethodID(g_cls_MapEntry, "getKey", "()Ljava/lang/Object;");\r
242     if (!g_mid_MapEntry_getKey) return JNI_ERR;\r
243     g_mid_MapEntry_getValue = env->GetMethodID(g_cls_MapEntry, "getValue", "()Ljava/lang/Object;");\r
244     if (!g_mid_MapEntry_getValue) return JNI_ERR;\r
245 \r
246     //Set\r
247     clazz = env->FindClass("java/util/Set");\r
248     if (!clazz) return JNI_ERR;\r
249     g_cls_Set = (jclass)env->NewGlobalRef(clazz);\r
250     env->DeleteLocalRef(clazz);\r
251 \r
252     g_mid_Set_iterator = env->GetMethodID(g_cls_Set, "iterator", "()Ljava/util/Iterator;");\r
253     if (!g_mid_Set_iterator) return JNI_ERR;\r
254 \r
255     //Iterator\r
256     clazz = env->FindClass("java/util/Iterator");\r
257     if (!clazz) return JNI_ERR;\r
258     g_cls_Iterator = (jclass)env->NewGlobalRef(clazz);\r
259     env->DeleteLocalRef(clazz);\r
260 \r
261     g_mid_Iterator_hasNext = env->GetMethodID(g_cls_Iterator, "hasNext", "()Z");\r
262     if (!g_mid_Iterator_hasNext) return JNI_ERR;\r
263 \r
264     g_mid_Iterator_next = env->GetMethodID(g_cls_Iterator, "next", "()Ljava/lang/Object;");\r
265     if (!g_mid_Iterator_next) return JNI_ERR;\r
266 \r
267     //HashMap\r
268     clazz = env->FindClass("java/util/HashMap");\r
269     if (!clazz) return JNI_ERR;\r
270     g_cls_HashMap = (jclass)env->NewGlobalRef(clazz);\r
271     env->DeleteLocalRef(clazz);\r
272 \r
273     g_mid_HashMap_ctor = env->GetMethodID(g_cls_HashMap, "<init>", "()V");\r
274     if (!g_mid_HashMap_ctor) return JNI_ERR;\r
275 \r
276     g_mid_HashMap_put = env->GetMethodID(g_cls_HashMap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");\r
277     if (!g_mid_HashMap_put) return JNI_ERR;\r
278 \r
279     //OcException\r
280     clazz = env->FindClass("org/iotivity/base/OcException");\r
281     if (!clazz) return JNI_ERR;\r
282     g_cls_OcException = (jclass)env->NewGlobalRef(clazz);\r
283     env->DeleteLocalRef(clazz);\r
284 \r
285     g_mid_OcException_ctor = env->GetMethodID(g_cls_OcException, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");\r
286     if (!g_mid_OcException_ctor) return JNI_ERR;\r
287 \r
288     g_mid_OcException_setNativeExceptionLocation = env->GetMethodID(g_cls_OcException, "setNativeExceptionLocation",\r
289         "(Ljava/lang/String;""Ljava/lang/String;""I)V");\r
290     if (!g_mid_OcException_setNativeExceptionLocation) return JNI_ERR;\r
291 \r
292     //OcResource\r
293     clazz = env->FindClass("org/iotivity/base/OcResource");\r
294     if (!clazz) return JNI_ERR;\r
295     g_cls_OcResource = (jclass)env->NewGlobalRef(clazz);\r
296     env->DeleteLocalRef(clazz);\r
297 \r
298     g_mid_OcResource_ctor = env->GetMethodID(g_cls_OcResource, "<init>", "(J)V");\r
299     if (!g_mid_OcResource_ctor) return JNI_ERR;\r
300 \r
301     //OcRepresentation\r
302     clazz = env->FindClass("org/iotivity/base/OcRepresentation");\r
303     if (!clazz) return JNI_ERR;\r
304     g_cls_OcRepresentation = (jclass)env->NewGlobalRef(clazz);\r
305     env->DeleteLocalRef(clazz);\r
306 \r
307     g_mid_OcRepresentation_N_ctor = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(J)V");\r
308     if (!g_mid_OcRepresentation_N_ctor) return JNI_ERR;\r
309 \r
310     g_mid_OcRepresentation_N_ctor_bool = env->GetMethodID(g_cls_OcRepresentation, "<init>", "(JZ)V");\r
311     if (!g_mid_OcRepresentation_N_ctor_bool) return JNI_ERR;\r
312 \r
313     clazz = env->FindClass("[Lorg/iotivity/base/OcRepresentation;");\r
314     if (!clazz) return JNI_ERR;\r
315     g_cls_OcRepresentation1DArray = (jclass)env->NewGlobalRef(clazz);\r
316     env->DeleteLocalRef(clazz);\r
317 \r
318     clazz = env->FindClass("[[Lorg/iotivity/base/OcRepresentation;");\r
319     if (!clazz) return JNI_ERR;\r
320     g_cls_OcRepresentation2DArray = (jclass)env->NewGlobalRef(clazz);\r
321     env->DeleteLocalRef(clazz);\r
322 \r
323     //HeaderOptions\r
324     clazz = env->FindClass("org/iotivity/base/OcHeaderOption");\r
325     if (!clazz) return JNI_ERR;\r
326     g_cls_OcHeaderOption = (jclass)env->NewGlobalRef(clazz);\r
327     env->DeleteLocalRef(clazz);\r
328     g_mid_OcHeaderOption_ctor = env->GetMethodID(g_cls_OcHeaderOption, "<init>", "(ILjava/lang/String;)V");\r
329     if (!g_mid_OcHeaderOption_ctor) return JNI_ERR;\r
330 \r
331     g_mid_OcHeaderOption_get_id = env->GetMethodID(g_cls_OcHeaderOption, "getOptionId", "()I");\r
332     if (!g_mid_OcHeaderOption_get_id) return JNI_ERR;\r
333 \r
334     g_mid_OcHeaderOption_get_data = env->GetMethodID(g_cls_OcHeaderOption, "getOptionData", "()Ljava/lang/String;");\r
335     if (!g_mid_OcHeaderOption_get_data) return JNI_ERR;\r
336 \r
337     //OcResourceRequest\r
338     clazz = env->FindClass("org/iotivity/base/OcResourceRequest");\r
339     if (!clazz) return JNI_ERR;\r
340     g_cls_OcResourceRequest = (jclass)env->NewGlobalRef(clazz);\r
341     env->DeleteLocalRef(clazz);\r
342 \r
343     g_mid_OcResourceRequest_N_ctor = env->GetMethodID(g_cls_OcResourceRequest, "<init>", "(J)V");\r
344     if (!g_mid_OcResourceRequest_N_ctor) return JNI_ERR;\r
345 \r
346     //OcResourceResponse\r
347     clazz = env->FindClass("org/iotivity/base/OcResourceResponse");\r
348     if (!clazz) return JNI_ERR;\r
349     g_cls_OcResourceResponse = (jclass)env->NewGlobalRef(clazz);\r
350     env->DeleteLocalRef(clazz);\r
351 \r
352     g_mid_OcResourceResponse_N_ctor = env->GetMethodID(g_cls_OcResourceResponse, "<init>", "(J)V");\r
353     if (!g_mid_OcResourceResponse_N_ctor) return JNI_ERR;\r
354 \r
355     //OcResourceHandle\r
356     clazz = env->FindClass("org/iotivity/base/OcResourceHandle");\r
357     if (!clazz) return JNI_ERR;\r
358     g_cls_OcResourceHandle = (jclass)env->NewGlobalRef(clazz);\r
359     env->DeleteLocalRef(clazz);\r
360     g_mid_OcResourceHandle_N_ctor = env->GetMethodID(g_cls_OcResourceHandle, "<init>", "(J)V");\r
361     if (!g_mid_OcResourceHandle_N_ctor) return JNI_ERR;\r
362 \r
363     //OcPresenceHandle\r
364     clazz = env->FindClass("org/iotivity/base/OcPresenceHandle");\r
365     if (!clazz) return JNI_ERR;\r
366     g_cls_OcPresenceHandle = (jclass)env->NewGlobalRef(clazz);\r
367     env->DeleteLocalRef(clazz);\r
368     g_mid_OcPresenceHandle_N_ctor = env->GetMethodID(g_cls_OcPresenceHandle, "<init>", "(J)V");\r
369     if (!g_mid_OcPresenceHandle_N_ctor) return JNI_ERR;\r
370 \r
371     //OcRequestHandle\r
372     clazz = env->FindClass("org/iotivity/base/OcRequestHandle");\r
373     if (!clazz) return JNI_ERR;\r
374     g_cls_OcRequestHandle = (jclass)env->NewGlobalRef(clazz);\r
375     env->DeleteLocalRef(clazz);\r
376     g_mid_OcRequestHandle_N_ctor = env->GetMethodID(g_cls_OcRequestHandle, "<init>", "(J)V");\r
377     if (!g_mid_OcRequestHandle_N_ctor) return JNI_ERR;\r
378 \r
379     //OcPresenceStatus\r
380     clazz = env->FindClass("org/iotivity/base/OcPresenceStatus");\r
381     if (!clazz) return JNI_ERR;\r
382     g_cls_OcPresenceStatus = (jclass)env->NewGlobalRef(clazz);\r
383     env->DeleteLocalRef(clazz);\r
384     g_mid_OcPresenceStatus_get = env->GetStaticMethodID(g_cls_OcPresenceStatus, "get",\r
385         "(Ljava/lang/String;)Lorg/iotivity/base/OcPresenceStatus;");\r
386     if (!g_mid_OcPresenceStatus_get) return JNI_ERR;\r
387 \r
388     //ObservationInfo\r
389     clazz = env->FindClass("org/iotivity/base/ObservationInfo");\r
390     if (!clazz) return JNI_ERR;\r
391     g_cls_ObservationInfo = (jclass)env->NewGlobalRef(clazz);\r
392     env->DeleteLocalRef(clazz);\r
393     g_mid_ObservationInfo_N_ctor = env->GetMethodID(g_cls_ObservationInfo, "<init>", "(IB)V");\r
394     if (!g_mid_ObservationInfo_N_ctor) return JNI_ERR;\r
395 \r
396     clazz = env->FindClass("org/iotivity/base/OcResourceIdentifier");\r
397     if (!clazz) return JNI_ERR;\r
398     g_cls_OcResourceIdentifier = (jclass)env->NewGlobalRef(clazz);\r
399     env->DeleteLocalRef(clazz);\r
400     g_mid_OcResourceIdentifier_N_ctor = env->GetMethodID(g_cls_OcResourceIdentifier, "<init>", "(J)V");\r
401     if (!g_mid_OcResourceIdentifier_N_ctor) return JNI_ERR;\r
402 \r
403     return JNI_CURRENT_VERSION;\r
404 }\r
405 \r
406 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved)\r
407 {\r
408     LOGI("JNI_OnUnload");\r
409     JNIEnv* env;\r
410 \r
411     if (g_jvm->GetEnv((void **)&env, JNI_CURRENT_VERSION) != JNI_OK)\r
412     {\r
413         LOGE("Failed to get the environment using GetEnv()");\r
414         return;\r
415     }\r
416 \r
417     env->DeleteGlobalRef(g_cls_Integer);\r
418     env->DeleteGlobalRef(g_cls_int1DArray);\r
419     env->DeleteGlobalRef(g_cls_int2DArray);\r
420     env->DeleteGlobalRef(g_cls_Double);\r
421     env->DeleteGlobalRef(g_cls_double1DArray);\r
422     env->DeleteGlobalRef(g_cls_double2DArray);\r
423     env->DeleteGlobalRef(g_cls_Boolean);\r
424     env->DeleteGlobalRef(g_cls_boolean1DArray);\r
425     env->DeleteGlobalRef(g_cls_boolean2DArray);\r
426     env->DeleteGlobalRef(g_cls_String);\r
427     env->DeleteGlobalRef(g_cls_String1DArray);\r
428     env->DeleteGlobalRef(g_cls_String2DArray);\r
429     env->DeleteGlobalRef(g_cls_LinkedList);\r
430     env->DeleteGlobalRef(g_cls_Map);\r
431     env->DeleteGlobalRef(g_cls_MapEntry);\r
432     env->DeleteGlobalRef(g_cls_Set);\r
433     env->DeleteGlobalRef(g_cls_Iterator);\r
434     env->DeleteGlobalRef(g_cls_HashMap);\r
435     env->DeleteGlobalRef(g_cls_OcResource);\r
436     env->DeleteGlobalRef(g_cls_OcException);\r
437     env->DeleteGlobalRef(g_cls_OcRepresentation);\r
438     env->DeleteGlobalRef(g_cls_OcRepresentation1DArray);\r
439     env->DeleteGlobalRef(g_cls_OcRepresentation2DArray);\r
440     env->DeleteGlobalRef(g_cls_OcResourceRequest);\r
441     env->DeleteGlobalRef(g_cls_OcResourceResponse);\r
442     env->DeleteGlobalRef(g_cls_OcResourceHandle);\r
443     env->DeleteGlobalRef(g_cls_OcPresenceHandle);\r
444     env->DeleteGlobalRef(g_cls_OcRequestHandle);\r
445     env->DeleteGlobalRef(g_cls_OcPresenceStatus);\r
446     env->DeleteGlobalRef(g_cls_OcHeaderOption);\r
447     env->DeleteGlobalRef(g_cls_ObservationInfo);\r
448     env->DeleteGlobalRef(g_cls_OcResourceIdentifier);\r
449 }