replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / android / android_api / base / jni / JniOcResource.cpp
index 2850d65..9d30ba2 100644 (file)
-/*\r
-* //******************************************************************\r
-* //\r
-* // Copyright 2015 Intel Corporation.\r
-* //\r
-* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-* //\r
-* // Licensed under the Apache License, Version 2.0 (the "License");\r
-* // you may not use this file except in compliance with the License.\r
-* // You may obtain a copy of the License at\r
-* //\r
-* //      http://www.apache.org/licenses/LICENSE-2.0\r
-* //\r
-* // Unless required by applicable law or agreed to in writing, software\r
-* // distributed under the License is distributed on an "AS IS" BASIS,\r
-* // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
-* // See the License for the specific language governing permissions and\r
-* // limitations under the License.\r
-* //\r
-* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
-*/\r
-\r
-#include "JniOcResource.h"\r
-#include "JniOcRepresentation.h"\r
-#include "JniUtils.h"\r
-\r
-JniOcResource::JniOcResource(std::shared_ptr<OCResource> resource)\r
-    : m_sharedResource(resource)\r
-{}\r
-\r
-JniOcResource::~JniOcResource()\r
-{\r
-    LOGD("~JniOcResource()");\r
-    m_sharedResource = NULL;\r
-\r
-    jint envRet;\r
-    JNIEnv *env = GetJNIEnv(envRet);\r
-    if (NULL == env) return;\r
-\r
-    m_onGetManager.removeAllListeners(env);\r
-    m_onPutManager.removeAllListeners(env);\r
-    m_onPostManager.removeAllListeners(env);\r
-    m_onDeleteManager.removeAllListeners(env);\r
-    m_onObserveManager.removeAllListeners(env);\r
-\r
-    if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();\r
-}\r
-\r
-OCStackResult JniOcResource::get(JNIEnv* env, const QueryParamsMap &queryParametersMap, jobject jListener)\r
-{\r
-    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);\r
-\r
-    GetCallback getCallback = [onGetListener](\r
-        const HeaderOptions& opts,\r
-        const OCRepresentation& rep,\r
-        const int eCode)\r
-    {\r
-        onGetListener->onGetCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->get(queryParametersMap, getCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::get(JNIEnv* env, const QueryParamsMap &queryParametersMap, jobject jListener,\r
-    QualityOfService QoS)\r
-{\r
-    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);\r
-\r
-    GetCallback getCallback = [onGetListener](const HeaderOptions& opts, const OCRepresentation& rep,\r
-        const int eCode)\r
-    {\r
-        onGetListener->onGetCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->get(queryParametersMap, getCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::get(\r
-    JNIEnv* env,\r
-    const std::string &resourceType,\r
-    const std::string &resourceInterface,\r
-    const QueryParamsMap &queryParametersMap,\r
-    jobject jListener)\r
-{\r
-    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);\r
-\r
-    GetCallback getCallback = [onGetListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onGetListener->onGetCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->get(resourceType, resourceInterface, queryParametersMap,\r
-        getCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::get(JNIEnv* env, const std::string &resourceType,\r
-    const std::string &resourceInterface, const QueryParamsMap &queryParametersMap,\r
-    jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);\r
-\r
-    GetCallback getCallback = [onGetListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onGetListener->onGetCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->get(resourceType, resourceInterface, queryParametersMap,\r
-        getCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::put(JNIEnv* env, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener)\r
-{\r
-    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);\r
-\r
-    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPutListener->onPutCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->put(representation, queryParametersMap, putCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::put(JNIEnv* env, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);\r
-\r
-    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPutListener->onPutCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->put(representation, queryParametersMap, putCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::put(JNIEnv* env, const std::string &resourceType,\r
-    const std::string &resourceInterface, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener)\r
-{\r
-    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);\r
-\r
-    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPutListener->onPutCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->put(resourceType, resourceInterface, representation,\r
-        queryParametersMap, putCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::put(JNIEnv* env, const std::string &resourceType,\r
-    const std::string &resourceInterface, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);\r
-\r
-    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPutListener->onPutCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->put(resourceType, resourceInterface, representation,\r
-        queryParametersMap, putCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::post(JNIEnv* env, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener)\r
-{\r
-    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);\r
-\r
-    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPostListener->onPostCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->post(representation, queryParametersMap, postCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::post(JNIEnv* env, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);\r
-\r
-    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPostListener->onPostCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->post(representation, queryParametersMap, postCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::post(JNIEnv* env, const std::string &resourceType,\r
-    const std::string &resourceInterface, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener)\r
-{\r
-    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);\r
-\r
-    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPostListener->onPostCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->post(resourceType, resourceInterface, representation,\r
-        queryParametersMap, postCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::post(JNIEnv* env, const std::string &resourceType,\r
-    const std::string &resourceInterface, const OCRepresentation &representation,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);\r
-\r
-    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int eCode)\r
-    {\r
-        onPostListener->onPostCallback(opts, rep, eCode);\r
-    };\r
-\r
-    return m_sharedResource->post(resourceType, resourceInterface, representation,\r
-        queryParametersMap, postCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::deleteResource(JNIEnv* env, jobject jListener)\r
-{\r
-    JniOnDeleteListener *onDeleteListener = addOnDeleteListener(env, jListener);\r
-\r
-    DeleteCallback deleteCallback = [onDeleteListener](const HeaderOptions& opts,\r
-        const int eCode)\r
-    {\r
-        onDeleteListener->onDeleteCallback(opts, eCode);\r
-    };\r
-\r
-    return m_sharedResource->deleteResource(deleteCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::deleteResource(JNIEnv* env, jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnDeleteListener *onDeleteListener = addOnDeleteListener(env, jListener);\r
-\r
-    DeleteCallback deleteCallback = [onDeleteListener](const HeaderOptions& opts, const int eCode)\r
-    {\r
-        onDeleteListener->onDeleteCallback(opts, eCode);\r
-    };\r
-\r
-    return m_sharedResource->deleteResource(deleteCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::observe(JNIEnv* env, ObserveType observeType,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener)\r
-{\r
-    JniOnObserveListener *onObserveListener = addOnObserveListener(env, jListener);\r
-\r
-    ObserveCallback observeCallback = [onObserveListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)\r
-    {\r
-        onObserveListener->onObserveCallback(opts, rep, eCode, sequenceNumber);\r
-    };\r
-\r
-    return m_sharedResource->observe(observeType, queryParametersMap, observeCallback);\r
-}\r
-\r
-OCStackResult JniOcResource::observe(JNIEnv* env, ObserveType observeType,\r
-    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)\r
-{\r
-    JniOnObserveListener *onObserveListener = addOnObserveListener(env, jListener);\r
-\r
-    ObserveCallback observeCallback = [onObserveListener](const HeaderOptions& opts,\r
-        const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)\r
-    {\r
-        onObserveListener->onObserveCallback(opts, rep, eCode, sequenceNumber);\r
-    };\r
-\r
-    return m_sharedResource->observe(observeType, queryParametersMap, observeCallback, QoS);\r
-}\r
-\r
-OCStackResult JniOcResource::cancelObserve(JNIEnv* env)\r
-{\r
-    this->m_onObserveManager.removeAllListeners(env);\r
-    return m_sharedResource->cancelObserve();\r
-}\r
-\r
-OCStackResult JniOcResource::cancelObserve(JNIEnv* env, QualityOfService qos)\r
-{\r
-    //TODO confirm behavior\r
-    //add removal of java listeners by qos\r
-    this->m_onObserveManager.removeAllListeners(env);\r
-    return m_sharedResource->cancelObserve(qos);\r
-}\r
-\r
-void JniOcResource::setHeaderOptions(const HeaderOptions &headerOptions)\r
-{\r
-    m_sharedResource->setHeaderOptions(headerOptions);\r
-}\r
-\r
-void JniOcResource::unsetHeaderOptions()\r
-{\r
-    m_sharedResource->unsetHeaderOptions();\r
-}\r
-\r
-std::string JniOcResource::host()\r
-{\r
-    return m_sharedResource->host();\r
-}\r
-\r
-std::string JniOcResource::uri()\r
-{\r
-    return m_sharedResource->uri();\r
-}\r
-\r
-OCConnectivityType JniOcResource::connectivityType() const\r
-{\r
-    return m_sharedResource->connectivityType();\r
-}\r
-\r
-bool JniOcResource::isObservable()\r
-{\r
-    return m_sharedResource->isObservable();\r
-}\r
-\r
-std::vector< std::string > JniOcResource::getResourceTypes() const\r
-{\r
-    return m_sharedResource->getResourceTypes();\r
-}\r
-\r
-std::vector< std::string > JniOcResource::getResourceInterfaces(void) const\r
-{\r
-    return m_sharedResource->getResourceInterfaces();\r
-}\r
-\r
-OCResourceIdentifier JniOcResource::uniqueIdentifier() const\r
-{\r
-    return m_sharedResource->uniqueIdentifier();\r
-}\r
-\r
-std::string JniOcResource::sid() const\r
-{\r
-    return m_sharedResource->sid();\r
-}\r
-\r
-JniOnGetListener* JniOcResource::addOnGetListener(JNIEnv* env, jobject jListener)\r
-{\r
-    return this->m_onGetManager.addListener(env, jListener, this);\r
-}\r
-\r
-JniOnPutListener* JniOcResource::addOnPutListener(JNIEnv* env, jobject jListener)\r
-{\r
-    return this->m_onPutManager.addListener(env, jListener, this);\r
-}\r
-\r
-JniOnPostListener* JniOcResource::addOnPostListener(JNIEnv* env, jobject jListener)\r
-{\r
-    return this->m_onPostManager.addListener(env, jListener, this);\r
-}\r
-\r
-JniOnDeleteListener* JniOcResource::addOnDeleteListener(JNIEnv* env, jobject jListener)\r
-{\r
-    return this->m_onDeleteManager.addListener(env, jListener, this);\r
-}\r
-\r
-JniOnObserveListener* JniOcResource::addOnObserveListener(JNIEnv* env, jobject jListener)\r
-{\r
-    return this->m_onObserveManager.addListener(env, jListener, this);\r
-}\r
-\r
-void JniOcResource::removeOnGetListener(JNIEnv* env, jobject jListener)\r
-{\r
-    this->m_onGetManager.removeListener(env, jListener);\r
-}\r
-\r
-void JniOcResource::removeOnPutListener(JNIEnv* env, jobject jListener)\r
-{\r
-    this->m_onPutManager.removeListener(env, jListener);\r
-}\r
-\r
-void JniOcResource::removeOnPostListener(JNIEnv* env, jobject jListener)\r
-{\r
-    this->m_onPostManager.removeListener(env, jListener);\r
-}\r
-\r
-void JniOcResource::removeOnDeleteListener(JNIEnv* env, jobject jListener)\r
-{\r
-    this->m_onDeleteManager.removeListener(env, jListener);\r
-}\r
-\r
-void JniOcResource::removeOnObserveListener(JNIEnv* env, jobject jListener)\r
-{\r
-    this->m_onObserveManager.removeListener(env, jListener);\r
-}\r
-\r
-std::shared_ptr<OCResource> JniOcResource::getOCResource()\r
-{\r
-    return this->m_sharedResource;\r
-}\r
-\r
-JniOcResource* JniOcResource::getJniOcResourcePtr(JNIEnv *env, jobject thiz)\r
-{\r
-    JniOcResource *resource = GetHandle<JniOcResource>(env, thiz);\r
-    if (env->ExceptionCheck())\r
-    {\r
-        LOGE("Failed to get native handle from OcResource");\r
-    }\r
-    if (!resource)\r
-    {\r
-        ThrowOcException(JNI_NO_NATIVE_POINTER, "");\r
-    }\r
-    return resource;\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    get\r
-* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnGetListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get\r
-(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_get");\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->get(\r
-            env,\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_get");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    get1\r
-* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnGetListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get1\r
-(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_get");\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->get(\r
-            env,\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_get");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    get2\r
-* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;\r
-Lorg/iotivity/base/OcResource/OnGetListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get2\r
-(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,\r
-jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_get");\r
-    std::string resourceType;\r
-    if (jResourceType)\r
-    {\r
-        resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
-    }\r
-    std::string resourceInterface;\r
-    if (jResourceInterface)\r
-    {\r
-        resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-    try\r
-    {\r
-        OCStackResult result = resource->get(\r
-            env,\r
-            resourceType,\r
-            resourceInterface,\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_get");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    get3\r
-* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;\r
-Lorg/iotivity/base/OcResource/OnGetListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get3\r
-(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,\r
-jobject jQueryParamsMap, jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_get");\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");\r
-        return;\r
-    }\r
-    std::string resourceType;\r
-    if (jResourceType)\r
-    {\r
-        resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
-    }\r
-    std::string resourceInterface;\r
-    if (jResourceInterface)\r
-    {\r
-        resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->get(\r
-            env,\r
-            resourceType,\r
-            resourceInterface,\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_get");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    put\r
-* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;\r
-Lorg/iotivity/base/OcResource/OnPutListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put\r
-(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_put");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->put(\r
-            env,\r
-            *representation,\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_put");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    put1\r
-* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;\r
-Lorg/iotivity/base/OcResource/OnPutListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put1\r
-(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap,\r
-jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_put");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->put(\r
-            env,\r
-            *representation,\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_put");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    put2\r
-* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;\r
-Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPutListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put2\r
-(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,\r
-jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_put");\r
-    std::string resourceType;\r
-    if (jResourceType)\r
-    {\r
-        resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
-    }\r
-    std::string resourceInterface;\r
-    if (jResourceInterface)\r
-    {\r
-        resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
-    }\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->put(\r
-            env,\r
-            resourceType,\r
-            resourceInterface,\r
-            *representation,\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_put");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    put3\r
-* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;\r
-Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPutListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put3\r
-(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface, jobject jRepresentation,\r
-jobject jQueryParamsMap, jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_put");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");\r
-        return;\r
-    }\r
-    std::string resourceType;\r
-    if (jResourceType)\r
-    {\r
-        resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
-    }\r
-    std::string resourceInterface;\r
-    if (jResourceInterface)\r
-    {\r
-        resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
-    }\r
-\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->put(\r
-            env,\r
-            resourceType,\r
-            resourceInterface,\r
-            *representation,\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_put");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    post\r
-* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post\r
-(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_post");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->post(\r
-            env,\r
-            *representation,\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_post");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    post1\r
-* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post1\r
-(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_post");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->post(\r
-            env,\r
-            *representation,\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_post");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    post2\r
-* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;\r
-Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post2\r
-(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,\r
-jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_post");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");\r
-        return;\r
-    }\r
-    std::string resourceType;\r
-    if (jResourceType)\r
-    {\r
-        resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
-    }\r
-    std::string resourceInterface;\r
-    if (jResourceInterface)\r
-    {\r
-        resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
-    }\r
-\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->post(\r
-            env,\r
-            resourceType,\r
-            resourceInterface,\r
-            *representation,\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_post");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    post3\r
-* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;\r
-Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post3\r
-(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,\r
-jobject jRepresentation, jobject jQueryParamsMap, jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_post");\r
-    if (!jRepresentation)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");\r
-        return;\r
-    }\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");\r
-        return;\r
-    }\r
-    std::string resourceType;\r
-    if (jResourceType)\r
-    {\r
-        resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
-    }\r
-    std::string resourceInterface;\r
-    if (jResourceInterface)\r
-    {\r
-        resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
-    }\r
-\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);\r
-    if (!representation) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->post(\r
-            env,\r
-            resourceType,\r
-            resourceInterface,\r
-            *representation,\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_post");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    deleteResource\r
-* Signature: (Lorg/iotivity/base/OcResource/OnDeleteListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_deleteResource\r
-(JNIEnv *env, jobject thiz, jobject jListener)\r
-{\r
-    LOGD("OcResource_deleteResource");\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->deleteResource(\r
-            env,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_deleteResource");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    deleteResource1\r
-* Signature: (Lorg/iotivity/base/OcResource/OnDeleteListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_deleteResource1\r
-(JNIEnv *env, jobject thiz, jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_deleteResource");\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->deleteResource(\r
-            env,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_deleteResource");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    observe\r
-* Signature: (Lorg/iotivity/base/ObserveType;Ljava/util/Map;\r
-Lorg/iotivity/base/OcResource/OnObserveListener;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_observe\r
-(JNIEnv *env, jobject thiz, jint observeType, jobject jQueryParamsMap, jobject jListener)\r
-{\r
-    LOGD("OcResource_observe");\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->observe(\r
-            env,\r
-            JniUtils::getObserveType(env, static_cast<int>(observeType)),\r
-            qpm,\r
-            jListener);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_observe");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    observe1\r
-* Signature: (Lorg/iotivity/base/ObserveType;Ljava/util/Map;\r
-Lorg/iotivity/base/OcResource/OnObserveListener;I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_observe1\r
-(JNIEnv *env, jobject thiz, jint observeType, jobject jQueryParamsMap,\r
-jobject jListener, jint jQoS)\r
-{\r
-    LOGD("OcResource_observe");\r
-    if (!jQueryParamsMap)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");\r
-        return;\r
-    }\r
-    if (!jListener)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    QueryParamsMap qpm;\r
-    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->observe(\r
-            env,\r
-            JniUtils::getObserveType(env, static_cast<int>(observeType)),\r
-            qpm,\r
-            jListener,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_observe");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    cancelObserve\r
-* Signature: ()V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_cancelObserve\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_cancelObserve");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->cancelObserve(env);\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_cancelObserve");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    cancelObserve1\r
-* Signature: I)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_cancelObserve1\r
-(JNIEnv *env, jobject thiz, jint jQoS)\r
-{\r
-    LOGD("OcResource_cancelObserve1");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    try\r
-    {\r
-        OCStackResult result = resource->cancelObserve(\r
-            env,\r
-            JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
-\r
-        if (OC_STACK_OK != result)\r
-        {\r
-            ThrowOcException(result, "OcResource_cancelObserve");\r
-        }\r
-    }\r
-    catch (OCException& e)\r
-    {\r
-        LOGE("%s", e.reason().c_str());\r
-        ThrowOcException(e.code(), e.reason().c_str());\r
-    }\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    setHeaderOptions\r
-* Signature: ([Lorg/iotivity/OcHeaderOption;)V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_setHeaderOptions\r
-(JNIEnv *env, jobject thiz, jobjectArray jheaderOptionArr)\r
-{\r
-    LOGD("OcResource_setHeaderOptions");\r
-    if (!jheaderOptionArr)\r
-    {\r
-        ThrowOcException(OC_STACK_INVALID_PARAM, "headerOptionList cannot be null");\r
-        return;\r
-    }\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    HeaderOptions headerOptions;\r
-    JniUtils::convertJavaHeaderOptionsArrToVector(env, jheaderOptionArr, headerOptions);\r
-\r
-    resource->setHeaderOptions(headerOptions);\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    unsetHeaderOptions\r
-* Signature: ()V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_unsetHeaderOptions\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_unsetHeaderOptions");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return;\r
-\r
-    resource->unsetHeaderOptions();\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getHost\r
-* Signature: ()Ljava/lang/String;\r
-*/\r
-JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getHost\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getHost");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return nullptr;\r
-\r
-    return env->NewStringUTF(resource->host().c_str());\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getUri\r
-* Signature: ()Ljava/lang/String;\r
-*/\r
-JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getUri\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getUri");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return nullptr;\r
-\r
-    return env->NewStringUTF(resource->uri().c_str());\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getConnectivityTypeN\r
-* Signature: ()I\r
-*/\r
-JNIEXPORT jint JNICALL Java_org_iotivity_base_OcResource_getConnectivityTypeN\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getConnectivityType");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return -1;\r
-\r
-    OCConnectivityType connectivityType = resource->connectivityType();\r
-    return static_cast<jint>(connectivityType);\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    isObservable\r
-* Signature: ()Z\r
-*/\r
-JNIEXPORT jboolean JNICALL Java_org_iotivity_base_OcResource_isObservable\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_isObservable");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    return (jboolean)resource->isObservable();\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getResourceTypes\r
-* Signature: ()Ljava/util/List;\r
-*/\r
-JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcResource_getResourceTypes\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getResourceTypes");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return nullptr;\r
-\r
-    std::vector<std::string> resourceTypes = resource->getResourceTypes();\r
-\r
-    return JniUtils::convertStrVectorToJavaStrList(env, resourceTypes);\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getResourceInterfaces\r
-* Signature: ()Ljava/util/List;\r
-*/\r
-JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcResource_getResourceInterfaces\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getResourceInterfaces");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return nullptr;\r
-\r
-    std::vector<std::string> resourceInterfaces = resource->getResourceInterfaces();\r
-\r
-    return JniUtils::convertStrVectorToJavaStrList(env, resourceInterfaces);\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getUniqueIdentifier\r
-* Signature: ()Lorg/iotivity/base/OcResourceIdentifier;\r
-*/\r
-JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcResource_getUniqueIdentifier\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getUniqueIdentifier");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return nullptr;\r
-\r
-    JniOcResourceIdentifier *jniResourceIdentifier =\r
-        new JniOcResourceIdentifier(resource->uniqueIdentifier());\r
-    if (!jniResourceIdentifier) return nullptr;\r
-\r
-    jlong handle = reinterpret_cast<jlong>(jniResourceIdentifier);\r
-    jobject jResourceIdentifier = env->NewObject(g_cls_OcResourceIdentifier,\r
-        g_mid_OcResourceIdentifier_N_ctor, handle);\r
-    if (!jResourceIdentifier)\r
-    {\r
-        delete jniResourceIdentifier;\r
-    }\r
-    return jResourceIdentifier;\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    getServerId\r
-* Signature: ()Ljava/lang/String;\r
-*/\r
-JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getServerId\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_getServerId");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    if (!resource) return nullptr;\r
-\r
-    return env->NewStringUTF(resource->sid().c_str());\r
-}\r
-\r
-/*\r
-* Class:     org_iotivity_base_OcResource\r
-* Method:    dispose\r
-* Signature: ()V\r
-*/\r
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_dispose\r
-(JNIEnv *env, jobject thiz)\r
-{\r
-    LOGD("OcResource_dispose");\r
-    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);\r
-    delete resource;\r
-}
\ No newline at end of file
+/*
+* //******************************************************************
+* //
+* // Copyright 2015 Intel Corporation.
+* //
+* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+* //
+* // Licensed under the Apache License, Version 2.0 (the "License");
+* // you may not use this file except in compliance with the License.
+* // You may obtain a copy of the License at
+* //
+* //      http://www.apache.org/licenses/LICENSE-2.0
+* //
+* // Unless required by applicable law or agreed to in writing, software
+* // distributed under the License is distributed on an "AS IS" BASIS,
+* // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* // See the License for the specific language governing permissions and
+* // limitations under the License.
+* //
+* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+*/
+
+#include "JniOcResource.h"
+#include "JniOcRepresentation.h"
+#include "JniUtils.h"
+
+JniOcResource::JniOcResource(std::shared_ptr<OCResource> resource)
+    : m_sharedResource(resource)
+{
+}
+
+JniOcResource::~JniOcResource()
+{
+    LOGD("~JniOcResource()");
+
+    m_sharedResource = nullptr;
+
+    jint envRet = JNI_ERR;
+    JNIEnv *env = GetJNIEnv(envRet);
+    if (nullptr == env)
+    {
+        return;
+    }
+
+    m_onGetManager.removeAllListeners(env);
+    m_onPutManager.removeAllListeners(env);
+    m_onPostManager.removeAllListeners(env);
+    m_onDeleteManager.removeAllListeners(env);
+    m_onObserveManager.removeAllListeners(env);
+#ifdef WITH_MQ
+    m_onFoundTopicResourceManager.removeAllListeners(env);
+    m_onSubcribeTopicManager.removeAllListeners(env);
+#endif
+
+    if (JNI_EDETACHED == envRet)
+    {
+        g_jvm->DetachCurrentThread();
+    }
+}
+
+OCStackResult JniOcResource::get(JNIEnv* env, const QueryParamsMap &queryParametersMap, jobject jListener)
+{
+    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);
+
+    GetCallback getCallback = [onGetListener](
+        const HeaderOptions& opts,
+        const OCRepresentation& rep,
+        const int eCode)
+    {
+        onGetListener->onGetCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->get(queryParametersMap, getCallback);
+}
+
+OCStackResult JniOcResource::get(JNIEnv* env, const QueryParamsMap &queryParametersMap, jobject jListener,
+    QualityOfService QoS)
+{
+    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);
+
+    GetCallback getCallback = [onGetListener](const HeaderOptions& opts, const OCRepresentation& rep,
+        const int eCode)
+    {
+        onGetListener->onGetCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->get(queryParametersMap, getCallback, QoS);
+}
+
+OCStackResult JniOcResource::get(
+    JNIEnv* env,
+    const std::string &resourceType,
+    const std::string &resourceInterface,
+    const QueryParamsMap &queryParametersMap,
+    jobject jListener)
+{
+    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);
+
+    GetCallback getCallback = [onGetListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onGetListener->onGetCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->get(resourceType, resourceInterface, queryParametersMap,
+        getCallback);
+}
+
+OCStackResult JniOcResource::get(JNIEnv* env, const std::string &resourceType,
+    const std::string &resourceInterface, const QueryParamsMap &queryParametersMap,
+    jobject jListener, QualityOfService QoS)
+{
+    JniOnGetListener *onGetListener = addOnGetListener(env, jListener);
+
+    GetCallback getCallback = [onGetListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onGetListener->onGetCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->get(resourceType, resourceInterface, queryParametersMap,
+        getCallback, QoS);
+}
+
+OCStackResult JniOcResource::put(JNIEnv* env, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener)
+{
+    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);
+
+    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPutListener->onPutCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->put(representation, queryParametersMap, putCallback);
+}
+
+OCStackResult JniOcResource::put(JNIEnv* env, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);
+
+    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPutListener->onPutCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->put(representation, queryParametersMap, putCallback, QoS);
+}
+
+OCStackResult JniOcResource::put(JNIEnv* env, const std::string &resourceType,
+    const std::string &resourceInterface, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener)
+{
+    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);
+
+    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPutListener->onPutCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->put(resourceType, resourceInterface, representation,
+        queryParametersMap, putCallback);
+}
+
+OCStackResult JniOcResource::put(JNIEnv* env, const std::string &resourceType,
+    const std::string &resourceInterface, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnPutListener *onPutListener = addOnPutListener(env, jListener);
+
+    PutCallback putCallback = [onPutListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPutListener->onPutCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->put(resourceType, resourceInterface, representation,
+        queryParametersMap, putCallback, QoS);
+}
+
+OCStackResult JniOcResource::post(JNIEnv* env, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener)
+{
+    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPostListener->onPostCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->post(representation, queryParametersMap, postCallback);
+}
+
+OCStackResult JniOcResource::post(JNIEnv* env, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPostListener->onPostCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->post(representation, queryParametersMap, postCallback, QoS);
+}
+
+OCStackResult JniOcResource::post(JNIEnv* env, const std::string &resourceType,
+    const std::string &resourceInterface, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener)
+{
+    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPostListener->onPostCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->post(resourceType, resourceInterface, representation,
+        queryParametersMap, postCallback);
+}
+
+OCStackResult JniOcResource::post(JNIEnv* env, const std::string &resourceType,
+    const std::string &resourceInterface, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPostListener->onPostCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->post(resourceType, resourceInterface, representation,
+        queryParametersMap, postCallback, QoS);
+}
+
+OCStackResult JniOcResource::deleteResource(JNIEnv* env, jobject jListener)
+{
+    JniOnDeleteListener *onDeleteListener = addOnDeleteListener(env, jListener);
+
+    DeleteCallback deleteCallback = [onDeleteListener](const HeaderOptions& opts,
+        const int eCode)
+    {
+        onDeleteListener->onDeleteCallback(opts, eCode);
+    };
+
+    return m_sharedResource->deleteResource(deleteCallback);
+}
+
+OCStackResult JniOcResource::deleteResource(JNIEnv* env, jobject jListener, QualityOfService QoS)
+{
+    JniOnDeleteListener *onDeleteListener = addOnDeleteListener(env, jListener);
+
+    DeleteCallback deleteCallback = [onDeleteListener](const HeaderOptions& opts, const int eCode)
+    {
+        onDeleteListener->onDeleteCallback(opts, eCode);
+    };
+
+    return m_sharedResource->deleteResource(deleteCallback, QoS);
+}
+
+OCStackResult JniOcResource::observe(JNIEnv* env, ObserveType observeType,
+    const QueryParamsMap &queryParametersMap, jobject jListener)
+{
+    JniOnObserveListener *onObserveListener = addOnObserveListener(env, jListener);
+
+    ObserveCallback observeCallback = [onObserveListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)
+    {
+        onObserveListener->onObserveCallback(opts, rep, eCode, sequenceNumber);
+    };
+
+    return m_sharedResource->observe(observeType, queryParametersMap, observeCallback);
+}
+
+OCStackResult JniOcResource::observe(JNIEnv* env, ObserveType observeType,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnObserveListener *onObserveListener = addOnObserveListener(env, jListener);
+
+    ObserveCallback observeCallback = [onObserveListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)
+    {
+        onObserveListener->onObserveCallback(opts, rep, eCode, sequenceNumber);
+    };
+
+    return m_sharedResource->observe(observeType, queryParametersMap, observeCallback, QoS);
+}
+
+OCStackResult JniOcResource::cancelObserve(JNIEnv* env, QualityOfService qos)
+{
+    // In Low case, after delete the callback and send empty message when client receive the notify.
+    // But TCP does not support EMPTY message.
+    if ((CT_ADAPTER_IP & connectivityType()) && QualityOfService::HighQos != qos)
+    {
+        this->m_onObserveManager.removeAllListeners(env);
+    }
+    return m_sharedResource->cancelObserve(qos);
+}
+
+void JniOcResource::setHeaderOptions(const HeaderOptions &headerOptions)
+{
+    m_sharedResource->setHeaderOptions(headerOptions);
+}
+
+void JniOcResource::unsetHeaderOptions()
+{
+    m_sharedResource->unsetHeaderOptions();
+}
+
+std::string JniOcResource::host()
+{
+    return m_sharedResource->host();
+}
+
+std::string JniOcResource::uri()
+{
+    return m_sharedResource->uri();
+}
+
+OCConnectivityType JniOcResource::connectivityType() const
+{
+    return m_sharedResource->connectivityType();
+}
+
+bool JniOcResource::isObservable()
+{
+    return m_sharedResource->isObservable();
+}
+
+std::vector< std::string > JniOcResource::getResourceTypes() const
+{
+    return m_sharedResource->getResourceTypes();
+}
+
+std::vector< std::string > JniOcResource::getResourceInterfaces(void) const
+{
+    return m_sharedResource->getResourceInterfaces();
+}
+
+OCResourceIdentifier JniOcResource::uniqueIdentifier() const
+{
+    return m_sharedResource->uniqueIdentifier();
+}
+
+std::string JniOcResource::sid() const
+{
+    return m_sharedResource->sid();
+}
+
+std::string JniOcResource::deviceName() const
+{
+    return m_sharedResource->deviceName();
+}
+
+JniOnGetListener* JniOcResource::addOnGetListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onGetManager.addListener(env, jListener, this);
+}
+
+JniOnPutListener* JniOcResource::addOnPutListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onPutManager.addListener(env, jListener, this);
+}
+
+JniOnPostListener* JniOcResource::addOnPostListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onPostManager.addListener(env, jListener, this);
+}
+
+JniOnDeleteListener* JniOcResource::addOnDeleteListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onDeleteManager.addListener(env, jListener, this);
+}
+
+JniOnObserveListener* JniOcResource::addOnObserveListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onObserveManager.addListener(env, jListener, this);
+}
+
+void JniOcResource::removeOnGetListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onGetManager.removeListener(env, jListener);
+}
+
+void JniOcResource::removeOnPutListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onPutManager.removeListener(env, jListener);
+}
+
+void JniOcResource::removeOnPostListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onPostManager.removeListener(env, jListener);
+}
+
+void JniOcResource::removeOnDeleteListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onDeleteManager.removeListener(env, jListener);
+}
+
+void JniOcResource::removeOnObserveListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onObserveManager.removeListener(env, jListener);
+}
+
+#ifdef WITH_MQ
+JniOnMQTopicFoundListener* JniOcResource::addOnTopicFoundListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onFoundTopicResourceManager.addListener(env, jListener, this);
+}
+
+void JniOcResource::removeOnTopicFoundListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onFoundTopicResourceManager.removeListener(env, jListener);
+}
+
+JniOnMQSubscribeListener* JniOcResource::addOnMQTopicSubscribeListener(JNIEnv* env, jobject jListener)
+{
+    return this->m_onSubcribeTopicManager.addListener(env, jListener, this);
+}
+
+void JniOcResource::removeOnMQTopicSubscribeListener(JNIEnv* env, jobject jListener)
+{
+    this->m_onSubcribeTopicManager.removeListener(env, jListener);
+}
+#endif
+
+std::shared_ptr<OCResource> JniOcResource::getOCResource()
+{
+    return this->m_sharedResource;
+}
+
+JniOcResource* JniOcResource::getJniOcResourcePtr(JNIEnv *env, jobject thiz)
+{
+    JniOcResource *resource = GetHandle<JniOcResource>(env, thiz);
+    if (env->ExceptionCheck())
+    {
+        LOGE("Failed to get native handle from OcResource");
+    }
+    if (!resource)
+    {
+        ThrowOcException(JNI_NO_NATIVE_POINTER, "");
+    }
+    return resource;
+}
+
+#ifdef WITH_MQ
+OCStackResult JniOcResource::discoveryMQTopics(JNIEnv* env,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnMQTopicFoundListener *onTopicFoundListener = addOnTopicFoundListener(env, jListener);
+
+    MQTopicCallback findCallback = [onTopicFoundListener](const int& eCode,
+            const std::string& uri, std::shared_ptr<OCResource> resource)
+    {
+        onTopicFoundListener->foundTopicCallback(eCode, uri, resource);
+    };
+
+    return m_sharedResource->discoveryMQTopics(queryParametersMap, findCallback, QoS);
+}
+
+OCStackResult JniOcResource::createMQTopic(JNIEnv* env,
+    const OCRepresentation &representation, const std::string &targetUri,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnMQTopicFoundListener *onTopicCreatedListener = addOnTopicFoundListener(env, jListener);
+
+    MQTopicCallback createCallback = [onTopicCreatedListener](const int& eCode,
+            const std::string& uri, std::shared_ptr<OCResource> resource)
+    {
+        onTopicCreatedListener->createdTopicCallback(eCode, uri, resource);
+    };
+
+    return m_sharedResource->createMQTopic(representation, targetUri,
+                                           queryParametersMap,
+                                           createCallback, QoS);
+}
+#endif
+#ifdef MQ_SUBSCRIBER
+OCStackResult JniOcResource::subscribeMQTopic(JNIEnv* env,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnMQSubscribeListener *onSubscribeListener = addOnMQTopicSubscribeListener(env, jListener);
+
+    ObserveCallback subscribeCallback = [onSubscribeListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)
+    {
+        onSubscribeListener->onSubscribeCallback(opts, rep, eCode, sequenceNumber);
+    };
+
+    return m_sharedResource->subscribeMQTopic(ObserveType::Observe, queryParametersMap,
+                                              subscribeCallback, QoS);
+}
+
+OCStackResult JniOcResource::unsubscribeMQTopic(QualityOfService QoS)
+{
+    return m_sharedResource->unsubscribeMQTopic(QoS);
+}
+
+OCStackResult JniOcResource::requestMQPublish(JNIEnv* env,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPostListener->onPostCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->requestMQPublish(queryParametersMap, postCallback, QoS);
+}
+#endif
+#ifdef MQ_PUBLISHER
+OCStackResult JniOcResource::publishMQTopic(JNIEnv* env, const OCRepresentation &representation,
+    const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+    JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+    PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+        const OCRepresentation& rep, const int eCode)
+    {
+        onPostListener->onPostCallback(opts, rep, eCode);
+    };
+
+    return m_sharedResource->publishMQTopic(representation, queryParametersMap,
+                                            postCallback, QoS);
+}
+#endif
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    get
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnGetListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_get");
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->get(
+            env,
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_get");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    get1
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnGetListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get1
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_get");
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->get(
+            env,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_get");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    get2
+* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;
+Lorg/iotivity/base/OcResource/OnGetListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get2
+(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,
+jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_get");
+    std::string resourceType;
+    if (jResourceType)
+    {
+        resourceType = env->GetStringUTFChars(jResourceType, nullptr);
+    }
+    std::string resourceInterface;
+    if (jResourceInterface)
+    {
+        resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+    try
+    {
+        OCStackResult result = resource->get(
+            env,
+            resourceType,
+            resourceInterface,
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_get");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    get3
+* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;
+Lorg/iotivity/base/OcResource/OnGetListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_get3
+(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,
+jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_get");
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onGetListener cannot be null");
+        return;
+    }
+    std::string resourceType;
+    if (jResourceType)
+    {
+        resourceType = env->GetStringUTFChars(jResourceType, nullptr);
+    }
+    std::string resourceInterface;
+    if (jResourceInterface)
+    {
+        resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->get(
+            env,
+            resourceType,
+            resourceInterface,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_get");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    put
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;
+Lorg/iotivity/base/OcResource/OnPutListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_put");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->put(
+            env,
+            *representation,
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_put");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    put1
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;
+Lorg/iotivity/base/OcResource/OnPutListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put1
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap,
+jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_put");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->put(
+            env,
+            *representation,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_put");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    put2
+* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;
+Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPutListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put2
+(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,
+jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_put");
+    std::string resourceType;
+    if (jResourceType)
+    {
+        resourceType = env->GetStringUTFChars(jResourceType, nullptr);
+    }
+    std::string resourceInterface;
+    if (jResourceInterface)
+    {
+        resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
+    }
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->put(
+            env,
+            resourceType,
+            resourceInterface,
+            *representation,
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_put");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    put3
+* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;
+Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPutListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put3
+(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface, jobject jRepresentation,
+jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_put");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null");
+        return;
+    }
+    std::string resourceType;
+    if (jResourceType)
+    {
+        resourceType = env->GetStringUTFChars(jResourceType, nullptr);
+    }
+    std::string resourceInterface;
+    if (jResourceInterface)
+    {
+        resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->put(
+            env,
+            resourceType,
+            resourceInterface,
+            *representation,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_put");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    post
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_post");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->post(
+            env,
+            *representation,
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_post");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    post1
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post1
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_post");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->post(
+            env,
+            *representation,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_post");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    post2
+* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;
+Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post2
+(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,
+jobject jRepresentation, jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_post");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+        return;
+    }
+    std::string resourceType;
+    if (jResourceType)
+    {
+        resourceType = env->GetStringUTFChars(jResourceType, nullptr);
+    }
+    std::string resourceInterface;
+    if (jResourceInterface)
+    {
+        resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->post(
+            env,
+            resourceType,
+            resourceInterface,
+            *representation,
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_post");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    post3
+* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation;
+Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_post3
+(JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface,
+jobject jRepresentation, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_post");
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+        return;
+    }
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+        return;
+    }
+    std::string resourceType;
+    if (jResourceType)
+    {
+        resourceType = env->GetStringUTFChars(jResourceType, nullptr);
+    }
+    std::string resourceInterface;
+    if (jResourceInterface)
+    {
+        resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->post(
+            env,
+            resourceType,
+            resourceInterface,
+            *representation,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_post");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    deleteResource
+* Signature: (Lorg/iotivity/base/OcResource/OnDeleteListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_deleteResource
+(JNIEnv *env, jobject thiz, jobject jListener)
+{
+    LOGD("OcResource_deleteResource");
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    try
+    {
+        OCStackResult result = resource->deleteResource(
+            env,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_deleteResource");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    deleteResource1
+* Signature: (Lorg/iotivity/base/OcResource/OnDeleteListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_deleteResource1
+(JNIEnv *env, jobject thiz, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_deleteResource");
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    try
+    {
+        OCStackResult result = resource->deleteResource(
+            env,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_deleteResource");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    observe
+* Signature: (Lorg/iotivity/base/ObserveType;Ljava/util/Map;
+Lorg/iotivity/base/OcResource/OnObserveListener;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_observe
+(JNIEnv *env, jobject thiz, jint observeType, jobject jQueryParamsMap, jobject jListener)
+{
+    LOGD("OcResource_observe");
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->observe(
+            env,
+            JniUtils::getObserveType(env, static_cast<int>(observeType)),
+            qpm,
+            jListener);
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_observe");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    observe1
+* Signature: (Lorg/iotivity/base/ObserveType;Ljava/util/Map;
+Lorg/iotivity/base/OcResource/OnObserveListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_observe1
+(JNIEnv *env, jobject thiz, jint observeType, jobject jQueryParamsMap,
+jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_observe");
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->observe(
+            env,
+            JniUtils::getObserveType(env, static_cast<int>(observeType)),
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_observe");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    cancelObserve1
+* Signature: I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_cancelObserve1
+(JNIEnv *env, jobject thiz, jint jQoS)
+{
+    LOGD("OcResource_cancelObserve1");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    try
+    {
+        OCStackResult result = resource->cancelObserve(
+            env,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_cancelObserve");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    setHeaderOptions
+* Signature: ([Lorg/iotivity/OcHeaderOption;)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_setHeaderOptions
+(JNIEnv *env, jobject thiz, jobjectArray jheaderOptionArr)
+{
+    LOGD("OcResource_setHeaderOptions");
+    if (!jheaderOptionArr)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "headerOptionList cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    HeaderOptions headerOptions;
+    JniUtils::convertJavaHeaderOptionsArrToVector(env, jheaderOptionArr, headerOptions);
+
+    resource->setHeaderOptions(headerOptions);
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    unsetHeaderOptions
+* Signature: ()V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_unsetHeaderOptions
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_unsetHeaderOptions");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    resource->unsetHeaderOptions();
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getHost
+* Signature: ()Ljava/lang/String;
+*/
+JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getHost
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getHost");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    return env->NewStringUTF(resource->host().c_str());
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getUri
+* Signature: ()Ljava/lang/String;
+*/
+JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getUri
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getUri");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    return env->NewStringUTF(resource->uri().c_str());
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getConnectivityTypeN
+* Signature: ()I
+*/
+JNIEXPORT jint JNICALL Java_org_iotivity_base_OcResource_getConnectivityTypeN
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getConnectivityType");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return -1;
+    }
+
+    OCConnectivityType connectivityType = resource->connectivityType();
+    return static_cast<jint>(connectivityType);
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    isObservable
+* Signature: ()Z
+*/
+JNIEXPORT jboolean JNICALL Java_org_iotivity_base_OcResource_isObservable
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_isObservable");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return false;
+    }
+
+    return (jboolean)resource->isObservable();
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getResourceTypes
+* Signature: ()Ljava/util/List;
+*/
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcResource_getResourceTypes
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getResourceTypes");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    std::vector<std::string> resourceTypes = resource->getResourceTypes();
+
+    return JniUtils::convertStrVectorToJavaStrList(env, resourceTypes);
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getResourceInterfaces
+* Signature: ()Ljava/util/List;
+*/
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcResource_getResourceInterfaces
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getResourceInterfaces");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    std::vector<std::string> resourceInterfaces = resource->getResourceInterfaces();
+
+    return JniUtils::convertStrVectorToJavaStrList(env, resourceInterfaces);
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getUniqueIdentifier
+* Signature: ()Lorg/iotivity/base/OcResourceIdentifier;
+*/
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcResource_getUniqueIdentifier
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getUniqueIdentifier");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    JniOcResourceIdentifier *jniResourceIdentifier =
+        new JniOcResourceIdentifier(resource->uniqueIdentifier());
+    if (!jniResourceIdentifier)
+    {
+        return nullptr;
+    }
+
+    jlong handle = reinterpret_cast<jlong>(jniResourceIdentifier);
+    jobject jResourceIdentifier = env->NewObject(g_cls_OcResourceIdentifier,
+        g_mid_OcResourceIdentifier_N_ctor, handle);
+    if (!jResourceIdentifier)
+    {
+        delete jniResourceIdentifier;
+    }
+    return jResourceIdentifier;
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getServerId
+* Signature: ()Ljava/lang/String;
+*/
+JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getServerId
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getServerId");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    return env->NewStringUTF(resource->sid().c_str());
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    getDeviceName
+* Signature: ()Ljava/lang/String;
+*/
+JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getDeviceName
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_getDeviceName");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return nullptr;
+    }
+
+    return env->NewStringUTF(resource->deviceName().c_str());
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    dispose
+* Signature: ()V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_dispose
+(JNIEnv *env, jobject thiz)
+{
+    LOGD("OcResource_dispose");
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    delete resource;
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    discoveryMQTopicsImpl
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_discoveryMQTopicsImpl
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_discoveryMQTopicsImpl");
+
+#ifdef WITH_MQ
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "listener cannot be null");
+        return;
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->discoveryMQTopics(
+            env,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_discoveryMQTopicsImpl");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+#else
+    ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    createMQTopicImpl
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/String;Ljava/util/Map
+*             ;Lorg/iotivity/base/OcPlatform/OnMQTopicCreatedListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_createMQTopicImpl
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jstring jUri,
+ jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_createMQTopicImpl");
+
+#ifdef WITH_MQ
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "listener cannot be null");
+        return;
+    }
+
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation null");
+        return;
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    std::string targetUri;
+    if (jUri)
+    {
+        targetUri = env->GetStringUTFChars(jUri, nullptr);
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env,
+                                                                                   jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->createMQTopic(
+            env,
+            *representation,
+            targetUri,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_createMQTopicImpl");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+#else
+    ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    subscribeMQTopic
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnObserveListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_subscribeMQTopicImpl
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_subscribeMQTopicImpl");
+#ifdef MQ_SUBSCRIBER
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");
+        return;
+    }
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->subscribeMQTopic(
+            env,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_subscribeMQTopicImpl");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+#else
+    ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    unsubscribeMQTopicImpl
+* Signature: (I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_unsubscribeMQTopicImpl
+(JNIEnv *env, jobject thiz, jint jQoS)
+{
+    LOGD("OcResource_unsubscribeMQTopicImpl");
+#ifdef MQ_SUBSCRIBER
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    try
+    {
+        OCStackResult result = resource->unsubscribeMQTopic(
+                JniUtils::getQOS(env, static_cast<int>(jQoS)));
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_unsubscribeMQTopicImpl");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+#else
+    ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    requestMQPublishImpl
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_requestMQPublishImpl
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_requestMQPublishImpl");
+#ifdef MQ_SUBSCRIBER
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+        return;
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->requestMQPublish(
+            env,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_requestMQPublishImpl");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+#else
+    ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class:     org_iotivity_base_OcResource
+* Method:    publishMQTopicImpl
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;
+*             Lorg/iotivity/base/OcResource/OnPostListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_publishMQTopicImpl
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap,
+ jobject jListener, jint jQoS)
+{
+    LOGD("OcResource_publishMQTopicImpl");
+#ifdef MQ_PUBLISHER
+    if (!jRepresentation)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+        return;
+    }
+
+    if (!jQueryParamsMap)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+        return;
+    }
+
+    if (!jListener)
+    {
+        ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+        return;
+    }
+
+    JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+    if (!resource)
+    {
+        return;
+    }
+
+    OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env,
+                                                                                   jRepresentation);
+    if (!representation)
+    {
+        return;
+    }
+
+    QueryParamsMap qpm;
+    JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+    try
+    {
+        OCStackResult result = resource->publishMQTopic(
+            env,
+            *representation,
+            qpm,
+            jListener,
+            JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+        if (OC_STACK_OK != result)
+        {
+            ThrowOcException(result, "OcResource_publishMQTopicImpl");
+        }
+    }
+    catch (OCException& e)
+    {
+        LOGE("%s", e.reason().c_str());
+        ThrowOcException(e.code(), e.reason().c_str());
+    }
+#else
+    ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}