This is an automated email from the ASF dual-hosted git repository.
abhay pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push:
new 4d11568 RANGER-2420: Ranger spends 36% of CPU in ObjectMapper
4d11568 is described below
commit 4d1156875244c9bc6f9bd34bfae7d65a1e634552
Author: Abhay Kulkarni <[email protected]>
AuthorDate: Tue May 28 14:55:15 2019 -0700
RANGER-2420: Ranger spends 36% of CPU in ObjectMapper
---
.../admin/client/datatype/GrantRevokeData.java | 27 ++-----
.../ranger/admin/client/datatype/RESTResponse.java | 22 ++----
.../plugin/audit/RangerDefaultAuditHandler.java | 6 +-
.../org/apache/ranger/plugin/util/JsonUtilsV2.java | 71 ++++++++++++++++++
.../hadoop/crypto/key/RangerKeyStoreProvider.java | 12 ++-
.../crypto/key/kms/server/KMSJSONReader.java | 5 +-
.../crypto/key/kms/server/KMSJSONWriter.java | 5 +-
.../ranger/services/knox/client/KnoxClient.java | 12 +--
.../java/org/apache/ranger/biz/ServiceDBStore.java | 4 +-
.../java/org/apache/ranger/common/JSONUtil.java | 85 ++++------------------
.../java/org/apache/ranger/rest/ServiceREST.java | 14 ++--
.../ranger/service/RangerDataHistService.java | 53 ++------------
.../apache/ranger/service/RangerPolicyService.java | 11 +--
.../org/apache/ranger/service/XAssetService.java | 5 +-
.../org/apache/ranger/biz/TestServiceDBStore.java | 4 +
.../ranger/service/TestRangerDataHistService.java | 61 ----------------
16 files changed, 141 insertions(+), 256 deletions(-)
diff --git
a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
index a8d3c6a..d55667c 100644
---
a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
+++
b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/GrantRevokeData.java
@@ -20,18 +20,15 @@
package org.apache.ranger.admin.client.datatype;
-import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import org.apache.ranger.authorization.utils.StringUtil;
-import org.codehaus.jackson.JsonGenerationException;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility =
Visibility.NONE, fieldVisibility = Visibility.ANY)
@@ -151,14 +148,8 @@ public class GrantRevokeData implements
java.io.Serializable {
public String toJson() {
try {
- ObjectMapper om = new ObjectMapper();
-
- return om.writeValueAsString(this);
- } catch (JsonGenerationException e) {
- e.printStackTrace();
- } catch (JsonMappingException e) {
- e.printStackTrace();
- } catch (IOException e) {
+ return JsonUtilsV2.objToJson(this);
+ } catch (Exception e) {
e.printStackTrace();
}
@@ -173,7 +164,7 @@ public class GrantRevokeData implements
java.io.Serializable {
@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility =
Visibility.NONE, fieldVisibility = Visibility.ANY)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
- public static class PermMap {
+ public static class PermMap implements java.io.Serializable {
private List<String> userList = new ArrayList<>();
private List<String> groupList = new ArrayList<>();
private List<String> permList = new ArrayList<>();
@@ -233,14 +224,8 @@ public class GrantRevokeData implements
java.io.Serializable {
public String toJson() {
try {
- ObjectMapper om = new ObjectMapper();
-
- return om.writeValueAsString(this);
- } catch (JsonGenerationException e) {
- e.printStackTrace();
- } catch (JsonMappingException e) {
- e.printStackTrace();
- } catch (IOException e) {
+ return JsonUtilsV2.objToJson(this);
+ } catch (Exception e) {
e.printStackTrace();
}
diff --git
a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
index 333f565..75c2c9f 100644
---
a/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
+++
b/agents-common/src/main/java/org/apache/ranger/admin/client/datatype/RESTResponse.java
@@ -22,10 +22,10 @@ import java.util.List;
import org.apache.log4j.Logger;
import org.apache.ranger.authorization.utils.StringUtil;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
-import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.sun.jersey.api.client.ClientResponse;
@@ -34,7 +34,7 @@ import com.sun.jersey.api.client.ClientResponse;
@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility =
Visibility.NONE, fieldVisibility = Visibility.ANY)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
-public class RESTResponse {
+public class RESTResponse implements java.io.Serializable {
private static final Logger LOG = Logger.getLogger(RESTResponse.class);
/**
@@ -111,9 +111,7 @@ public class RESTResponse {
public String toJson() {
try {
- ObjectMapper om = new ObjectMapper();
-
- return om.writeValueAsString(this);
+ return JsonUtilsV2.objToJson(this);
} catch (Exception e) {
if(LOG.isDebugEnabled()) {
LOG.debug("toJson() failed", e);
@@ -125,9 +123,7 @@ public class RESTResponse {
public static RESTResponse fromJson(String jsonString) {
try {
- ObjectMapper om = new ObjectMapper();
-
- return om.readValue(jsonString, RESTResponse.class);
+ return JsonUtilsV2.jsonToObj(jsonString,
RESTResponse.class);
} catch (Exception e) {
if(LOG.isDebugEnabled()) {
LOG.debug("fromJson('" + jsonString + "')
failed", e);
@@ -145,7 +141,7 @@ public class RESTResponse {
@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility =
Visibility.NONE, fieldVisibility = Visibility.ANY)
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
- public static class Message {
+ public static class Message implements java.io.Serializable {
private String name;
private String rbKey;
private String message;
@@ -185,9 +181,7 @@ public class RESTResponse {
public String toJson() {
try {
- ObjectMapper om = new ObjectMapper();
-
- return om.writeValueAsString(this);
+ return JsonUtilsV2.objToJson(this);
} catch (Exception e) {
if(LOG.isDebugEnabled()) {
LOG.debug("toJson() failed", e);
@@ -199,9 +193,7 @@ public class RESTResponse {
public static RESTResponse fromJson(String jsonString) {
try {
- ObjectMapper om = new ObjectMapper();
-
- return om.readValue(jsonString,
RESTResponse.class);
+ return JsonUtilsV2.jsonToObj(jsonString,
RESTResponse.class);
} catch (Exception e) {
if(LOG.isDebugEnabled()) {
LOG.debug("fromJson('" + jsonString +
"') failed", e);
diff --git
a/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
b/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
index 5e2c492..6b6e91d 100644
---
a/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
+++
b/agents-common/src/main/java/org/apache/ranger/plugin/audit/RangerDefaultAuditHandler.java
@@ -35,9 +35,9 @@ import
org.apache.ranger.authorization.hadoop.constants.RangerHadoopConstants;
import org.apache.ranger.plugin.contextenricher.RangerTagForEval;
import org.apache.ranger.plugin.policyengine.*;
import org.apache.ranger.plugin.service.RangerBasePlugin;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.apache.ranger.plugin.util.RangerAccessRequestUtil;
import org.apache.ranger.plugin.util.RangerRESTUtils;
-import org.codehaus.jackson.map.ObjectMapper;
public class RangerDefaultAuditHandler implements RangerAccessResultProcessor {
@@ -272,11 +272,9 @@ public class RangerDefaultAuditHandler implements
RangerAccessResultProcessor {
}
private String writeObjectAsString(Serializable obj) {
- ObjectMapper mapper = new ObjectMapper();
-
String jsonStr = StringUtils.EMPTY;
try {
- jsonStr = mapper.writeValueAsString(obj);
+ jsonStr = JsonUtilsV2.objToJson(obj);
} catch (Exception e) {
LOG.error("Cannot create JSON string for object:[" +
obj + "]", e);
}
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
new file mode 100644
index 0000000..9a8546b
--- /dev/null
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/JsonUtilsV2.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.ranger.plugin.util;
+
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.type.TypeReference;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class JsonUtilsV2 {
+
+ static private final ThreadLocal<ObjectMapper> mapper = new
ThreadLocal<ObjectMapper>() {
+ @Override
+ protected ObjectMapper initialValue() {
+ return new ObjectMapper();
+ }
+ };
+
+ static public ObjectMapper getMapper() {
+ return mapper.get();
+ }
+
+ static public Map<String, String> jsonToMap(String jsonStr) throws
Exception {
+ final Map<String, String> ret;
+
+ if (jsonStr == null || jsonStr.isEmpty()) {
+ ret = new HashMap<>();
+ } else {
+ ret = getMapper().readValue(jsonStr, new TypeReference<Map<String,
String>>() {});
+ }
+
+ return ret;
+ }
+
+ static public String mapToJson(Map<?, ?> map) throws Exception {
+ return getMapper().writeValueAsString(map);
+ }
+
+ static public String listToJson(List<?> list) throws Exception {
+ return getMapper().writeValueAsString(list);
+ }
+
+ static public String objToJson(Serializable obj) throws Exception {
+ return getMapper().writeValueAsString(obj);
+ }
+
+ static public <T> T jsonToObj(String json, Class<T> tClass) throws
Exception {
+ return getMapper().readValue(json, tClass);
+ }
+
+}
diff --git
a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
index bc69293..b280cbf 100755
--- a/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
+++ b/kms/src/main/java/org/apache/hadoop/crypto/key/RangerKeyStoreProvider.java
@@ -41,7 +41,7 @@ import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.Configuration;
-import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.apache.hadoop.fs.Path;
import org.apache.ranger.credentialapi.CredentialReader;
import org.apache.ranger.kms.dao.DaoManager;
@@ -217,10 +217,9 @@ public class RangerKeyStoreProvider extends KeyProvider {
logger.debug("name : " + name + " and versionName : " +
versionName);
}
try {
- ObjectMapper om = new ObjectMapper();
- String attribute = om.writeValueAsString(attributes);
+ String attribute = JsonUtilsV2.mapToJson(attributes);
dbStore.addKeyEntry(versionName, new SecretKeySpec(material,
cipher), masterKey, cipher, bitLength, description, version, attribute);
- } catch (KeyStoreException e) {
+ } catch (Exception e) {
throw new IOException("Can't store key " + versionName, e);
}
changed = true;
@@ -271,10 +270,9 @@ public class RangerKeyStoreProvider extends KeyProvider {
for (Map.Entry<String, Metadata> entry : cache.entrySet()) {
try {
Metadata metadata = entry.getValue();
- ObjectMapper om = new ObjectMapper();
- String attributes =
om.writeValueAsString(metadata.getAttributes());
+ String attributes =
JsonUtilsV2.mapToJson(metadata.getAttributes());
dbStore.addKeyEntry(entry.getKey(), new
KeyMetadata(metadata), masterKey, metadata.getAlgorithm(),
metadata.getBitLength(), metadata.getDescription(), metadata.getVersions(),
attributes);
- } catch (KeyStoreException e) {
+ } catch (Exception e) {
throw new IOException("Can't set metadata key " +
entry.getKey(), e);
}
}
diff --git
a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
index d3e0064..2b85276 100644
---
a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
+++
b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONReader.java
@@ -18,7 +18,7 @@
package org.apache.hadoop.crypto.key.kms.server;
import org.apache.hadoop.classification.InterfaceAudience;
-import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import javax.ws.rs.Consumes;
import javax.ws.rs.WebApplicationException;
@@ -48,7 +48,6 @@ public class KMSJSONReader implements MessageBodyReader<Map> {
Annotation[] annotations, MediaType mediaType,
MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
throws IOException, WebApplicationException {
- ObjectMapper mapper = new ObjectMapper();
- return mapper.readValue(entityStream, type);
+ return JsonUtilsV2.getMapper().readValue(entityStream, type);
}
}
diff --git
a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
index 3674e7a..a4e2b30 100644
---
a/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
+++
b/kms/src/main/java/org/apache/hadoop/crypto/key/kms/server/KMSJSONWriter.java
@@ -18,7 +18,7 @@
package org.apache.hadoop.crypto.key.kms.server;
import org.apache.hadoop.classification.InterfaceAudience;
-import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
@@ -63,8 +63,7 @@ public class KMSJSONWriter implements
MessageBodyWriter<Object> {
MultivaluedMap<String, Object> stringObjectMultivaluedMap,
OutputStream outputStream) throws IOException, WebApplicationException {
Writer writer = new OutputStreamWriter(outputStream);
- ObjectMapper jsonMapper = new ObjectMapper();
- jsonMapper.writerWithDefaultPrettyPrinter().writeValue(writer, obj);
+
JsonUtilsV2.getMapper().writerWithDefaultPrettyPrinter().writeValue(writer,
obj);
}
}
diff --git
a/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
b/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
index 0c83ef9..b3c163d 100644
---
a/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
+++
b/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
@@ -30,9 +30,9 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ranger.plugin.client.BaseClient;
import org.apache.ranger.plugin.client.HadoopException;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.apache.ranger.plugin.util.PasswordUtils;
import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.map.ObjectMapper;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
@@ -103,10 +103,8 @@ public class KnoxClient {
if (response.getStatus() == 200) {
String jsonString =
response.getEntity(String.class);
LOG.debug("Knox topology list
response JSON string: "+ jsonString);
-
- ObjectMapper objectMapper = new
ObjectMapper();
-
- JsonNode rootNode =
objectMapper.readTree(jsonString);
+
+ JsonNode rootNode =
JsonUtilsV2.getMapper().readTree(jsonString);
JsonNode topologyNode =
rootNode.findValue("topology");
if (topologyNode == null) {
return topologyList;
@@ -215,9 +213,7 @@ public class KnoxClient {
String jsonString =
response.getEntity(String.class);
LOG.debug("Knox service
lookup response JSON string: " + jsonString);
- ObjectMapper
objectMapper = new ObjectMapper();
-
- JsonNode rootNode =
objectMapper.readTree(jsonString);
+ JsonNode rootNode =
JsonUtilsV2.getMapper().readTree(jsonString);
JsonNode topologyNode =
rootNode.findValue("topology");
if (topologyNode !=
null) {
JsonNode
servicesNode = topologyNode.get("service");
diff --git
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 35dc940..eef29b0 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -3272,7 +3272,7 @@ public class ServiceDBStore extends AbstractServiceStore {
}
String content = xDataHist.getContent();
- RangerPolicy policy = (RangerPolicy)
dataHistService.writeJsonToJavaObject(content, RangerPolicy.class);
+ RangerPolicy policy = (RangerPolicy)
jsonUtil.writeJsonToJavaObject(content, RangerPolicy.class);
return policy;
}
@@ -3296,7 +3296,7 @@ public class ServiceDBStore extends AbstractServiceStore {
}
String content = xDataHist.getContent();
- RangerPolicy policy = (RangerPolicy)
dataHistService.writeJsonToJavaObject(content, RangerPolicy.class);
+ RangerPolicy policy = (RangerPolicy)
jsonUtil.writeJsonToJavaObject(content, RangerPolicy.class);
return policy;
}
diff --git
a/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
b/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
index 5bc1baf..014796f 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/JSONUtil.java
@@ -25,16 +25,13 @@ package org.apache.ranger.common;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ranger.common.view.ViewBaseBean;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -46,39 +43,23 @@ public class JSONUtil {
public File writeJsonToFile(ViewBaseBean viewBean, String fileName)
throws JsonGenerationException, JsonMappingException,
IOException {
- ObjectMapper objectMapper = new ObjectMapper();
if (fileName.length() < 3) {
fileName = "file_" + fileName;
}
File file = File.createTempFile(fileName, ".json");
- objectMapper.defaultPrettyPrintingWriter().writeValue(file,
viewBean);
+
JsonUtilsV2.getMapper().defaultPrettyPrintingWriter().writeValue(file,
viewBean);
return file;
}
public Map<String, String> jsonToMap(String jsonStr) {
- if (jsonStr == null || jsonStr.isEmpty()) {
- return new HashMap<String, String>();
- }
- ObjectMapper mapper = new ObjectMapper();
try {
- Map<String, String> tempObject =
mapper.readValue(jsonStr,
- new TypeReference<Map<String,
String>>() {
- });
- return tempObject;
+ return JsonUtilsV2.jsonToMap(jsonStr);
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
+ } catch (Exception e) {
throw restErrorUtil.createRESTException(
"Invalid input data: " + e.getMessage(),
MessageEnums.INVALID_INPUT_DATA);
@@ -87,63 +68,32 @@ public class JSONUtil {
}
public String readMapToString(Map<?, ?> map) {
- ObjectMapper mapper = new ObjectMapper();
- String jsonString = null;
+
try {
- jsonString = mapper.writeValueAsString(map);
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
+ return JsonUtilsV2.mapToJson(map);
+ } catch (Exception e) {
throw restErrorUtil.createRESTException(
"Invalid input data: " + e.getMessage(),
MessageEnums.INVALID_INPUT_DATA);
}
- return jsonString;
}
public String readListToString(List<?> list) {
- ObjectMapper mapper = new ObjectMapper();
- String jsonString = null;
+
try {
- jsonString = mapper.writeValueAsString(list);
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
+ return JsonUtilsV2.listToJson(list);
+ } catch (Exception e) {
throw restErrorUtil.createRESTException(
"Invalid input data: " + e.getMessage(),
MessageEnums.INVALID_INPUT_DATA);
}
- return jsonString;
}
public String writeObjectAsString(Serializable obj) {
- ObjectMapper mapper = new ObjectMapper();
- String jsonStr;
try {
- jsonStr = mapper.writeValueAsString(obj);
- return jsonStr;
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
+ return JsonUtilsV2.objToJson(obj);
+ } catch (Exception e) {
throw restErrorUtil.createRESTException(
"Invalid input data: " + e.getMessage(),
MessageEnums.INVALID_INPUT_DATA);
@@ -151,17 +101,10 @@ public class JSONUtil {
}
public <T> T writeJsonToJavaObject(String json, Class<T> tClass) {
- ObjectMapper mapper = new ObjectMapper();
try {
- return mapper.readValue(json, tClass);
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException("Invalid input
data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException("Invalid input
data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
+ return JsonUtilsV2.jsonToObj(json, tClass);
+ } catch (Exception e) {
throw restErrorUtil.createRESTException("Invalid input
data: " + e.getMessage(),
MessageEnums.INVALID_INPUT_DATA);
}
diff --git
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index b5caea8..01f1a12 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -111,6 +111,7 @@ import
org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
import org.apache.ranger.plugin.store.PList;
import org.apache.ranger.plugin.store.ServiceStore;
import org.apache.ranger.plugin.util.GrantRevokeRequest;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.apache.ranger.plugin.util.RangerAccessRequestUtil;
import org.apache.ranger.plugin.util.RangerPerfTracer;
import org.apache.ranger.plugin.util.SearchFilter;
@@ -131,7 +132,6 @@ import org.apache.ranger.view.RangerServiceList;
import org.apache.ranger.view.VXResponse;
import org.apache.ranger.view.VXString;
import org.apache.ranger.view.VXUser;
-import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -1923,7 +1923,7 @@ public class ServiceREST {
RangerExportPolicyList rangerExportPolicyList = new
RangerExportPolicyList();
svcStore.putMetaDataInfo(rangerExportPolicyList);
- String metaDataInfo = new
ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+ String metaDataInfo =
JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
XXTrxLog xxTrxLog = new XXTrxLog();
@@ -1976,7 +1976,7 @@ public class ServiceREST {
RangerExportPolicyList rangerExportPolicyList = new
RangerExportPolicyList();
svcStore.putMetaDataInfo(rangerExportPolicyList);
- String metaDataInfo = new
ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+ String metaDataInfo =
JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
XXTrxLog xxTrxLog = new XXTrxLog();
@@ -2039,7 +2039,7 @@ public class ServiceREST {
if(!checkPoliciesExists){
RangerExportPolicyList rangerExportPolicyList =
new RangerExportPolicyList();
svcStore.putMetaDataInfo(rangerExportPolicyList);
- String metaDataInfo = new
ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+ String metaDataInfo =
JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
List<XXTrxLog> trxLogList = new
ArrayList<XXTrxLog>();
XXTrxLog xxTrxLog = new XXTrxLog();
@@ -2126,7 +2126,7 @@ public class ServiceREST {
List<RangerPolicy> policies = null;
rangerExportPolicyList =
processPolicyInputJsonForMetaData(uploadedInputStream,rangerExportPolicyList);
if (rangerExportPolicyList != null &&
!CollectionUtils.sizeIsEmpty(rangerExportPolicyList.getMetaDataInfo())) {
- metaDataInfo = new
ObjectMapper().writeValueAsString(rangerExportPolicyList.getMetaDataInfo());
+ metaDataInfo =
JsonUtilsV2.mapToJson(rangerExportPolicyList.getMetaDataInfo());
} else {
LOG.info("metadata info is not
provided!!");
}
@@ -2343,13 +2343,13 @@ public class ServiceREST {
}
private RangerExportPolicyList
processPolicyInputJsonForMetaData(InputStream uploadedInputStream,
- RangerExportPolicyList rangerExportPolicyList) throws
IOException, WebApplicationException {
+ RangerExportPolicyList rangerExportPolicyList) throws
Exception {
Gson gson = new Gson();
String policiesString = IOUtils.toString(uploadedInputStream);
policiesString = policiesString.trim();
if (StringUtils.isNotEmpty(policiesString)) {
gson.fromJson(policiesString,
RangerExportPolicyList.class);
- rangerExportPolicyList = new
ObjectMapper().readValue(policiesString, RangerExportPolicyList.class);
+ rangerExportPolicyList =
JsonUtilsV2.jsonToObj(policiesString, RangerExportPolicyList.class);
} else {
LOG.error("Provided json file is empty!!");
throw restErrorUtil.createRESTException("Provided json
file is empty!!");
diff --git
a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
index a96d648..7bd0681 100644
---
a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
+++
b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
@@ -17,11 +17,11 @@
package org.apache.ranger.service;
-import java.io.IOException;
import java.util.Date;
import org.apache.ranger.common.AppConstants;
import org.apache.ranger.common.DateUtil;
+import org.apache.ranger.common.JSONUtil;
import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.RESTErrorUtil;
import org.apache.ranger.db.RangerDaoManager;
@@ -32,9 +32,6 @@ import org.apache.ranger.plugin.model.RangerBaseModelObject;
import org.apache.ranger.plugin.model.RangerPolicy;
import org.apache.ranger.plugin.model.RangerService;
import org.apache.ranger.plugin.model.RangerServiceDef;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
@@ -48,6 +45,9 @@ public class RangerDataHistService {
@Autowired
RangerDaoManager daoMgr;
+
+ @Autowired
+ JSONUtil jsonUtil;
public static final String ACTION_CREATE = "Create";
public static final String ACTION_UPDATE = "Update";
@@ -84,12 +84,12 @@ public class RangerDataHistService {
RangerServiceDef serviceDef = (RangerServiceDef)
baseModelObj;
objectName = serviceDef.getName();
classType = AppConstants.CLASS_TYPE_XA_SERVICE_DEF;
- content = writeObjectAsString(serviceDef);
+ content = jsonUtil.writeObjectAsString(serviceDef);
} else if(baseModelObj instanceof RangerService) {
RangerService service = (RangerService) baseModelObj;
objectName = service.getName();
classType = AppConstants.CLASS_TYPE_XA_SERVICE;
- content = writeObjectAsString(service);
+ content = jsonUtil.writeObjectAsString(service);
} else if(baseModelObj instanceof RangerPolicy) {
RangerPolicy policy = (RangerPolicy) baseModelObj;
objectName = policy.getName();
@@ -102,7 +102,7 @@ public class RangerDataHistService {
if(xxServiceDef != null){
policy.setServiceType(xxServiceDef.getName());
}
- content = writeObjectAsString(policy);
+ content = jsonUtil.writeObjectAsString(policy);
}
xDataHist.setObjectClassType(classType);
@@ -126,43 +126,4 @@ public class RangerDataHistService {
}
}
- public String writeObjectAsString(RangerBaseModelObject vObj) {
- ObjectMapper mapper = new ObjectMapper();
-
- String jsonStr;
- try {
- jsonStr = mapper.writeValueAsString(vObj);
- return jsonStr;
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
- throw restErrorUtil.createRESTException(
- "Invalid input data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- }
- }
-
- public Object writeJsonToJavaObject(String json, Class<?> tClass) {
- ObjectMapper mapper = new ObjectMapper();
-
- try {
- return mapper.readValue(json, tClass);
- } catch (JsonParseException e) {
- throw restErrorUtil.createRESTException("Invalid input
data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (JsonMappingException e) {
- throw restErrorUtil.createRESTException("Invalid input
data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- } catch (IOException e) {
- throw restErrorUtil.createRESTException("Invalid input
data: " + e.getMessage(),
- MessageEnums.INVALID_INPUT_DATA);
- }
- }
-
}
diff --git
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index 4117442..95342c3 100644
---
a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++
b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -42,6 +42,7 @@ import
org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyItem;
import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource;
import org.apache.ranger.plugin.model.RangerPolicy.RangerRowFilterPolicyItem;
import org.apache.ranger.plugin.model.RangerValiditySchedule;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
@@ -471,7 +472,7 @@ public class RangerPolicyService extends
RangerPolicyServiceBase<XXPolicy, Range
if (stringUtil.isEmpty(value) || stringUtil.isEmpty(oldValue))
{
return false;
}
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = JsonUtilsV2.getMapper();
try {
List<String> obj = mapper.readValue(value, new
TypeReference<List<String>>() {
});
@@ -511,7 +512,7 @@ public class RangerPolicyService extends
RangerPolicyServiceBase<XXPolicy, Range
return false;
}
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = JsonUtilsV2.getMapper();
try {
List<RangerPolicyItem> obj = mapper.readValue(value,
new
TypeReference<List<RangerPolicyItem>>() {
@@ -558,7 +559,7 @@ public class RangerPolicyService extends
RangerPolicyServiceBase<XXPolicy, Range
return false;
}
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = JsonUtilsV2.getMapper();
try {
Map<String, RangerPolicyResource> obj =
mapper.readValue(value,
new TypeReference<Map<String,
RangerPolicyResource>>() {
@@ -714,7 +715,7 @@ public class RangerPolicyService extends
RangerPolicyServiceBase<XXPolicy, Range
if (stringUtil.isEmpty(value) || stringUtil.isEmpty(oldValue)) {
return false;
}
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = JsonUtilsV2.getMapper();
try {
List<RangerDataMaskPolicyItem> obj =
mapper.readValue(value,
new
TypeReference<List<RangerDataMaskPolicyItem>>() {
@@ -758,7 +759,7 @@ public class RangerPolicyService extends
RangerPolicyServiceBase<XXPolicy, Range
if (stringUtil.isEmpty(value) || stringUtil.isEmpty(oldValue)) {
return false;
}
- ObjectMapper mapper = new ObjectMapper();
+ ObjectMapper mapper = JsonUtilsV2.getMapper();
try {
List<RangerRowFilterPolicyItem> obj =
mapper.readValue(value,
new
TypeReference<List<RangerRowFilterPolicyItem>>() {
diff --git
a/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
b/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
index 5525584..b937cff 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XAssetService.java
@@ -30,6 +30,7 @@ import java.util.Map.Entry;
import org.apache.ranger.common.AppConstants;
import org.apache.ranger.common.JSONUtil;
import org.apache.ranger.common.MessageEnums;
+import org.apache.ranger.plugin.util.JsonUtilsV2;
import org.apache.ranger.plugin.util.PasswordUtils;
import org.apache.ranger.common.PropertiesUtil;
import org.apache.ranger.common.SearchField;
@@ -41,7 +42,6 @@ import org.apache.ranger.entity.XXAsset;
import org.apache.ranger.entity.XXTrxLog;
import org.apache.ranger.util.RangerEnumUtil;
import org.apache.ranger.view.VXAsset;
-import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@@ -189,11 +189,10 @@ public class XAssetService extends
XAssetServiceBase<XXAsset, VXAsset> {
public void validateConfig(VXAsset vObj) {
HashMap<String, Object> configrationMap = null;
if (vObj.getAssetType() == AppConstants.ASSET_HDFS) {
- ObjectMapper objectMapper = new ObjectMapper();
TypeReference<HashMap<String, Object>> typeRef = new
TypeReference
<HashMap<String, Object>>() {};
try {
- configrationMap =
objectMapper.readValue(vObj.getConfig(),
+ configrationMap =
JsonUtilsV2.getMapper().readValue(vObj.getConfig(),
typeRef);
} catch (Exception e) {
logger.error("Error in config json", e);
diff --git
a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
index ac9af5e..00ef5e3 100644
--- a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
+++ b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.commons.collections.ListUtils;
import org.apache.ranger.common.ContextUtil;
+import org.apache.ranger.common.JSONUtil;
import org.apache.ranger.common.RESTErrorUtil;
import org.apache.ranger.common.RangerFactory;
import org.apache.ranger.common.SearchCriteria;
@@ -146,6 +147,9 @@ public class TestServiceDBStore {
@Mock
RangerTransactionSynchronizationAdapter
transactionSynchronizationAdapter;
+ @Mock
+ JSONUtil jsonUtil;
+
@Rule
public ExpectedException thrown = ExpectedException.none();
diff --git
a/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
b/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
index e1a236e..65e273c 100644
---
a/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
+++
b/security-admin/src/test/java/org/apache/ranger/service/TestRangerDataHistService.java
@@ -15,13 +15,8 @@
package org.apache.ranger.service;
-import java.util.Date;
-
import org.apache.ranger.db.RangerDaoManager;
-import org.apache.ranger.entity.XXDataHist;
import org.apache.ranger.plugin.model.RangerBaseModelObject;
-import org.apache.ranger.plugin.model.RangerPolicy;
-import org.codehaus.jackson.map.ObjectMapper;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -46,9 +41,6 @@ public class TestRangerDataHistService {
@Mock
org.apache.ranger.db.XXDataHistDao XXDataHistDao;
- @Mock
- ObjectMapper mapper;
-
@Test
public void test1CreateObjectDataHistory() {
String action = "create";
@@ -57,57 +49,4 @@ public class TestRangerDataHistService {
rangerDataHistService.createObjectDataHistory(baseModelObj,
action);
}
-
- @Test
- public void test2WriteObjectAsString() {
- RangerBaseModelObject testbaseModelObj =
createRangerBaseModelObject();
- rangerDataHistService.writeObjectAsString(testbaseModelObj);
-
- }
-
- @Test
- public void test3WriteJsonToJavaObject() {
- XXDataHist XXDataHist = createXXDataHistObject();
-
rangerDataHistService.writeJsonToJavaObject(XXDataHist.getContent(),
RangerPolicy.class);
- }
-
- private XXDataHist createXXDataHistObject() {
- XXDataHist xDataHist = new XXDataHist();
- Date date = new Date();
- xDataHist.setObjectId(1L);
- xDataHist.setObjectGuid("testGuid");
- xDataHist.setCreateTime(date);
- xDataHist.setAction("Create");
- xDataHist.setVersion(1L);
- xDataHist.setUpdateTime(date);
- xDataHist.setFromTime(date);
-
-
xDataHist.setContent("{\"id\":3,\"guid\":\"c3991965-b063-4fff-b9e5-2e0aa566af29\""
- +
",\"isEnabled\":true,\"createdBy\":\"Admin\",\""
- +
"updatedBy\":\"Admin\",\"createTime\":1529044511083,\"updateTime\""
- +
":1529044511084,\"version\":1,\"service\":\"cl1_storm_01\",\"name\""
- + ":\"all -
topology\",\"policyType\":0,\"description\":\"Policy for all - topology\""
- +
",\"resourceSignature\":\"61c9e34a1c273ed9263940cf79275e94\",\"isAuditEnabled\""
- +
":true,\"resources\":{\"topology\":{\"values\":[\"*\"],\"isExcludes\":false,\"isRecursive\""
- +
":false}},\"policyItems\":[{\"accesses\":[{\"type\":\"submitTopology\",\"isAllowed\":true}"
- +
",{\"type\":\"fileUpload\",\"isAllowed\":true},{\"type\":\"fileDownload\",\"isAllowed\""
- +
":true},{\"type\":\"killTopology\",\"isAllowed\":true},{\"type\":\"rebalance\",\"isAllowed\""
- +
":true},{\"type\":\"activate\",\"isAllowed\":true},{\"type\":\"deactivate\",\"isAllowed\":true},{\"type\":\"getTopologyConf\",\"isAllowed\":true},{\"type\":\"getTopology\",\"isAllowed\":true},{\"type\":\"getUserTopology\",\"isAllowed\":true},{\"type\":\"getTopologyInfo\",\"isAllowed\":true},{\"type\":\"uploadNewCredentials\",\"isAllowed\":true}],\"users\":[\"test\",\"test123\",\"HTTP123\"],\"groups\":[],\"conditions\":[],\"delegateAdmin\":true}],\"denyPolicyItems\":[],\"allowExcept
[...]
-
- return xDataHist;
- }
-
- private RangerBaseModelObject createRangerBaseModelObject() {
- RangerBaseModelObject baseModelObj = new
RangerBaseModelObject();
- Date date = new Date();
- baseModelObj.setCreatedBy("admin");
- baseModelObj.setCreateTime(date);
- baseModelObj.setGuid("testGuid");
- baseModelObj.setIsEnabled(true);
- baseModelObj.setUpdatedBy("admin");
- baseModelObj.setUpdateTime(date);
- baseModelObj.setVersion(1L);
- return baseModelObj;
-
- }
}