diff --git a/pom.xml b/pom.xml
index c22844e4f5..30bd2c1bd2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -294,14 +294,6 @@
provided
-
-
- com.alibaba
- fastjson
- 1.1.19
- provided
-
-
mysql
mysql-connector-java
diff --git a/src/main/java/com/alibaba/druid/pool/ha/cobar/CobarConfigLoader.java b/src/main/java/com/alibaba/druid/pool/ha/cobar/CobarConfigLoader.java
index 6b3ab4b130..13750dba2c 100644
--- a/src/main/java/com/alibaba/druid/pool/ha/cobar/CobarConfigLoader.java
+++ b/src/main/java/com/alibaba/druid/pool/ha/cobar/CobarConfigLoader.java
@@ -5,15 +5,14 @@ import java.net.URL;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alibaba.druid.pool.ha.DataSourceHolder;
import com.alibaba.druid.pool.ha.config.ConfigLoader;
import com.alibaba.druid.pool.ha.config.URLConnectionConfigLoader;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.druid.support.json.JSONUtils;
public class CobarConfigLoader extends URLConnectionConfigLoader implements ConfigLoader {
@@ -63,26 +62,27 @@ public class CobarConfigLoader extends URLConnectionConfigLoader implements Conf
}
}
+ @SuppressWarnings({ "rawtypes", "unchecked" })
@Override
protected void handleResponseMessage() throws SQLException {
String responseMessage = this.getResponseMessage();
- JSONObject json = JSON.parseObject(responseMessage);
- String errorMessage = json.getString("error");
+ Map json = (Map) JSONUtils.parse(responseMessage);
+ String errorMessage = (String) json.get("error");
if (errorMessage != null) {
throw new SQLException("load config error, message : " + errorMessage);
}
- JSONArray array = json.getJSONArray("cobarList");
+ List array = (List) json.get("cobarList");
Set keys = new HashSet();
for (int i = 0; i < array.size(); ++i) {
- JSONObject item = array.getJSONObject(i);
+ Map item = (Map) array.get(i);
- String ip = item.getString("ip");
- int port = item.getIntValue("port");
- String schema = item.getString("schema");
- int weight = item.getIntValue("weight");
+ String ip = (String) item.get("ip");
+ int port = (Integer) item.get("port");
+ String schema = (String) item.get("schema");
+ int weight = (Integer) item.get("weight");
String key = ip + ":" + port + "/" + schema;
keys.add(key);
diff --git a/src/main/java/com/alibaba/druid/pool/ha/config/HAConfigLoader.java b/src/main/java/com/alibaba/druid/pool/ha/config/HAConfigLoader.java
index 1ca0b04a31..18af44893b 100644
--- a/src/main/java/com/alibaba/druid/pool/ha/config/HAConfigLoader.java
+++ b/src/main/java/com/alibaba/druid/pool/ha/config/HAConfigLoader.java
@@ -2,10 +2,9 @@ package com.alibaba.druid.pool.ha.config;
import java.net.URL;
import java.sql.SQLException;
+import java.util.Map;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-
+import com.alibaba.druid.support.json.JSONUtils;
public class HAConfigLoader extends URLConnectionConfigLoader {
@@ -15,8 +14,9 @@ public class HAConfigLoader extends URLConnectionConfigLoader {
@Override
protected void handleResponseMessage() throws SQLException {
- JSONObject json = JSON.parseObject(this.getResponseMessage());
- json.get("serverList");
+ @SuppressWarnings("unchecked")
+ Map map = (Map) JSONUtils.parse(this.getResponseMessage());
+ map.get("serverList");
}
}
diff --git a/src/main/java/com/alibaba/druid/support/DruidStatJSONService.java b/src/main/java/com/alibaba/druid/support/DruidStatJSONService.java
index ab79eb2ab0..cdf66d8d9f 100644
--- a/src/main/java/com/alibaba/druid/support/DruidStatJSONService.java
+++ b/src/main/java/com/alibaba/druid/support/DruidStatJSONService.java
@@ -13,10 +13,10 @@ import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.stat.DruidStatManagerFacade;
import com.alibaba.druid.support.http.stat.WebAppStatManager;
+import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.druid.support.spring.stat.SpringStatManager;
import com.alibaba.druid.util.MapComparator;
import com.alibaba.druid.util.StringUtils;
-import com.alibaba.fastjson.JSON;
/**
* 注意:避免直接调用Druid相关对象例如DruidDataSource等,相关调用要到DruidStatManagerFacade里用反射实现
@@ -246,7 +246,7 @@ public class DruidStatJSONService {
Map dataMap = new LinkedHashMap();
dataMap.put("ResultCode", resultCode);
dataMap.put("Content", content);
- return JSON.toJSONStringWithDateFormat(dataMap, "yyyy-MM-dd HH:mm:ss");
+ return JSONUtils.toJSONString(dataMap);
}
}
diff --git a/src/main/java/com/alibaba/druid/support/json/JSONParser.java b/src/main/java/com/alibaba/druid/support/json/JSONParser.java
new file mode 100644
index 0000000000..216ec505a3
--- /dev/null
+++ b/src/main/java/com/alibaba/druid/support/json/JSONParser.java
@@ -0,0 +1,329 @@
+package com.alibaba.druid.support.json;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public class JSONParser {
+
+ private String text;
+ private int index = 0;
+ private char ch;
+
+ private Token token;
+ private String stringValue;
+ private long longValue;
+ private double doubleValue;
+
+ public JSONParser(String text){
+ this.text = text;
+ ch = text.charAt(0);
+ nextToken();
+ }
+
+ public Object parse() {
+ if (token == Token.LBRACE) {
+ return parseMap();
+ }
+
+ if (token == Token.INT) {
+ Object value;
+ if (this.longValue >= Integer.MIN_VALUE && this.longValue <= Integer.MAX_VALUE) {
+ value = (int) this.longValue;
+ } else {
+ value = this.longValue;
+ }
+
+ nextToken();
+ return value;
+ }
+
+ if (token == Token.DOUBLE) {
+ Object value = this.doubleValue;
+ nextToken();
+ return value;
+ }
+
+ if (token == Token.STRING) {
+ Object value = this.stringValue;
+ nextToken();
+ return value;
+ }
+
+ if (token == Token.LBRACKET) {
+ return parseArray();
+ }
+
+ if (token == Token.TRUE) {
+ nextToken();
+ return true;
+ }
+
+ if (token == Token.FALSE) {
+ nextToken();
+ return false;
+ }
+
+ throw new IllegalArgumentException("illegal token : " + token);
+ }
+
+ public List