This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 9961b2c  [refactor] Remove mysql-connector and replace org.json with 
com.googlecode.json-simple (#8319)
9961b2c is described below

commit 9961b2c860778cb224a56d92e426f31879e01bb1
Author: Mingyu Chen <[email protected]>
AuthorDate: Sat Mar 5 14:41:04 2022 +0800

    [refactor] Remove mysql-connector and replace org.json with 
com.googlecode.json-simple (#8319)
    
    1. mysql-connector-java
        mysql-connector-java is under GLPv2 license, which is not compatible 
with APLv2, and Doris does not use it.
    
    2. org.json
        org.json is under JSON license, which is not compatible with APLv2. I 
use `json-simple` to replace it.
---
 fe/fe-core/pom.xml                                 | 10 +---
 .../java/org/apache/doris/backup/Repository.java   |  5 +-
 .../doris/deploy/impl/AmbariDeployManager.java     | 19 +++----
 .../external/elasticsearch/EsShardPartitions.java  | 33 ++++++------
 .../external/elasticsearch/EsShardRouting.java     | 14 ++---
 .../doris/external/elasticsearch/EsUtil.java       | 10 ++--
 .../doris/external/elasticsearch/MappingPhase.java | 50 +++++++++---------
 .../doris/http/rest/StorageTypeCheckAction.java    |  2 +-
 .../doris/http/rest/TableQueryPlanAction.java      | 13 ++---
 .../doris/httpv2/interceptor/AuthInterceptor.java  |  8 ---
 .../doris/httpv2/rest/TableQueryPlanAction.java    | 19 +++----
 .../org/apache/doris/journal/bdbje/BDBTool.java    | 10 ++--
 .../apache/doris/persist/GlobalVarPersistInfo.java |  2 +-
 .../java/org/apache/doris/qe/SessionVariable.java  | 20 ++++----
 .../main/java/org/apache/doris/qe/VariableMgr.java | 15 +++---
 .../doris/external/elasticsearch/EsUtilTest.java   | 23 ++++-----
 .../doris/http/TableQueryPlanActionTest.java       | 59 ++++++++++------------
 .../apache/doris/http/TableRowCountActionTest.java | 14 ++---
 .../apache/doris/http/TableSchemaActionTest.java   | 17 ++++---
 fe/pom.xml                                         | 13 ++---
 20 files changed, 164 insertions(+), 192 deletions(-)

diff --git a/fe/fe-core/pom.xml b/fe/fe-core/pom.xml
index f9b95dc..d1285ab 100644
--- a/fe/fe-core/pom.xml
+++ b/fe/fe-core/pom.xml
@@ -215,10 +215,9 @@ under the License.
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/org.json/json -->
         <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
+            <groupId>com.googlecode.json-simple</groupId>
+            <artifactId>json-simple</artifactId>
         </dependency>
         <!-- https://mvnrepository.com/artifact/junit/junit -->
         <dependency>
@@ -255,11 +254,6 @@ under the License.
             <groupId>io.dropwizard.metrics</groupId>
             <artifactId>metrics-core</artifactId>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
         <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
         <dependency>
             <groupId>io.netty</groupId>
diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java 
b/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
index df8230c..9078d17 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/Repository.java
@@ -37,7 +37,8 @@ import com.google.common.collect.Lists;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -227,7 +228,7 @@ public class Repository implements Writable {
 
                 byte[] bytes = Files.readAllBytes(Paths.get(localFilePath));
                 String json = new String(bytes, StandardCharsets.UTF_8);
-                JSONObject root = new JSONObject(json);
+                JSONObject root = (JSONObject) JSONValue.parse(json);
                 name = (String) root.get("name");
                 createTime = TimeUtils.timeStringToLong((String) 
root.get("create_time"));
                 if (createTime == -1) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/deploy/impl/AmbariDeployManager.java
 
b/fe/fe-core/src/main/java/org/apache/doris/deploy/impl/AmbariDeployManager.java
index 65bc378..cf8691a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/deploy/impl/AmbariDeployManager.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/deploy/impl/AmbariDeployManager.java
@@ -32,8 +32,9 @@ import com.google.common.collect.Maps;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.json.JSONArray;
-import org.json.JSONObject;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.util.List;
 import java.util.Map;
@@ -295,12 +296,12 @@ public class AmbariDeployManager extends DeployManager {
         }
 
         List<String> hostnames = Lists.newArrayList();
-        JSONObject componentsObj = new JSONObject(componentsJson);
-        JSONArray componentsArray = 
componentsObj.getJSONArray(KEY_HOST_COMPONENTS);
+        JSONObject componentsObj = (JSONObject) 
JSONValue.parse(componentsJson);
+        JSONArray componentsArray = (JSONArray) 
componentsObj.get(KEY_HOST_COMPONENTS);
         for (Object component : componentsArray) {
             JSONObject componentObj = (JSONObject) component;
             try {
-                JSONObject roleObj = 
componentObj.getJSONObject(KEY_HOST_ROLES);
+                JSONObject roleObj = (JSONObject) 
componentObj.get(KEY_HOST_ROLES);
                 String hostname = (String) roleObj.get(KEY_HOST_NAME);
                 hostnames.add(hostname);
             } catch (Exception e) {
@@ -314,13 +315,13 @@ public class AmbariDeployManager extends DeployManager {
     private String getPropertyFromBlueprint(String configNodeName, String 
propName) {
         Preconditions.checkNotNull(blueprintJson);
         String resProp = null;
-        JSONObject root = new JSONObject(blueprintJson);
-        JSONArray confArray = root.getJSONArray("configurations");
+        JSONObject root = (JSONObject) JSONValue.parse(blueprintJson);
+        JSONArray confArray = (JSONArray) root.get("configurations");
         for (Object object : confArray) {
             JSONObject jobj = (JSONObject) object;
             try {
-                JSONObject comNameObj = jobj.getJSONObject(configNodeName);
-                JSONObject propObj = comNameObj.getJSONObject("properties");
+                JSONObject comNameObj = (JSONObject) jobj.get(configNodeName);
+                JSONObject propObj = (JSONObject) comNameObj.get("properties");
                 resProp = (String) propObj.get(propName);
             } catch (Exception e) {
                 // nothing
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardPartitions.java
 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardPartitions.java
index a7ceff2..710e6832 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardPartitions.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardPartitions.java
@@ -26,8 +26,9 @@ import com.google.common.collect.Maps;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.json.JSONArray;
-import org.json.JSONObject;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.util.List;
 import java.util.Map;
@@ -61,25 +62,25 @@ public class EsShardPartitions {
     public static EsShardPartitions findShardPartitions(String indexName, 
String searchShards) throws DorisEsException {
 
         EsShardPartitions partitions = new EsShardPartitions(indexName);
-        JSONObject jsonObject = new JSONObject(searchShards);
-        JSONArray shards = jsonObject.getJSONArray("shards");
-        int length = shards.length();
-        for (int i = 0; i < length; i++) {
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(searchShards);
+        JSONArray shards = (JSONArray) jsonObject.get("shards");
+        int size = shards.size();
+        for (int i = 0; i < size; i++) {
             List<EsShardRouting> singleShardRouting = Lists.newArrayList();
-            JSONArray shardsArray = shards.getJSONArray(i);
-            int arrayLength = shardsArray.length();
-            for (int j = 0; j < arrayLength; j++) {
-                JSONObject indexShard = shardsArray.getJSONObject(j);
-                String shardState = indexShard.getString("state");
+            JSONArray shardsArray = (JSONArray) shards.get(i);
+            int arraySize = shardsArray.size();
+            for (int j = 0; j < arraySize; j++) {
+                JSONObject indexShard = (JSONObject) shardsArray.get(j);
+                String shardState = (String) indexShard.get("state");
                 if ("STARTED".equalsIgnoreCase(shardState) || 
"RELOCATING".equalsIgnoreCase(shardState)) {
                     try {
                         singleShardRouting.add(
                                 EsShardRouting.newSearchShard(
-                                        indexShard.getString("index"),
-                                        indexShard.getInt("shard"),
-                                        indexShard.getBoolean("primary"),
-                                        indexShard.getString("node"),
-                                        jsonObject.getJSONObject("nodes")));
+                                        (String) indexShard.get("index"),
+                                        (Integer) indexShard.get("shard"),
+                                        (Boolean) indexShard.get("primary"),
+                                        (String) indexShard.get("node"),
+                                        (JSONObject) jsonObject.get("nodes")));
                     } catch (Exception e) {
                         LOG.error("fetch index [{}] shard partitions failure", 
indexName, e);
                         throw new DorisEsException("fetch [" + indexName + "] 
shard partitions failure [" + e.getMessage() + "]");
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardRouting.java
 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardRouting.java
index 980a62d..e54923d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardRouting.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsShardRouting.java
@@ -17,11 +17,11 @@
 
 package org.apache.doris.external.elasticsearch;
 
-
 import org.apache.doris.thrift.TNetworkAddress;
-import org.apache.commons.lang.StringUtils;
-import org.json.JSONObject;
 
+import com.google.common.base.Strings;
+
+import org.json.simple.JSONObject;
 
 public class EsShardRouting {
 
@@ -43,13 +43,13 @@ public class EsShardRouting {
     
     public static EsShardRouting newSearchShard(String indexName, int shardId, 
boolean isPrimary,
             String nodeId, JSONObject nodesMap) {
-        JSONObject nodeInfo = nodesMap.getJSONObject(nodeId);
-        String[] transportAddr = 
nodeInfo.getString("transport_address").split(":");
+        JSONObject nodeInfo = (JSONObject) nodesMap.get(nodeId);
+        String[] transportAddr = ((String) 
nodeInfo.get("transport_address")).split(":");
         // get thrift port from node info
-        String thriftPort = 
nodeInfo.getJSONObject("attributes").optString("thrift_port");
+        String thriftPort = (String) ((JSONObject) 
nodeInfo.get("attributes")).get("thrift_port");
         // In http transport mode, should ignore thrift_port, set address to 
null
         TNetworkAddress addr = null;
-        if (!StringUtils.isEmpty(thriftPort)) {
+        if (!Strings.isNullOrEmpty(thriftPort)) {
             addr = new TNetworkAddress(transportAddr[0], 
Integer.parseInt(thriftPort));
         }
         return new EsShardRouting(indexName, shardId, isPrimary, addr, nodeId);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java
index 454fb5f..4dd0fcb 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/EsUtil.java
@@ -23,7 +23,7 @@ import org.apache.doris.analysis.RangePartitionDesc;
 import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.DdlException;
 
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
 
 import java.util.Map;
 
@@ -73,15 +73,15 @@ public class EsUtil {
         int firstOccr = key.indexOf('.', fromIndex);
         if (firstOccr == -1) {
             String token = key.substring(key.lastIndexOf('.') + 1);
-            if (jsonObject.has(token)) {
-                return jsonObject.getJSONObject(token);
+            if (jsonObject.containsKey(token)) {
+                return (JSONObject) jsonObject.get(token);
             } else {
                 return null;
             }
         }
         String fieldName = key.substring(fromIndex, firstOccr);
-        if (jsonObject.has(fieldName)) {
-            return getJsonObject(jsonObject.getJSONObject(fieldName), key, 
firstOccr + 1);
+        if (jsonObject.containsKey(fieldName)) {
+            return getJsonObject((JSONObject) jsonObject.get(fieldName), key, 
firstOccr + 1);
         } else {
             return null;
         }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/MappingPhase.java
 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/MappingPhase.java
index 4b82e18..f736a9e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/MappingPhase.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/external/elasticsearch/MappingPhase.java
@@ -21,7 +21,8 @@ import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.EsTable;
 
 import org.apache.commons.lang3.StringUtils;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.util.Iterator;
 
@@ -69,13 +70,13 @@ public class MappingPhase implements SearchPhase {
      * @throws Exception
      */
     public void resolveFields(SearchContext searchContext, String 
indexMapping) throws DorisEsException {
-        JSONObject jsonObject = new JSONObject(indexMapping);
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(indexMapping);
         // the indexName use alias takes the first mapping
-        Iterator<String> keys = jsonObject.keys();
+        Iterator<String> keys = jsonObject.keySet().iterator();
         String docKey = keys.next();
-        JSONObject docData = jsonObject.optJSONObject(docKey);
-        JSONObject mappings = docData.optJSONObject("mappings");
-        JSONObject rootSchema = mappings.optJSONObject(searchContext.type());
+        JSONObject docData = (JSONObject) jsonObject.get(docKey);
+        JSONObject mappings = (JSONObject) docData.get("mappings");
+        JSONObject rootSchema = (JSONObject) 
mappings.get(searchContext.type());
         JSONObject properties;
         // After (include) 7.x, type was removed from ES mapping, default type 
is `_doc`
         // 
https://www.elastic.co/guide/en/elasticsearch/reference/7.0/removal-of-types.html
@@ -86,9 +87,9 @@ public class MappingPhase implements SearchPhase {
                         + searchContext.type() + "], for table ["
                         + searchContext.esTable().getName() + "]");
             }
-            properties = mappings.optJSONObject("properties");
+            properties = (JSONObject) mappings.get("properties");
         } else {
-            properties = rootSchema.optJSONObject("properties");
+            properties = (JSONObject) rootSchema.get("properties");
         }
         if (properties == null) {
             throw new DorisEsException("index[" + searchContext.sourceIndex() 
+ "] type[" + searchContext.type() + "] mapping not found for the ES Cluster");
@@ -96,11 +97,10 @@ public class MappingPhase implements SearchPhase {
         for (Column col : searchContext.columns()) {
             String colName = col.getName();
             // if column exists in Doris Table but no found in ES's mapping, 
we choose to ignore this situation?
-            if (!properties.has(colName)) {
+            if (!properties.containsKey(colName)) {
                 continue;
             }
-            JSONObject fieldObject = properties.optJSONObject(colName);
-
+            JSONObject fieldObject = (JSONObject) properties.get(colName);
             resolveKeywordFields(searchContext, fieldObject, colName);
             resolveDocValuesFields(searchContext, fieldObject, colName);
         }
@@ -108,16 +108,16 @@ public class MappingPhase implements SearchPhase {
 
     // get a field of keyword type in the fields
     private void resolveKeywordFields(SearchContext searchContext, JSONObject 
fieldObject, String colName) {
-        String fieldType = fieldObject.optString("type");
+        String fieldType = (String) fieldObject.get("type");
         // string-type field used keyword type to generate predicate
         // if text field type seen, we should use the `field` keyword type?
         if ("text".equals(fieldType)) {
-            JSONObject fieldsObject = fieldObject.optJSONObject("fields");
+            JSONObject fieldsObject = (JSONObject) fieldObject.get("fields");
             if (fieldsObject != null) {
-                for (String key : fieldsObject.keySet()) {
-                    JSONObject innerTypeObject = 
fieldsObject.optJSONObject(key);
+                for (Object key : fieldsObject.keySet()) {
+                    JSONObject innerTypeObject = (JSONObject) 
fieldsObject.get((String) key);
                     // just for text type
-                    if ("keyword".equals(innerTypeObject.optString("type"))) {
+                    if ("keyword".equals((String) 
innerTypeObject.get("type"))) {
                         searchContext.fetchFieldsContext().put(colName, 
colName + "." + key);
                     }
                 }
@@ -126,18 +126,18 @@ public class MappingPhase implements SearchPhase {
     }
 
     private void resolveDocValuesFields(SearchContext searchContext, 
JSONObject fieldObject, String colName) {
-        String fieldType = fieldObject.optString("type");
+        String fieldType = (String) fieldObject.get("type");
         String docValueField = null;
         if (EsTable.DEFAULT_DOCVALUE_DISABLED_FIELDS.contains(fieldType)) {
-            JSONObject fieldsObject = fieldObject.optJSONObject("fields");
+            JSONObject fieldsObject = (JSONObject) fieldObject.get("fields");
             if (fieldsObject != null) {
-                for (String key : fieldsObject.keySet()) {
-                    JSONObject innerTypeObject = 
fieldsObject.optJSONObject(key);
-                    if 
(EsTable.DEFAULT_DOCVALUE_DISABLED_FIELDS.contains(innerTypeObject.optString("type")))
 {
+                for (Object key : fieldsObject.keySet()) {
+                    JSONObject innerTypeObject = (JSONObject) 
fieldsObject.get((String) key);
+                    if 
(EsTable.DEFAULT_DOCVALUE_DISABLED_FIELDS.contains((String) 
innerTypeObject.get("type"))) {
                         continue;
                     }
-                    if (innerTypeObject.has("doc_values")) {
-                        boolean docValue = 
innerTypeObject.getBoolean("doc_values");
+                    if (innerTypeObject.containsKey("doc_values")) {
+                        boolean docValue = (Boolean) 
innerTypeObject.get("doc_values");
                         if (docValue) {
                             docValueField = colName;
                         }
@@ -149,8 +149,8 @@ public class MappingPhase implements SearchPhase {
             }
         } else {
             // set doc_value = false manually
-            if (fieldObject.has("doc_values")) {
-                boolean docValue = fieldObject.optBoolean("doc_values");
+            if (fieldObject.containsKey("doc_values")) {
+                Boolean docValue = (Boolean) fieldObject.get("doc_values");
                 if (!docValue) {
                     return;
                 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/http/rest/StorageTypeCheckAction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/http/rest/StorageTypeCheckAction.java
index f9968d2..bf6d271 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/http/rest/StorageTypeCheckAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/http/rest/StorageTypeCheckAction.java
@@ -34,7 +34,7 @@ import org.apache.doris.thrift.TStorageType;
 
 import com.google.common.base.Strings;
 
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
 
 import java.util.List;
 import java.util.Map;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/http/rest/TableQueryPlanAction.java 
b/fe/fe-core/src/main/java/org/apache/doris/http/rest/TableQueryPlanAction.java
index 1c58274..d252ba3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/http/rest/TableQueryPlanAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/http/rest/TableQueryPlanAction.java
@@ -59,8 +59,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.thrift.TException;
 import org.apache.thrift.TSerializer;
 import org.codehaus.jackson.map.ObjectMapper;
-import org.json.JSONException;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.util.ArrayList;
 import java.util.Base64;
@@ -107,17 +107,14 @@ public class TableQueryPlanAction extends RestBaseAction {
                     || Strings.isNullOrEmpty(tableName)) {
                 throw new DorisHttpException(HttpResponseStatus.BAD_REQUEST, 
"{database}/{table} must be selected");
             }
-            String sql;
             if (Strings.isNullOrEmpty(postContent)) {
                 throw new DorisHttpException(HttpResponseStatus.BAD_REQUEST, 
"POST body must contains [sql] root object");
             }
-            JSONObject jsonObject;
-            try {
-                jsonObject = new JSONObject(postContent);
-            } catch (JSONException e) {
+            JSONObject jsonObject = (JSONObject) JSONValue.parse(postContent);
+            if (jsonObject == null) {
                 throw new DorisHttpException(HttpResponseStatus.BAD_REQUEST, 
"malformed json [ " + postContent + " ]");
             }
-            sql = jsonObject.optString("sql");
+            String sql = (String) jsonObject.get("sql");
             if (Strings.isNullOrEmpty(sql)) {
                 throw new DorisHttpException(HttpResponseStatus.BAD_REQUEST, 
"POST body must contains [sql] root object");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/interceptor/AuthInterceptor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/interceptor/AuthInterceptor.java
index 61f701f..554f003 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/interceptor/AuthInterceptor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/interceptor/AuthInterceptor.java
@@ -21,14 +21,11 @@ import org.apache.doris.httpv2.controller.BaseController;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.json.JSONObject;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
-import java.util.Map;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -58,9 +55,4 @@ public class AuthInterceptor extends BaseController 
implements HandlerIntercepto
     @Override
     public void afterCompletion(HttpServletRequest request, 
HttpServletResponse response, Object handler, Exception ex) throws Exception {
     }
-
-    private String toJson(Map<String, Object> map) {
-        JSONObject root = new JSONObject(map);
-        return root.toString();
-    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/TableQueryPlanAction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/TableQueryPlanAction.java
index 05ddddb..30b036e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/TableQueryPlanAction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/httpv2/rest/TableQueryPlanAction.java
@@ -17,8 +17,6 @@
 
 package org.apache.doris.httpv2.rest;
 
-import io.netty.handler.codec.http.HttpResponseStatus;
-
 import org.apache.doris.analysis.InlineViewRef;
 import org.apache.doris.analysis.SelectStmt;
 import org.apache.doris.analysis.StatementBase;
@@ -56,8 +54,8 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.thrift.TException;
 import org.apache.thrift.TSerializer;
-import org.json.JSONException;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -73,6 +71,8 @@ import java.util.UUID;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import io.netty.handler.codec.http.HttpResponseStatus;
+
 /**
  * This class responsible for parse the sql and generate the query plan 
fragment for a (only one) table{@see OlapTable}
  * the related tablet maybe pruned by query planer according the `where` 
predicate.
@@ -93,18 +93,15 @@ public class TableQueryPlanAction extends 
RestBaseController {
         String postContent = HttpUtil.getBody(request);
         try {
             // may be these common validate logic should be moved to one base 
class
-            String sql;
             if (Strings.isNullOrEmpty(postContent)) {
                 return ResponseEntityBuilder.badRequest("POST body must 
contains [sql] root object");
             }
-            JSONObject jsonObject;
-            try {
-                jsonObject = new JSONObject(postContent);
-            } catch (JSONException e) {
-                return ResponseEntityBuilder.badRequest("malformed json: " + 
e.getMessage());
+            JSONObject jsonObject = (JSONObject) JSONValue.parse(postContent);
+            if (jsonObject == null) {
+                return ResponseEntityBuilder.badRequest("malformed json: " + 
postContent);
             }
 
-            sql = jsonObject.optString("sql");
+            String sql = (String) jsonObject.get("sql");
             if (Strings.isNullOrEmpty(sql)) {
                 return ResponseEntityBuilder.badRequest("POST body must 
contains [sql] root object");
             }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBTool.java 
b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBTool.java
index aa8b616..02c0550 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBTool.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/journal/bdbje/BDBTool.java
@@ -34,8 +34,8 @@ import com.sleepycat.je.EnvironmentConfig;
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 
-import org.json.JSONArray;
-import org.json.JSONObject;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
 
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
@@ -74,8 +74,7 @@ public class BDBTool {
             if (options.isListDbs()) {
                 // list all databases
                 List<String> dbNames = env.getDatabaseNames();
-                JSONArray jsonArray = new JSONArray(dbNames);
-                System.out.println(jsonArray.toString());
+                System.out.println(JSONArray.toJSONString(dbNames));
                 return true;
             } else {
                 // db operations
@@ -90,8 +89,7 @@ public class BDBTool {
                     // get db stat
                     Map<String, String> statMap = Maps.newHashMap();
                     statMap.put("count", String.valueOf(db.count()));
-                    JSONObject jsonObject = new JSONObject(statMap);
-                    System.out.println(jsonObject.toString());
+                    System.out.println(JSONObject.toJSONString(statMap));
                     return true;
                 } else {
                     // set from key
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/persist/GlobalVarPersistInfo.java 
b/fe/fe-core/src/main/java/org/apache/doris/persist/GlobalVarPersistInfo.java
index 4d1290d..2c5ce67 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/persist/GlobalVarPersistInfo.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/persist/GlobalVarPersistInfo.java
@@ -27,7 +27,7 @@ import com.google.common.base.Preconditions;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
 
 import java.io.DataInput;
 import java.io.DataOutput;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index c15f717..ea8f74a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -26,6 +26,8 @@ import org.apache.doris.thrift.TResourceLimit;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -35,8 +37,6 @@ import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.json.JSONObject;
-
 // System variable
 public class SessionVariable implements Serializable, Writable {
     static final Logger LOG = LogManager.getLogger(SessionVariable.class);
@@ -983,7 +983,7 @@ public class SessionVariable implements Serializable, 
Writable {
 
     private void readFromJson(DataInput in) throws IOException {
         String json = Text.readString(in);
-        JSONObject root = new JSONObject(json);
+        JSONObject root = (JSONObject) JSONValue.parse(json);
         try {
             for (Field field : SessionVariable.class.getDeclaredFields()) {
                 VarAttr attr = field.getAnnotation(VarAttr.class);
@@ -991,28 +991,28 @@ public class SessionVariable implements Serializable, 
Writable {
                     continue;
                 }
 
-                if (!root.has(attr.name())) {
+                if (!root.containsKey(attr.name())) {
                     continue;
                 }
 
                 switch (field.getType().getSimpleName()) {
                     case "boolean":
-                        field.set(this, root.getBoolean(attr.name()));
+                        field.set(this, root.get(attr.name()));
                         break;
                     case "int":
-                        field.set(this, root.getInt(attr.name()));
+                        field.set(this, root.get(attr.name()));
                         break;
                     case "long":
-                        field.set(this, root.getLong(attr.name()));
+                        field.set(this, root.get(attr.name()));
                         break;
                     case "float":
-                        field.set(this, root.getFloat(attr.name()));
+                        field.set(this, root.get(attr.name()));
                         break;
                     case "double":
-                        field.set(this, root.getDouble(attr.name()));
+                        field.set(this, root.get(attr.name()));
                         break;
                     case "String":
-                        field.set(this, root.getString(attr.name()));
+                        field.set(this, root.get(attr.name()));
                         break;
                     default:
                         // Unsupported type variable.
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
index 67da77b..924f923 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/VariableMgr.java
@@ -37,7 +37,8 @@ import org.apache.commons.lang.SerializationUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.jetbrains.annotations.NotNull;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -321,19 +322,19 @@ public class VariableMgr {
         wlock.lock();
         try {
             String json = info.getPersistJsonString();
-            JSONObject root = new JSONObject(json);
-            for (String varName : root.keySet()) {
-                VarContext varContext = ctxByVarName.get(varName);
+            JSONObject root = (JSONObject) JSONValue.parse(json);
+            for (Object varName : root.keySet()) {
+                VarContext varContext = ctxByVarName.get((String) varName);
                 if (Catalog.isCheckpointThread()) {
                     // If this is checkpoint thread, we should write value in 
`ctxByVarNameForCkpt` to the image
                     // instead of `ctxByVarName`.
-                    varContext = ctxByVarNameForCkpt.get(varName);
+                    varContext = ctxByVarNameForCkpt.get((String) varName);
                 }
                 if (varContext == null) {
-                    LOG.error("failed to get global variable {} when 
replaying", varName);
+                    LOG.error("failed to get global variable {} when 
replaying", (String) varName);
                     continue;
                 }
-                setValue(varContext.getObj(), varContext.getField(), 
root.get(varName).toString());
+                setValue(varContext.getObj(), varContext.getField(), 
root.get((String) varName).toString());
             }
         } finally {
             wlock.unlock();
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
index 21d4909..28ed675 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/external/elasticsearch/EsUtilTest.java
@@ -17,12 +17,9 @@
 
 package org.apache.doris.external.elasticsearch;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import org.json.JSONException;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.junit.Assert;
 import org.junit.Test;
 
 public class EsUtilTest {
@@ -47,21 +44,21 @@ public class EsUtilTest {
 
     @Test
     public void testGetJsonObject() {
-        JSONObject json = new JSONObject(jsonStr);
+        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
         JSONObject upperBoundSetting = EsUtil.getJsonObject(json, 
"settings.index.bpack.partition", 0);
-        assertTrue(upperBoundSetting.has("upperbound"));
-        assertEquals("12", upperBoundSetting.getString("upperbound"));
+        Assert.assertTrue(upperBoundSetting.containsKey("upperbound"));
+        Assert.assertEquals("12", (String) 
upperBoundSetting.get("upperbound"));
 
         JSONObject unExistKey = EsUtil.getJsonObject(json, "set", 0);
-        assertNull(unExistKey);
+        Assert.assertNull(unExistKey);
 
         JSONObject singleKey = EsUtil.getJsonObject(json, "settings", 0);
-        assertTrue(singleKey.has("index"));
+        Assert.assertTrue(singleKey.containsKey("index"));
     }
 
-    @Test(expected = JSONException.class)
+    @Test(expected = ClassCastException.class)
     public void testGetJsonObjectWithException() {
-        JSONObject json = new JSONObject(jsonStr);
+        JSONObject json = (JSONObject) JSONValue.parse(jsonStr);
         // only support json object could not get string value directly from 
this api, exception will be threw
         EsUtil.getJsonObject(json, 
"settings.index.bpack.partition.upperbound", 0);
     }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/http/TableQueryPlanActionTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/http/TableQueryPlanActionTest.java
index 56f1383..8915411 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/http/TableQueryPlanActionTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/http/TableQueryPlanActionTest.java
@@ -21,7 +21,9 @@ import org.apache.doris.thrift.TQueryPlanInfo;
 
 import org.apache.thrift.TDeserializer;
 import org.apache.thrift.TException;
-import org.json.JSONObject;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -54,21 +56,21 @@ public class TableQueryPlanActionTest extends 
DorisHttpTestCase {
                 .build();
         Response response = networkClient.newCall(request).execute();
         String respStr = response.body().string();
-        JSONObject jsonObject = new JSONObject(respStr);
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(respStr);
         System.out.println(respStr);
-        Assert.assertEquals(200, jsonObject.getInt("status"));
+        Assert.assertEquals(200, (long) jsonObject.get("status"));
 
-        JSONObject partitionsObject = jsonObject.getJSONObject("partitions");
+        JSONObject partitionsObject = (JSONObject) 
jsonObject.get("partitions");
         Assert.assertNotNull(partitionsObject);
-        for (String tabletKey : partitionsObject.keySet()) {
-            JSONObject tabletObject = 
partitionsObject.getJSONObject(tabletKey);
-            Assert.assertNotNull(tabletObject.getJSONArray("routings"));
-            Assert.assertEquals(3, 
tabletObject.getJSONArray("routings").length());
-            Assert.assertEquals(testStartVersion, 
tabletObject.getLong("version"));
-            Assert.assertEquals(testSchemaHash, 
tabletObject.getLong("schemaHash"));
+        for (Object tabletKey : partitionsObject.keySet()) {
+            JSONObject tabletObject = (JSONObject) 
partitionsObject.get(tabletKey);
+            Assert.assertNotNull(tabletObject.get("routings"));
+            Assert.assertEquals(3, ((JSONArray) 
tabletObject.get("routings")).size());
+            Assert.assertEquals(testStartVersion, (long) 
tabletObject.get("version"));
+            Assert.assertEquals(testSchemaHash, (long) 
tabletObject.get("schemaHash"));
 
         }
-        String queryPlan = jsonObject.getString("opaqued_query_plan");
+        String queryPlan = (String) jsonObject.get("opaqued_query_plan");
         Assert.assertNotNull(queryPlan);
         byte[] binaryPlanInfo = Base64.getDecoder().decode(queryPlan);
         TDeserializer deserializer = new TDeserializer();
@@ -90,10 +92,9 @@ public class TableQueryPlanActionTest extends 
DorisHttpTestCase {
         String respStr = response.body().string();
         System.out.println(respStr);
         Assert.assertNotNull(respStr);
-        expectThrowsNoException(() -> new JSONObject(respStr));
-        JSONObject jsonObject = new JSONObject(respStr);
-        Assert.assertEquals(400, jsonObject.getInt("status"));
-        String exception = jsonObject.getString("exception");
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(respStr);
+        Assert.assertEquals(400, (long) jsonObject.get("status"));
+        String exception = (String) jsonObject.get("exception");
         Assert.assertNotNull(exception);
         Assert.assertEquals("POST body must contains [sql] root object", 
exception);
     }
@@ -110,10 +111,9 @@ public class TableQueryPlanActionTest extends 
DorisHttpTestCase {
         String respStr = response.body().string();
         System.out.println(respStr);
         Assert.assertNotNull(respStr);
-        expectThrowsNoException(() -> new JSONObject(respStr));
-        JSONObject jsonObject = new JSONObject(respStr);
-        Assert.assertEquals(400, jsonObject.getInt("status"));
-        String exception = jsonObject.getString("exception");
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(respStr);
+        Assert.assertEquals(400, (long) jsonObject.get("status"));
+        String exception = (String) jsonObject.get("exception");
         Assert.assertNotNull(exception);
         Assert.assertEquals("POST body must contains [sql] root object", 
exception);
     }
@@ -130,10 +130,9 @@ public class TableQueryPlanActionTest extends 
DorisHttpTestCase {
         String respStr = response.body().string();
         System.out.println(respStr);
         Assert.assertNotNull(respStr);
-        expectThrowsNoException(() -> new JSONObject(respStr));
-        JSONObject jsonObject = new JSONObject(respStr);
-        Assert.assertEquals(400, jsonObject.getInt("status"));
-        String exception = jsonObject.getString("exception");
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(respStr);
+        Assert.assertEquals(400, (long) jsonObject.get("status"));
+        String exception = (String) jsonObject.get("exception");
         Assert.assertNotNull(exception);
         Assert.assertTrue(exception.startsWith("requested database and table 
must consistent with sql"));
     }
@@ -149,10 +148,9 @@ public class TableQueryPlanActionTest extends 
DorisHttpTestCase {
         Response response = networkClient.newCall(request).execute();
         String respStr = response.body().string();
         Assert.assertNotNull(respStr);
-        expectThrowsNoException(() -> new JSONObject(respStr));
-        JSONObject jsonObject = new JSONObject(respStr);
-        Assert.assertEquals(400, jsonObject.getInt("status"));
-        String exception = jsonObject.getString("exception");
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(respStr);
+        Assert.assertEquals(400, (long) jsonObject.get("status"));
+        String exception = (String) jsonObject.get("exception");
         Assert.assertNotNull(exception);
         Assert.assertTrue(exception.startsWith("malformed json"));
     }
@@ -168,10 +166,9 @@ public class TableQueryPlanActionTest extends 
DorisHttpTestCase {
         Response response = networkClient.newCall(request).execute();
         String respStr = response.body().string();
         Assert.assertNotNull(respStr);
-        expectThrowsNoException(() -> new JSONObject(respStr));
-        JSONObject jsonObject = new JSONObject(respStr);
-        Assert.assertEquals(403, jsonObject.getInt("status"));
-        String exception = jsonObject.getString("exception");
+        JSONObject jsonObject = (JSONObject) JSONValue.parse(respStr);
+        Assert.assertEquals(403, (long) jsonObject.get("status"));
+        String exception = (String) jsonObject.get("exception");
         Assert.assertTrue(exception.contains("table type is not OLAP"));
     }
 }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/http/TableRowCountActionTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/http/TableRowCountActionTest.java
index 2a69bd6..d697c53 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/http/TableRowCountActionTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/http/TableRowCountActionTest.java
@@ -17,14 +17,16 @@
 
 package org.apache.doris.http;
 
-import okhttp3.Request;
-import okhttp3.Response;
-import org.json.JSONObject;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 import org.junit.Assert;
 import org.junit.Test;
 
 import java.io.IOException;
 
+import okhttp3.Request;
+import okhttp3.Response;
+
 
 public class TableRowCountActionTest extends DorisHttpTestCase {
     private static final String PATH_URI = "/_count";
@@ -38,8 +40,8 @@ public class TableRowCountActionTest extends 
DorisHttpTestCase {
                 .build();
 
         Response response = networkClient.newCall(request).execute();
-        JSONObject jsonObject = new JSONObject(response.body().string());
-        Assert.assertEquals(200, jsonObject.getInt("status"));
-        Assert.assertEquals(2000, jsonObject.getLong("size"));
+        JSONObject jsonObject = (JSONObject) 
JSONValue.parse(response.body().string());
+        Assert.assertEquals(200, (long) jsonObject.get("status"));
+        Assert.assertEquals(2000, (long) jsonObject.get("size"));
     }
 }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/http/TableSchemaActionTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/http/TableSchemaActionTest.java
index c883f76..cb96a10 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/http/TableSchemaActionTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/http/TableSchemaActionTest.java
@@ -17,15 +17,16 @@
 
 package org.apache.doris.http;
 
-import okhttp3.Request;
-import okhttp3.Response;
-import org.json.JSONArray;
-import org.json.JSONObject;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
 import org.junit.Assert;
 import org.junit.Test;
 
 import java.io.IOException;
 
+import okhttp3.Request;
+import okhttp3.Response;
 import static org.junit.Assert.assertTrue;
 
 public class TableSchemaActionTest extends DorisHttpTestCase {
@@ -43,10 +44,10 @@ public class TableSchemaActionTest extends 
DorisHttpTestCase {
         assertTrue(response.isSuccessful());
         String respStr = response.body().string();
         Assert.assertNotNull(respStr);
-        JSONObject object = new JSONObject(respStr);
-        Assert.assertEquals(200, object.getInt("status"));
-        JSONArray propArray = object.getJSONArray("properties");
+        JSONObject object = (JSONObject) JSONValue.parse(respStr);
+        Assert.assertEquals(200, (long) object.get("status"));
+        JSONArray propArray = (JSONArray) object.get("properties");
         // k1, k2
-        Assert.assertEquals(2, propArray.length());
+        Assert.assertEquals(2, propArray.size());
     }
 }
diff --git a/fe/pom.xml b/fe/pom.xml
index 5daf5c7..07cc38f 100644
--- a/fe/pom.xml
+++ b/fe/pom.xml
@@ -322,11 +322,10 @@ under the License.
                 <artifactId>commons-io</artifactId>
                 <version>2.6</version>
             </dependency>
-            <!-- https://mvnrepository.com/artifact/org.json/json -->
             <dependency>
-                <groupId>org.json</groupId>
-                <artifactId>json</artifactId>
-                <version>20171018</version>
+                <groupId>com.googlecode.json-simple</groupId>
+                <artifactId>json-simple</artifactId>
+                <version>1.1.1</version>
             </dependency>
             <!-- https://mvnrepository.com/artifact/junit/junit -->
             <dependency>
@@ -376,12 +375,6 @@ under the License.
                 <artifactId>metrics-core</artifactId>
                 <version>4.0.2</version>
             </dependency>
-            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java 
-->
-            <dependency>
-                <groupId>mysql</groupId>
-                <artifactId>mysql-connector-java</artifactId>
-                <version>5.1.41</version>
-            </dependency>
             <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
             <dependency>
                 <groupId>io.netty</groupId>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to