bool simulatorResourceAttributeToCpp(JNIEnv *env, jobject jAttribute,
                                     SimulatorResourceModel::Attribute &attribute)
{
    if (!jAttribute)
        return false;

    static jfieldID nameFID = env->GetFieldID(gSimulatorClassRefs.simulatorResourceAttributeCls,
                              "mName", "Ljava/lang/String;");
    static jfieldID valueFID = env->GetFieldID(gSimulatorClassRefs.simulatorResourceAttributeCls,
                               "mValue", "Lorg/oic/simulator/AttributeValue;");
    static jfieldID propertyFID = env->GetFieldID(gSimulatorClassRefs.simulatorResourceAttributeCls,
                                  "mProperty", "Lorg/oic/simulator/AttributeProperty;");

    jstring jAttributeName = (jstring) env->GetObjectField(jAttribute, nameFID);
    jobject jAttributeValue = env->GetObjectField(jAttribute, valueFID);
    jobject jAttributeProperty = env->GetObjectField(jAttribute, propertyFID);

    if (!jAttributeName || !jAttributeValue)
        return false;

    JniString attrName(env, jAttributeName);
    SimulatorResourceModel::ValueVariant value = JniAttributeValue::toCpp(env, jAttributeValue);

    attribute.setName(attrName.get());
    attribute.setValue(value);
    if (jAttributeProperty)
    {
        SimulatorResourceModel::AttributeProperty property = JniAttributeProperty::toCpp(env,
                jAttributeProperty);
        attribute.setProperty(property);
    }

    return true;
}