diff --git a/naming/pom.xml b/naming/pom.xml index 3accb3a28..2f82087fb 100644 --- a/naming/pom.xml +++ b/naming/pom.xml @@ -52,10 +52,6 @@ nacos-api - - com.alibaba - fastjson - io.netty diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java b/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java index 7da3f6e13..91aed0294 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java @@ -326,11 +326,7 @@ public class Service extends com.alibaba.nacos.api.naming.pojo.Service implement } public String toJSON() { - try { - return JacksonUtils.toJson(this); - } catch (Exception e) { - throw new RuntimeException("Service toJson failed", e); - } + return JacksonUtils.toJson(this); } @JsonIgnore diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java index 6fdc5638e..3d1179bc3 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @@ -15,12 +15,10 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.api.naming.utils.NamingUtils; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.naming.consistency.ConsistencyService; @@ -32,14 +30,14 @@ import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet; import com.alibaba.nacos.naming.misc.GlobalExecutor; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.Message; -import com.alibaba.nacos.naming.misc.NamingProxy; import com.alibaba.nacos.naming.misc.NetUtils; import com.alibaba.nacos.naming.misc.ServiceStatusSynchronizer; import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.misc.Synchronizer; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.alibaba.nacos.naming.push.PushService; -import com.google.common.collect.Maps; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.collect.Sets; import java.util.ArrayList; import java.util.Collection; @@ -62,7 +60,6 @@ import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -274,13 +271,13 @@ public class ServiceManager implements RecordListener { public void updatedHealthStatus(String namespaceId, String serviceName, String serverIP) { Message msg = synchronizer.get(serverIP, UtilsAndCommons.assembleFullServiceName(namespaceId, serviceName)); - JSONObject serviceJson = JSON.parseObject(msg.getData()); + JsonNode serviceJson = JacksonUtils.toObj(msg.getData()); - JSONArray ipList = serviceJson.getJSONArray("ips"); + ArrayNode ipList = (ArrayNode) serviceJson.get("ips"); Map ipsMap = new HashMap<>(ipList.size()); for (int i = 0; i < ipList.size(); i++) { - String ip = ipList.getString(i); + String ip = ipList.get(i).asText(); String[] strings = ip.split("_"); ipsMap.put(strings[0], strings[1]); } @@ -565,7 +562,7 @@ public class ServiceManager implements RecordListener { if (instanceMap.size() <= 0 && UtilsAndCommons.UPDATE_INSTANCE_ACTION_ADD.equals(action)) { throw new IllegalArgumentException("ip list can not be empty, service: " + service.getName() + ", ip list: " - + JSON.toJSONString(instanceMap.values())); + + JacksonUtils.toJson(instanceMap.values())); } return new ArrayList<>(instanceMap.values()); @@ -839,7 +836,7 @@ public class ServiceManager implements RecordListener { Message msg = new Message(); - msg.setData(JSON.toJSONString(checksum)); + msg.setData(JacksonUtils.toJson(checksum)); Collection sameSiteServers = memberManager.allMembers(); @@ -893,7 +890,7 @@ public class ServiceManager implements RecordListener { @Override public String toString() { - return JSON.toJSONString(this); + return JacksonUtils.toJson(this); } } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java index 971ae9571..9ce3ed769 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java @@ -15,8 +15,8 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.api.naming.CommonParams; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.ApplicationUtils; @@ -93,7 +93,7 @@ public class SubscribeManager { + UtilsAndCommons.NACOS_NAMING_CONTEXT + SUBSCRIBER_ON_SYNC_URL, new ArrayList<>(), paramValues); if (HttpURLConnection.HTTP_OK == result.code) { - Subscribers subscribers = (Subscribers) JSONObject.parseObject(result.content, Subscribers.class); + Subscribers subscribers = JacksonUtils.toObj(result.content, Subscribers.class); subscriberList.addAll(subscribers.getSubscribers()); } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java index 655d82237..f9b45df44 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceManagerTest.java @@ -17,10 +17,14 @@ package com.alibaba.nacos.naming.core; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.PreservedMetadataKeys; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.BaseTest; import com.alibaba.nacos.naming.consistency.ConsistencyService; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; +import com.alibaba.nacos.naming.core.ServiceManager.ServiceChecksum; +import com.alibaba.nacos.naming.misc.Message; +import com.alibaba.nacos.naming.misc.Synchronizer; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.google.common.collect.Maps; import org.junit.Assert; @@ -33,6 +37,7 @@ import org.springframework.test.util.ReflectionTestUtils; import java.util.List; import java.util.Map; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; /** @@ -46,6 +51,9 @@ public class ServiceManagerTest extends BaseTest { @Mock private ConsistencyService consistencyService; + @Mock + private Synchronizer synchronizer; + @Before public void before() { super.before(); @@ -116,4 +124,26 @@ public class ServiceManagerTest extends BaseTest { int instanceId2 = Integer.parseInt(instance2.getInstanceId()); Assert.assertNotEquals(instanceId1, instanceId2); } + + @Test + public void testUpdatedHealthStatus() { + ReflectionTestUtils.setField(serviceManager, "synchronizer", synchronizer); + String namespaceId = "namespaceId"; + String serviceName = "testService"; + String serverIp = "127.0.0.1"; + String example = "{\"ips\":[\"127.0.0.1:8848_true\"]}"; + Message message = new Message(); + message.setData(example); + when(synchronizer.get(serverIp, UtilsAndCommons.assembleFullServiceName(namespaceId, serviceName))).thenReturn(message); + serviceManager.updatedHealthStatus(namespaceId, serviceName, serverIp); + } + + @Test + public void testSerializeServiceChecksum() { + ServiceChecksum checksum = new ServiceChecksum(); + checksum.addItem("test", "1234567890"); + String actual = JacksonUtils.toJson(checksum); + assertTrue(actual.contains("\"namespaceId\":\"public\"")); + assertTrue(actual.contains("\"serviceName2Checksum\":{\"test\":\"1234567890\"}")); + } } diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java index 006f02a07..b909b138b 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/ServiceTest.java @@ -15,7 +15,6 @@ */ package com.alibaba.nacos.naming.core; -import com.alibaba.nacos.api.selector.SelectorType; import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.naming.BaseTest; import com.alibaba.nacos.naming.selector.NoneSelector; @@ -48,7 +47,6 @@ public class ServiceTest extends BaseTest { mockInjectHealthCheckProcessor(); mockInjectDistroMapper(); mockInjectSwitchDomain(); - JacksonUtils.registerSubtype(NoneSelector.class, SelectorType.none.name()); } @Test @@ -121,4 +119,10 @@ public class ServiceTest extends BaseTest { assertTrue(actual.contains("\"protectThreshold\":0.0")); assertTrue(actual.contains("\"clusters\":[]")); } + + @Test + public void test() { + String a = "{\"appName\":\"\",\"checksum\":\"d9ce515b2d3f26a06cd7ba43a4cba1a7\",\"clusterMap\":{},\"empty\":true,\"enabled\":true,\"finalizeCount\":0,\"groupName\":\"\",\"ipDeleteTimeout\":30000,\"lastModifiedMillis\":1590401570517,\"metadata\":{},\"name\":\"DEFAULT_GROUP@@nacos.test\",\"namespaceId\":\"public\",\"owners\":[],\"protectThreshold\":0.5,\"pushService\":{\"failedPushCount\":0,\"totalPush\":0},\"resetWeight\":false,\"selector\":{\"type\":\"none\"},\"serviceString\":\"{\\\"invalidIPCount\\\":0,\\\"name\\\":\\\"DEFAULT_GROUP@@nacos.test\\\",\\\"ipCount\\\":0,\\\"owners\\\":[],\\\"protectThreshold\\\":0.5,\\\"clusters\\\":[],\\\"token\\\":null}\",\"token\":\"\"}"; +// JacksonUtils.toObj(a, Service.class); + } }