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;
}