RANGER-4652: Value for datasets and projects field in the access audits must be JSON serializable

Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java
index 43e62a6..ca61131 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java
@@ -78,4 +78,8 @@
     static public <T> T readValue(Reader reader, Class<T> tClass) throws Exception {
         return getMapper().readValue(reader, tClass);
     }
+
+    static public String nonSerializableObjToJson(Object obj) throws Exception {
+        return getMapper().writeValueAsString(obj);
+    }
 }
diff --git a/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchAccessAuditsService.java b/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchAccessAuditsService.java
index 4195567..0ccd4fd 100644
--- a/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchAccessAuditsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/elasticsearch/ElasticSearchAccessAuditsService.java
@@ -30,6 +30,7 @@
 import org.apache.ranger.view.VXAccessAudit;
 import org.apache.ranger.view.VXAccessAuditList;
 import org.apache.ranger.view.VXLong;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.elasticsearch.action.get.GetResponse;
 import org.elasticsearch.action.get.MultiGetItemResponse;
 import org.elasticsearch.action.search.SearchResponse;
@@ -277,11 +278,19 @@
 		}
 		value = source.get("datasets");
 		if (value != null) {
-			accessAudit.setDatasets(value.toString());
+			try {
+				accessAudit.setDatasets(JsonUtilsV2.nonSerializableObjToJson(value));
+			} catch (Exception e) {
+				LOGGER.warn("Failed to convert datasets to json", e);
+			}
 		}
 		value = source.get("projects");
 		if (value != null) {
-			accessAudit.setProjects(value.toString());
+			try {
+				accessAudit.setProjects(JsonUtilsV2.nonSerializableObjToJson(value));
+			} catch (Exception e) {
+				LOGGER.warn("Failed to convert projects to json", e);
+			}
 		}
 		return accessAudit;
 	}
diff --git a/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java b/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java
index 3485f4d..9ba7bbd 100644
--- a/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java
@@ -35,6 +35,7 @@
 import org.apache.ranger.view.VXAccessAudit;
 import org.apache.ranger.view.VXAccessAuditList;
 import org.apache.ranger.view.VXLong;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocument;
@@ -256,11 +257,19 @@
 		}
 		value = doc.getFieldValue("datasets");
 		if (value != null) {
-			accessAudit.setDatasets(value.toString());
+			try {
+				accessAudit.setDatasets(JsonUtilsV2.nonSerializableObjToJson(value));
+			} catch (Exception e) {
+				LOGGER.warn("Failed to convert datasets to json", e);
+			}
 		}
 		value = doc.getFieldValue("projects");
 		if (value != null) {
-			accessAudit.setProjects(value.toString());
+			try {
+				accessAudit.setProjects(JsonUtilsV2.nonSerializableObjToJson(value));
+			} catch (Exception e) {
+				LOGGER.warn("Failed to convert projects to json", e);
+			}
 		}
 		return accessAudit;
 	}