You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/04/24 03:46:37 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2456] introduce maven spotbugs plugin (#2789)

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

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 52a655a28 [SCB-2456] introduce maven spotbugs plugin (#2789)
52a655a28 is described below

commit 52a655a288c2fc45ed79030fb1ba010ad468b69b
Author: ZhangJian He <sh...@gmail.com>
AuthorDate: Sun Apr 24 11:46:32 2022 +0800

    [SCB-2456] introduce maven spotbugs plugin (#2789)
---
 .github/workflows/spotbugs.yml                     |  37 ++++
 ci/spotbugs/exclude.xml                            | 206 +++++++++++++++++++++
 .../servicecomb/config/kie/client/KieClient.java   |   3 +-
 .../servicecomb/http/client/task/AbstractTask.java |   8 +-
 .../center/client/ServiceCenterRegistration.java   |   4 +-
 .../common/accessLog/AccessLogBootstrap.java       |   3 -
 .../rest/codec/param/BodyProcessorCreator.java     |   8 +-
 .../rest/codec/param/TestBodyProcessorCreator.java |   4 +-
 .../StaticMicroserviceVersionMetaTest.java         |  73 --------
 .../core/definition/TestMicroserviceMeta.java      |  82 --------
 .../definition/TestMicroserviceVersionMeta.java    |  62 -------
 .../TestMicroserviceVersionMetaFactory.java        |  50 -----
 .../core/definition/TestOperationMeta.java         | 196 --------------------
 .../core/definition/TestSchemaMeta.java            |  40 ----
 .../definition/loader/TestDynamicSchemaLoader.java | 105 -----------
 .../loader/TestSchemaListenerManager.java          |  44 -----
 .../foundation/common/utils/RSAUtils.java          |   7 +-
 .../archaius/sources/AbstractConfigLoader.java     |   2 +-
 .../servicecomb/config/parser/YamlParser.java      |   3 +-
 .../schema/ArgumentsWrapperMessageSchema.java      |  48 -----
 .../registry/version/VersionRuleFixedParser.java   |   2 +-
 .../registry/version/VersionRuleRangeParser.java   |   2 +-
 .../version/VersionRuleStartFromParser.java        |   2 +-
 .../governance/handler/CircuitBreakerHandler.java  |   4 +-
 .../governance/policy/AbstractPolicy.java          |   4 +-
 .../governance/policy/CircuitBreakerPolicy.java    |   2 +-
 .../authentication/RSAAuthenticationToken.java     |   2 +-
 .../meter/invocation/AbstractInvocationMeter.java  |   9 +-
 .../meter/invocation/ConsumerInvocationMeter.java  |   5 +-
 .../meter/invocation/ConsumerInvocationMeters.java |   2 +-
 .../core/meter/invocation/EdgeInvocationMeter.java |   5 +-
 .../meter/invocation/EdgeInvocationMeters.java     |   2 +-
 .../meter/invocation/ProducerInvocationMeter.java  |   5 +-
 .../meter/invocation/ProducerInvocationMeters.java |   2 +-
 pom.xml                                            |  23 +++
 scripts/build.sh                                   |   2 +-
 .../refresh/ClassificationAddress.java             |   2 +-
 .../generator/core/AbstractSwaggerGenerator.java   |  24 +--
 .../consumer/ConsumerBeanParamMapper.java          |   2 +-
 .../producer/ProducerBeanParamMapper.java          |   2 +-
 .../producer/codec/ArgWrapperJavaType.java         |   2 +-
 .../transport/highway/HighwayClientConnection.java |   2 +-
 .../transport/rest/servlet/ServletUtils.java       |   2 +-
 43 files changed, 314 insertions(+), 780 deletions(-)

diff --git a/.github/workflows/spotbugs.yml b/.github/workflows/spotbugs.yml
new file mode 100644
index 000000000..79a4f9a57
--- /dev/null
+++ b/.github/workflows/spotbugs.yml
@@ -0,0 +1,37 @@
+#
+# 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.
+#
+
+name: spot bugs
+on:
+  pull_request:
+    branches:
+      - master
+
+jobs:
+  publish:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - name: Set up jdk
+        uses: actions/setup-java@v2
+        with:
+          java-version: '8'
+          distribution: 'temurin'
+      - name: spotbugs
+        run: mvn -B -DskipTests clean verify spotbugs:spotbugs
diff --git a/ci/spotbugs/exclude.xml b/ci/spotbugs/exclude.xml
new file mode 100644
index 000000000..eee7b5e25
--- /dev/null
+++ b/ci/spotbugs/exclude.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<FindBugsFilter
+        xmlns="https://github.com/spotbugs/filter/3.0.0"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="https://github.com/spotbugs/filter/3.0.0 https://raw.githubusercontent.com/spotbugs/spotbugs/3.1.0/spotbugs/etc/findbugsfilter.xsd">
+
+
+    <!-- pattern sort by alpha -->
+
+    <Match>
+        <Bug pattern="BC_UNCONFIRMED_CAST"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="BC_VACUOUS_INSTANCEOF"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="DC_DOUBLECHECK"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="DC_PARTIALLY_CONSTRUCTED"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EC_UNRELATED_TYPES"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP2"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EI_EXPOSE_STATIC_REP2"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="EQ_UNUSUAL"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="ICAST_IDIV_CAST_TO_DOUBLE"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MF_CLASS_MASKS_FIELD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_CANNOT_BE_FINAL"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_EXPOSE_REP"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_MUTABLE_ARRAY"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_MUTABLE_COLLECTION_PKGPROTECT"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_OOI_PKGPROTECT"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_SHOULD_BE_FINAL"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="MS_PKGPROTECT"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="NP_NONNULL_RETURN_VIOLATION"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="OBL_UNSATISFIED_OBLIGATION"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="RC_REF_COMPARISON"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="REFLC_REFLECTION_MAY_INCREASE_ACCESSIBILITY_OF_CLASS"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="RV_NEGATING_RESULT_OF_COMPARETO"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="SA_FIELD_SELF_COMPARISON"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="SE_BAD_FIELD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="SIC_INNER_SHOULD_BE_STATIC"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="SSD_DO_NOT_USE_INSTANCE_LOCK_ON_SHARED_STATIC_DATA"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="UC_USELESS_OBJECT"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="VA_FORMAT_STRING_USES_NEWLINE"/>
+    </Match>
+
+    <Match>
+        <Bug pattern="WMI_WRONG_MAP_ITERATOR"/>
+    </Match>
+
+</FindBugsFilter>
diff --git a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
index 6a54aa640..59d8bdce8 100644
--- a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
+++ b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
@@ -18,6 +18,7 @@
 package org.apache.servicecomb.config.kie.client;
 
 import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -145,7 +146,7 @@ public class KieClient implements KieConfigOperation {
         case yml:
         case yaml:
           YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
-          yamlFactory.setResources(new ByteArrayResource(kvDoc.getValue().getBytes()));
+          yamlFactory.setResources(new ByteArrayResource(kvDoc.getValue().getBytes(StandardCharsets.UTF_8)));
           return toMap(yamlFactory.getObject());
         case properties:
           properties.load(new StringReader(kvDoc.getValue()));
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
index c33c04a96..889183cf3 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/task/AbstractTask.java
@@ -27,16 +27,16 @@ import org.slf4j.LoggerFactory;
 
 public class AbstractTask {
   public class BackOffSleepTask implements Task {
-    final long base = 3000;
+    private static final long BASE = 3000;
 
-    final long max = 10 * 60 * 10000;
+    private static final long MAX = 10 * 60 * 10000;
 
     long waitTime;
 
     Task nextTask;
 
     public BackOffSleepTask(int failedCount, Task nextTask) {
-      this.waitTime = failedCount * failedCount * base;
+      this.waitTime = failedCount * failedCount * BASE;
       this.nextTask = nextTask;
     }
 
@@ -47,7 +47,7 @@ public class AbstractTask {
 
     @Override
     public void execute() {
-      long time = Math.min(max, waitTime);
+      long time = Math.min(MAX, waitTime);
       try {
         Thread.sleep(time);
       } catch (InterruptedException e) {
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
index 68ceb7241..c62b14d54 100644
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterRegistration.java
@@ -239,7 +239,7 @@ public class ServiceCenterRegistration extends AbstractTask {
   }
 
   class SendHeartBeatTask implements Task {
-    final int failedRetry = 3;
+    private static final int FAILED_RETRY = 3;
 
     int failedCount;
 
@@ -250,7 +250,7 @@ public class ServiceCenterRegistration extends AbstractTask {
     @Override
     public void execute() {
       try {
-        if (failedCount >= failedRetry) {
+        if (failedCount >= FAILED_RETRY) {
           eventBus.post(new HeartBeatEvent(false));
           startTask(new RegisterMicroserviceTask(0));
           return;
diff --git a/common/common-access-log/src/main/java/org/apache/servicecomb/common/accessLog/AccessLogBootstrap.java b/common/common-access-log/src/main/java/org/apache/servicecomb/common/accessLog/AccessLogBootstrap.java
index df5b82f02..56cc12ef0 100644
--- a/common/common-access-log/src/main/java/org/apache/servicecomb/common/accessLog/AccessLogBootstrap.java
+++ b/common/common-access-log/src/main/java/org/apache/servicecomb/common/accessLog/AccessLogBootstrap.java
@@ -24,10 +24,7 @@ import com.google.common.eventbus.EventBus;
 public class AccessLogBootstrap {
   private static final AccessLogConfig config = AccessLogConfig.INSTANCE;
 
-  private EventBus eventBus;
-
   public void start(EventBus eventBus) {
-    this.eventBus = eventBus;
     SPIServiceUtils.getSortedService(AccessLogInitializer.class)
         .forEach(initializer -> initializer.init(eventBus, config));
   }
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
index 5b6dfc2ff..457bc8070 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/param/BodyProcessorCreator.java
@@ -56,7 +56,7 @@ import io.vertx.core.buffer.impl.BufferImpl;
 public class BodyProcessorCreator implements ParamValueProcessorCreator {
   private static final Logger LOGGER = LoggerFactory.getLogger(BodyProcessorCreator.class);
 
-  public static final String PARAMTYPE = "body";
+  public static final String PARAM_TYPE = "body";
 
   private static final JavaType OBJECT_TYPE = SimpleType.constructUnsafe(Object.class);
 
@@ -164,7 +164,7 @@ public class BodyProcessorCreator implements ParamValueProcessorCreator {
         if (!(arg instanceof String)) {
           throw new IllegalArgumentException("Content-Type is text/plain while arg type is not String");
         }
-        return new BufferImpl().appendBytes(((String) arg).getBytes());
+        return new BufferImpl().appendBytes(((String) arg).getBytes(StandardCharsets.UTF_8));
       }
 
       try (BufferOutputStream output = new BufferOutputStream()) {
@@ -190,7 +190,7 @@ public class BodyProcessorCreator implements ParamValueProcessorCreator {
 
     @Override
     public String getProcessorType() {
-      return PARAMTYPE;
+      return PARAM_TYPE;
     }
   }
 
@@ -232,7 +232,7 @@ public class BodyProcessorCreator implements ParamValueProcessorCreator {
   }
 
   public BodyProcessorCreator() {
-    ParamValueProcessorCreatorManager.INSTANCE.register(PARAMTYPE, this);
+    ParamValueProcessorCreatorManager.INSTANCE.register(PARAM_TYPE, this);
   }
 
   @Override
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessorCreator.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessorCreator.java
index db9d5ded3..6d704ba13 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessorCreator.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/param/TestBodyProcessorCreator.java
@@ -29,7 +29,7 @@ public class TestBodyProcessorCreator {
   @Test
   public void testCreateNormal() {
     ParamValueProcessorCreator creator =
-        ParamValueProcessorCreatorManager.INSTANCE.findValue(BodyProcessorCreator.PARAMTYPE);
+        ParamValueProcessorCreatorManager.INSTANCE.findValue(BodyProcessorCreator.PARAM_TYPE);
     BodyParameter param = new BodyParameter();
 
     ParamValueProcessor processor = creator.create(param, String.class);
@@ -40,7 +40,7 @@ public class TestBodyProcessorCreator {
   @Test
   public void testCreateRawJson() {
     ParamValueProcessorCreator creator =
-        ParamValueProcessorCreatorManager.INSTANCE.findValue(BodyProcessorCreator.PARAMTYPE);
+        ParamValueProcessorCreatorManager.INSTANCE.findValue(BodyProcessorCreator.PARAM_TYPE);
     BodyParameter param = new BodyParameter();
     param.setVendorExtension(SwaggerConst.EXT_RAW_JSON_TYPE, true);
 
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/StaticMicroserviceVersionMetaTest.java b/core/src/test/java/org/apache/servicecomb/core/definition/StaticMicroserviceVersionMetaTest.java
deleted file mode 100644
index 145d05751..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/StaticMicroserviceVersionMetaTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.servicecomb.core.definition;
-
-public class StaticMicroserviceVersionMetaTest {
-//
-//  private static final String APP_ID_FROM_REGISTRY_UTIL = "appIdFromRegistryUtil";
-//
-//  @BeforeClass
-//  public static void beforeClass() {
-//    new MockUp<RegistryUtils>() {
-//      @Mock
-//      String getAppId() {
-//        return APP_ID_FROM_REGISTRY_UTIL;
-//      }
-//    };
-//  }
-//
-//  @Test
-//  public void testConstruct() {
-//    StaticMicroservice staticMicroservice = new StaticMicroservice();
-//    String appId = "testAppId";
-//    String serviceName = "testServiceName";
-//    String version = "1.2.1";
-//    staticMicroservice.setAppId(appId);
-//    staticMicroservice.setServiceName(serviceName);
-//    staticMicroservice.setVersion(version);
-//
-//    Holder<Boolean> schemaLoaded = new Holder<>(false);
-//    SCBEngine.getInstance().setStaticSchemaFactory(new MockUp<StaticSchemaFactory>() {
-//      @Mock
-//      void loadSchema(MicroserviceMeta microserviceMeta, StaticMicroservice microservice) {
-//        Assert.assertSame(APP_ID_FROM_REGISTRY_UTIL, microserviceMeta.getAppId());
-//        Assert.assertSame(serviceName, microserviceMeta.getName());
-//        Assert.assertSame(serviceName, microserviceMeta.getShortName());
-//        Assert.assertSame(staticMicroservice, microservice);
-//        schemaLoaded.value = true;
-//      }
-//    }.getMockInstance());
-//    Holder<Boolean> listenerNotified = new Holder<>(false);
-//    CseContext.getInstance().setSchemaListenerManager(new MockUp<SchemaListenerManager>() {
-//      @Mock
-//      void notifySchemaListener(MicroserviceMeta... microserviceMetas) {
-//        Assert.assertEquals(1, microserviceMetas.length);
-//        MicroserviceMeta microserviceMeta = microserviceMetas[0];
-//        Assert.assertEquals(serviceName, microserviceMeta.getShortName());
-//        listenerNotified.value = true;
-//      }
-//    }.getMockInstance());
-//
-//    StaticMicroserviceVersionMeta staticMicroserviceVersionMeta = new StaticMicroserviceVersionMeta(staticMicroservice);
-//
-//    Assert.assertTrue(schemaLoaded.value);
-//    Assert.assertTrue(listenerNotified.value);
-//    Assert.assertSame(staticMicroservice, staticMicroserviceVersionMeta.getMicroservice());
-//    Assert.assertEquals(serviceName, staticMicroserviceVersionMeta.getMicroserviceMeta().getName());
-//  }
-}
\ No newline at end of file
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceMeta.java b/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceMeta.java
deleted file mode 100644
index 74fc0e9bb..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceMeta.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * 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.servicecomb.core.definition;
-
-public class TestMicroserviceMeta {
-//  MicroserviceMeta microserviceMeta = new MicroserviceMeta("app:microservice");
-//
-//  @Test
-//  public void isConsumer() {
-//    Assert.assertTrue(microserviceMeta.isConsumer());
-//  }
-//
-//  @Test
-//  public void testGetSchemaMetas() {
-//    Collection<SchemaMeta> schemaMetas = microserviceMeta.getSchemaMetas();
-//    Assert.assertNotNull(schemaMetas);
-//  }
-//
-//  @Test
-//  public void testGetExtData() {
-//    Object data = new Object();
-//    microserviceMeta.putExtData("pruthi", data);
-//    Object response = microserviceMeta.getExtData("pruthi");
-//    Assert.assertNotNull(response);
-//  }
-//
-//  @Test
-//  public void testIntf(@Mocked SchemaMeta sm1, @Mocked SchemaMeta sm2) {
-//    Class<?> intf = Object.class;
-//    new Expectations() {
-//      {
-//        sm1.getSchemaId();
-//        result = "a";
-//        sm2.getSchemaId();
-//        result = "b";
-//        sm1.getSwaggerIntf();
-//        result = intf;
-//        sm2.getSwaggerIntf();
-//        result = intf;
-//      }
-//    };
-//
-//    try {
-//      microserviceMeta.ensureFindSchemaMeta(intf);
-//      Assert.assertEquals(1, 2);
-//    } catch (Throwable e) {
-//      Assert.assertEquals(
-//          "No schema interface is java.lang.Object.",
-//          e.getMessage());
-//    }
-//    microserviceMeta.regSchemaMeta(sm1);
-//    Assert.assertEquals(sm1, microserviceMeta.findSchemaMeta(intf));
-//    Assert.assertEquals(sm1, microserviceMeta.ensureFindSchemaMeta(intf));
-//
-//    microserviceMeta.regSchemaMeta(sm2);
-//    Assert.assertEquals(sm1, microserviceMeta.ensureFindSchemaMeta("a"));
-//    Assert.assertEquals(sm2, microserviceMeta.ensureFindSchemaMeta("b"));
-//    try {
-//      microserviceMeta.findSchemaMeta(intf);
-//      Assert.assertEquals(1, 2);
-//    } catch (Throwable e) {
-//      Assert.assertEquals(
-//          "More than one schema interface is java.lang.Object, please use schemaId to choose a schema.",
-//          e.getMessage());
-//    }
-//  }
-}
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceVersionMeta.java b/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceVersionMeta.java
deleted file mode 100644
index b31862b4f..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceVersionMeta.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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.servicecomb.core.definition;
-
-public class TestMicroserviceVersionMeta {
-//  @AfterClass
-//  public static void teardown() {
-//    CseContext.getInstance().setConsumerSchemaFactory(null);
-//    CseContext.getInstance().setSchemaListenerManager(null);
-//  }
-//
-//  @Test
-//  public void construct(@Mocked ServiceRegistry serviceRegistry) {
-//    String microserviceName = "app:ms";
-//    String microserviceId = "id";
-//    Microservice microservice = new Microservice();
-//    microservice.setVersion("1.0.0");
-//
-//    new Expectations(RegistryUtils.class) {
-//      {
-//        RegistryUtils.getServiceRegistry();
-//        result = serviceRegistry;
-//        serviceRegistry.getAggregatedRemoteMicroservice(microserviceId);
-//        result = microservice;
-//      }
-//    };
-//
-//    List<String> logs = new ArrayList<>();
-//    CseContext.getInstance().setConsumerSchemaFactory(new MockUp<ConsumerSchemaFactory>() {
-//      @Mock
-//      void createConsumerSchema(MicroserviceMeta microserviceMeta, Microservice microservice) {
-//        logs.add("createConsumerSchema");
-//      }
-//    }.getMockInstance());
-//    CseContext.getInstance().setSchemaListenerManager(new MockUp<SchemaListenerManager>() {
-//      @Mock
-//      void notifySchemaListener(MicroserviceMeta... microserviceMetas) {
-//        logs.add("notifySchemaListener");
-//      }
-//    }.getMockInstance());
-//
-//    MicroserviceVersionMeta microserviceVersionMeta = new MicroserviceVersionMeta(microserviceName, microserviceId);
-//
-//    Assert.assertThat(logs, Matchers.contains("createConsumerSchema", "notifySchemaListener"));
-//    Assert.assertEquals(microserviceName, microserviceVersionMeta.getMicroserviceMeta().getName());
-//  }
-}
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceVersionMetaFactory.java b/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceVersionMetaFactory.java
deleted file mode 100644
index 61111924d..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/TestMicroserviceVersionMetaFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * 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.servicecomb.core.definition;
-
-public class TestMicroserviceVersionMetaFactory {
-//  @AfterClass
-//  public static void teardown() {
-//    CseContext.getInstance().setConsumerSchemaFactory(null);
-//    CseContext.getInstance().setSchemaListenerManager(null);
-//  }
-//
-//  @Test
-//  public void create(@Mocked ConsumerSchemaFactory consumerSchemaFactory,
-//      @Mocked SchemaListenerManager schemaListenerManager, @Mocked ServiceRegistry serviceRegistry) {
-//    String microserviceName = "app:ms";
-//    String microserviceId = "id";
-//    Microservice microservice = new Microservice();
-//    microservice.setVersion("1.0.0");
-//
-//    new Expectations(RegistryUtils.class) {
-//      {
-//        RegistryUtils.getServiceRegistry();
-//        result = serviceRegistry;
-//        serviceRegistry.getAggregatedRemoteMicroservice(microserviceId);
-//        result = microservice;
-//      }
-//    };
-//    CseContext.getInstance().setConsumerSchemaFactory(consumerSchemaFactory);
-//    CseContext.getInstance().setSchemaListenerManager(schemaListenerManager);
-//
-//    MicroserviceVersionMetaFactory factory = new MicroserviceVersionMetaFactory();
-//    MicroserviceVersion microserviceVersion = factory.create(microserviceName, microserviceId);
-//    Assert.assertThat(microserviceVersion, Matchers.instanceOf(MicroserviceVersionMeta.class));
-//  }
-}
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/TestOperationMeta.java b/core/src/test/java/org/apache/servicecomb/core/definition/TestOperationMeta.java
deleted file mode 100644
index f768d1815..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/TestOperationMeta.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * 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.servicecomb.core.definition;
-
-public class TestOperationMeta {
-//  class Impl {
-//    @ApiResponse(
-//        code = 300,
-//        response = String.class,
-//        message = "",
-//        responseHeaders = {@ResponseHeader(name = "h3", response = int.class)})
-//    @ResponseHeaders({@ResponseHeader(name = "h1", response = int.class),
-//        @ResponseHeader(name = "h2", response = String.class, responseContainer = "List")})
-//    public int test(int x) {
-//      return 100;
-//    }
-//  }
-//
-//  @BeforeClass
-//  public static void setup() {
-//    ArchaiusUtils.resetConfig();
-//  }
-//
-//  @AfterClass
-//  public static void teardown() {
-//    ArchaiusUtils.resetConfig();
-//  }
-//
-//  @Test
-//  public void testOperationMeta() {
-//    UnitTestMeta meta = new UnitTestMeta();
-//    SchemaMeta schemaMeta = meta.getOrCreateSchemaMeta(Impl.class);
-//    OperationMeta operationMeta = schemaMeta.findOperation("test");
-//
-//    Assert.assertEquals("POST", operationMeta.getHttpMethod());
-//    Assert.assertEquals("/test", operationMeta.getOperationPath());
-//    Assert.assertEquals(schemaMeta, operationMeta.getSchemaMeta());
-//    Assert.assertEquals(Impl.class.getName() + ".test",
-//        operationMeta.getSchemaQualifiedName());
-//    Assert.assertEquals("perfClient." + Impl.class.getName() + ".test",
-//        operationMeta.getMicroserviceQualifiedName());
-//    Assert.assertEquals("perfClient", operationMeta.getMicroserviceName());
-//    Assert.assertEquals("test", operationMeta.getOperationId());
-//    Assert.assertEquals("x", operationMeta.getParamName(0));
-//
-//    operationMeta.putExtData("ext", 1);
-//    Assert.assertEquals(1, (int) operationMeta.getExtData("ext"));
-//
-//    ResponseMeta responseMeta = operationMeta.findResponseType(200);
-//    Assert.assertEquals("Ljava/lang/Integer;", responseMeta.getJavaType().getGenericSignature());
-//    Assert.assertEquals("Ljava/lang/Integer;", responseMeta.getHeaders().get("h1").getGenericSignature());
-//    Assert.assertEquals("Ljava/util/List<Ljava/lang/String;>;",
-//        responseMeta.getHeaders().get("h2").getGenericSignature());
-//    Assert.assertEquals(null, responseMeta.getHeaders().get("h3"));
-//
-//    responseMeta = operationMeta.findResponseType(300);
-//    Assert.assertEquals("Ljava/lang/String;", responseMeta.getJavaType().getGenericSignature());
-//    Assert.assertEquals("Ljava/lang/Integer;", responseMeta.getHeaders().get("h1").getGenericSignature());
-//    Assert.assertEquals("Ljava/util/List<Ljava/lang/String;>;",
-//        responseMeta.getHeaders().get("h2").getGenericSignature());
-//    Assert.assertEquals("Ljava/lang/Integer;", responseMeta.getHeaders().get("h3").getGenericSignature());
-//  }
-//
-//  @Test
-//  public void opConfig() {
-//    UnitTestMeta meta = new UnitTestMeta();
-//    SchemaMeta schemaMeta = meta.getOrCreateSchemaMeta(Impl.class);
-//    OperationMeta operationMeta = schemaMeta.findOperation("test");
-//
-//    OperationConfig config = operationMeta.getConfig();
-//
-//    // slow invocation
-//    slowInvocation(config);
-//
-//    // consumer request timeout
-//    consumerRequestTimeout(config);
-//
-//    // highway wait in thread pool timeout
-//    highwayWaitInPool(config);
-//
-//    // rest wait in thread pool timeout
-//    restWaitInPool(config);
-//  }
-//
-//  private void restWaitInPool(OperationConfig config) {
-//    ArchaiusUtils.updateProperty("servicecomb.Provider.requestWaitInPoolTimeout", null);
-//    ArchaiusUtils.updateProperty("servicecomb.Provider.requestWaitInPoolTimeout.perfClient", null);
-//    ArchaiusUtils.updateProperty(
-//        "servicecomb.Provider.requestWaitInPoolTimeout.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl",
-//        null);
-//    ArchaiusUtils.updateProperty(
-//        "servicecomb.Provider.requestWaitInPoolTimeout.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl.test",
-//        null);
-//
-//    Assert.assertEquals(30000, config.getMsRestRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(30000), config.getNanoRestRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty("servicecomb.Provider.requestWaitInPoolTimeout", 1);
-//    Assert.assertEquals(1, config.getMsRestRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(1), config.getNanoRestRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty("servicecomb.Provider.requestWaitInPoolTimeout.perfClient", 2);
-//    Assert.assertEquals(2, config.getMsRestRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(2), config.getNanoRestRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty(
-//        "servicecomb.Provider.requestWaitInPoolTimeout.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl",
-//        3);
-//    Assert.assertEquals(3, config.getMsRestRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(3), config.getNanoRestRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty(
-//        "servicecomb.Provider.requestWaitInPoolTimeout.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl.test",
-//        4);
-//    Assert.assertEquals(4, config.getMsRestRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(4), config.getNanoRestRequestWaitInPoolTimeout());
-//  }
-//
-//  private void highwayWaitInPool(OperationConfig config) {
-//    Assert.assertEquals(30000, config.getMsHighwayRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(30000), config.getNanoHighwayRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty("servicecomb.Provider.requestWaitInPoolTimeout", 1);
-//    Assert.assertEquals(1, config.getMsHighwayRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(1), config.getNanoHighwayRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty("servicecomb.Provider.requestWaitInPoolTimeout.perfClient", 2);
-//    Assert.assertEquals(2, config.getMsHighwayRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(2), config.getNanoHighwayRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty(
-//        "servicecomb.Provider.requestWaitInPoolTimeout.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl",
-//        3);
-//    Assert.assertEquals(3, config.getMsHighwayRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(3), config.getNanoHighwayRequestWaitInPoolTimeout());
-//
-//    ArchaiusUtils.setProperty(
-//        "servicecomb.Provider.requestWaitInPoolTimeout.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl.test",
-//        4);
-//    Assert.assertEquals(4, config.getMsHighwayRequestWaitInPoolTimeout());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(4), config.getNanoHighwayRequestWaitInPoolTimeout());
-//  }
-//
-//  private void consumerRequestTimeout(OperationConfig config) {
-//    Assert.assertEquals(30000, config.getMsRequestTimeout());
-//
-//    ArchaiusUtils.setProperty("servicecomb.request.perfClient.timeout", 2);
-//    Assert.assertEquals(2, config.getMsRequestTimeout());
-//    ArchaiusUtils.setProperty(
-//        "servicecomb.request.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl.timeout", 3);
-//    Assert.assertEquals(3, config.getMsRequestTimeout());
-//    ArchaiusUtils.setProperty(
-//        "servicecomb.request.perfClient.org.apache.servicecomb.core.definition.TestOperationMeta$Impl.test.timeout", 4);
-//    Assert.assertEquals(4, config.getMsRequestTimeout());
-//  }
-//
-//  private void slowInvocation(OperationConfig config) {
-//    Assert.assertFalse(config.isSlowInvocationEnabled());
-//    Assert.assertEquals(1000, config.getMsSlowInvocation());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(1000), config.getNanoSlowInvocation());
-//
-//    ArchaiusUtils.setProperty("servicecomb.Consumer.invocation.slow.enabled.perfClient", true);
-//    ArchaiusUtils.setProperty("servicecomb.Consumer.invocation.slow.msTime.perfClient", 2000);
-//    Assert.assertTrue(config.isSlowInvocationEnabled());
-//    Assert.assertEquals(2000, config.getMsSlowInvocation());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(2000), config.getNanoSlowInvocation());
-//
-//    // new configuration key, has high priority
-//    ArchaiusUtils.setProperty("servicecomb.metrics.Consumer.invocation.slow.enabled", false);
-//    ArchaiusUtils.setProperty("servicecomb.metrics.Consumer.invocation.slow.msTime", 3000);
-//    Assert.assertFalse(config.isSlowInvocationEnabled());
-//    Assert.assertEquals(3000, config.getMsSlowInvocation());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(3000), config.getNanoSlowInvocation());
-//
-//    ArchaiusUtils.setProperty("servicecomb.metrics.Consumer.invocation.slow.enabled.perfClient", true);
-//    ArchaiusUtils.setProperty("servicecomb.metrics.Consumer.invocation.slow.msTime.perfClient", 4000);
-//    Assert.assertTrue(config.isSlowInvocationEnabled());
-//    Assert.assertEquals(4000, config.getMsSlowInvocation());
-//    Assert.assertEquals(TimeUnit.MILLISECONDS.toNanos(4000), config.getNanoSlowInvocation());
-//  }
-}
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/TestSchemaMeta.java b/core/src/test/java/org/apache/servicecomb/core/definition/TestSchemaMeta.java
deleted file mode 100644
index 8e7214cdf..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/TestSchemaMeta.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.servicecomb.core.definition;
-
-public class TestSchemaMeta {
-//  interface V1 {
-//    void a();
-//  }
-//
-//  interface V2 extends V1 {
-//    void b();
-//  }
-//
-//  @Test
-//  public void testMethodNotExist(@Mocked OperationMeta operationMeta) {
-//    Swagger swagger = SwaggerGenerator.generate(V2.class);
-//    // make swagger have more operations than interface
-//    swagger.getInfo().setVendorExtension(SwaggerConst.EXT_JAVA_INTF, V1.class.getName());
-//
-//    MicroserviceMeta microserviceMeta = new MicroserviceMeta("app:ms");
-//    SchemaMeta schemaMeta = new SchemaMeta(swagger, microserviceMeta, "schemaId");
-//    Assert.assertEquals(1, schemaMeta.getOperations().size());
-//    Assert.assertNotNull(schemaMeta.findOperation("a"));
-//  }
-}
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java b/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
deleted file mode 100644
index 7538aee67..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestDynamicSchemaLoader.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * 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.servicecomb.core.definition.loader;
-
-public class TestDynamicSchemaLoader {
-//
-//  private static SchemaLoader loader = new SchemaLoader();
-//
-//  private static Microservice microservice;
-//
-//  @BeforeClass
-//  public static void init() {
-//    new UnitTestMeta();
-//
-//    SchemaListenerManager schemaListenerManager = new SchemaListenerManager();
-//    schemaListenerManager.setSchemaListenerList(Collections.emptyList());
-//
-//    CseContext context = CseContext.getInstance();
-//    context.setSchemaLoader(loader);
-//    context.setSchemaListenerManager(schemaListenerManager);
-//
-//    ServiceRegistry serviceRegistry = ServiceRegistryFactory.createLocal();
-//    serviceRegistry.init();
-//
-//    microservice = serviceRegistry.getMicroservice();
-//    RegistryUtils.setServiceRegistry(serviceRegistry);
-//  }
-//
-//  @AfterClass
-//  public static void teardown() {
-//    RegistryUtils.setServiceRegistry(null);
-//  }
-//
-//  @SuppressWarnings("deprecation")
-//  @Test
-//  public void testRegisterSchemas() {
-//    DynamicSchemaLoader.INSTANCE.registerSchemas("classpath*:test/test/schema.yaml");
-//    SchemaMeta schemaMeta = SCBEngine.getInstance().getProducerMicroserviceMeta().ensureFindSchemaMeta("schema");
-//    Assert.assertNotNull(schemaMeta);
-//  }
-//
-//  @SuppressWarnings("deprecation")
-//  @Test
-//  public void testRegisterShemasAcrossApp() {
-//    //we can not register repeat data
-//    init();
-//    //as we can not set microserviceName any more, hence we should use the default name
-//    DynamicSchemaLoader.INSTANCE
-//        .registerSchemas(RegistryUtils.getMicroservice().getServiceName(), "classpath*:test/test/schema.yaml");
-//    SchemaMeta schemaMeta =
-//        SCBEngine.getInstance().getProducerMicroserviceMeta().ensureFindSchemaMeta("schema");
-//    Assert.assertNotNull(schemaMeta);
-//  }
-//
-//  @Test
-//  public void testPutSelfBasePathIfAbsent_noUrlPrefix() {
-//    System.clearProperty(Const.URL_PREFIX);
-//    microservice.setPaths(new ArrayList<>());
-//
-//    loader.putSelfBasePathIfAbsent("perfClient", "/test");
-//
-//    Assert.assertThat(microservice.getPaths().size(), Matchers.is(1));
-//    Assert.assertThat(microservice.getPaths().get(0).getPath(), Matchers.is("/test"));
-//  }
-//
-//  @Test
-//  public void testPutSelfBasePathIfAbsent_WithUrlPrefix() {
-//    System.setProperty(Const.URL_PREFIX, "/root/rest");
-//    microservice.setPaths(new ArrayList<>());
-//
-//    loader.putSelfBasePathIfAbsent("perfClient", "/test");
-//
-//    Assert.assertThat(microservice.getPaths().size(), Matchers.is(1));
-//    Assert.assertThat(microservice.getPaths().get(0).getPath(), Matchers.is("/root/rest/test"));
-//
-//    System.clearProperty(Const.URL_PREFIX);
-//  }
-//
-//  @Test
-//  public void testPutSelfBasePathIfAbsent_WithUrlPrefix_StartWithUrlPrefix() {
-//    System.setProperty(Const.URL_PREFIX, "/root/rest");
-//    microservice.setPaths(new ArrayList<>());
-//
-//    loader.putSelfBasePathIfAbsent("perfClient", "/root/rest/test");
-//
-//    Assert.assertThat(microservice.getPaths().size(), Matchers.is(1));
-//    Assert.assertThat(microservice.getPaths().get(0).getPath(), Matchers.is("/root/rest/test"));
-//
-//    System.clearProperty(Const.URL_PREFIX);
-//  }
-}
diff --git a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java b/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java
deleted file mode 100644
index 764aa9950..000000000
--- a/core/src/test/java/org/apache/servicecomb/core/definition/loader/TestSchemaListenerManager.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * 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.servicecomb.core.definition.loader;
-
-public class TestSchemaListenerManager {
-//
-//  SchemaMeta schemaMeta = Mockito.mock(SchemaMeta.class);
-//
-//  @Before
-//  public void setUp() {
-//    Mockito.when(schemaMeta.getSchemaId()).thenReturn("test");
-//  }
-//
-//  @Test
-//  public void testInitializationListener() {
-//    SchemaListener listener = new SchemaListener() {
-//      @Override
-//      public void onSchemaLoaded(SchemaMeta... schemaMetas) {
-//        Assert.assertEquals(1, schemaMetas.length);
-//        Assert.assertEquals("test", schemaMetas[0].getSchemaId());
-//      }
-//    };
-//
-//    SchemaListenerManager mgr = new SchemaListenerManager();
-//    mgr.setSchemaListenerList(Arrays.asList(listener));
-//
-//    mgr.notifySchemaListener(schemaMeta);
-//  }
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RSAUtils.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RSAUtils.java
index 59752fa94..6922c763c 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RSAUtils.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/RSAUtils.java
@@ -16,6 +16,7 @@
  */
 package org.apache.servicecomb.foundation.common.utils;
 
+import java.nio.charset.StandardCharsets;
 import java.security.InvalidKeyException;
 import java.security.KeyFactory;
 import java.security.KeyPair;
@@ -76,10 +77,10 @@ public class RSAUtils {
    * if has performance problem ,change Signature to ThreadLocal instance 
    */
   public static String sign(String content, PrivateKey privateKey)
-      throws NoSuchAlgorithmException, InvalidKeySpecException, SignatureException, InvalidKeyException {
+      throws NoSuchAlgorithmException, SignatureException, InvalidKeyException {
     Signature signature = Signature.getInstance(SIGN_ALG);
     signature.initSign(privateKey);
-    signature.update(content.getBytes());
+    signature.update(content.getBytes(StandardCharsets.UTF_8));
     byte[] signByte = signature.sign();
     return encoder.encodeToString(signByte);
   }
@@ -106,7 +107,7 @@ public class RSAUtils {
     PublicKey pubKey = kf.generatePublic(keySpec);
     Signature signature = Signature.getInstance(SIGN_ALG);
     signature.initVerify(pubKey);
-    signature.update(content.getBytes());
+    signature.update(content.getBytes(StandardCharsets.UTF_8));
     return signature.verify(decoder.decode(sign));
   }
 }
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/archaius/sources/AbstractConfigLoader.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/archaius/sources/AbstractConfigLoader.java
index 46a9f374c..74051441c 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/archaius/sources/AbstractConfigLoader.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/archaius/sources/AbstractConfigLoader.java
@@ -98,7 +98,7 @@ public abstract class AbstractConfigLoader {
     return urlList;
   }
 
-  private class ConfigModelWrapper {
+  private static class ConfigModelWrapper {
     ConfigModel model;
 
     int addOrder;
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/parser/YamlParser.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/parser/YamlParser.java
index 4ce566525..fd572eaab 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/parser/YamlParser.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/parser/YamlParser.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.config.parser;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.Properties;
 
@@ -27,7 +28,7 @@ public class YamlParser implements Parser {
   @Override
   public Map<String, Object> parse(String content, String prefix, boolean addPrefix) {
     YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
-    yamlFactory.setResources(new ByteArrayResource(content.getBytes()));
+    yamlFactory.setResources(new ByteArrayResource(content.getBytes(StandardCharsets.UTF_8)));
     Properties properties = yamlFactory.getObject();
     return Parser.propertiesToMap(properties, prefix, addPrefix);
   }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/ArgumentsWrapperMessageSchema.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/ArgumentsWrapperMessageSchema.java
deleted file mode 100644
index f2222ca77..000000000
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/ArgumentsWrapperMessageSchema.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.servicecomb.foundation.protobuf.internal.schema;
-
-public class ArgumentsWrapperMessageSchema {
-//  private FieldSchema<Object>[] fields;
-//
-//  public ArgumentsWrapperMessageSchema(ProtoMapper protoMapper, Message message, JavaType javaType) {
-//    super(protoMapper, message, javaType);
-//  }
-//
-//  @Override
-//  public void initSerializer(SchemaCreateContext context) {
-//    super.initSerializer(context);
-//
-//    List<Field<Object>> list = getFields();
-//    this.fields = list.toArray(new FieldSchema[list.size()]);
-//  }
-//
-//  @Override
-//  public void writeTo(OutputEx output, Object message) throws IOException {
-//    Object[] arguments = (Object[]) message;
-//    int fieldCount = fields.length;
-//    if (fieldCount > arguments.length) {
-//      fieldCount = arguments.length;
-//    }
-//    for (int fieldIdx = 0; fieldIdx < fieldCount; fieldIdx++) {
-//      FieldSchema field = fields[fieldIdx];
-//      Object value = arguments[fieldIdx];
-//
-//      field.writeTo(output, value);
-//    }
-//  }
-}
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleFixedParser.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleFixedParser.java
index 80eecbbf3..38fa3809b 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleFixedParser.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleFixedParser.java
@@ -22,7 +22,7 @@ import org.apache.servicecomb.foundation.common.Version;
 // fixed, this should be the last parser
 // will not check version format
 public class VersionRuleFixedParser implements VersionRuleParser {
-  class FixedVersionRule extends VersionRule {
+  static class FixedVersionRule extends VersionRule {
     private final Version version;
 
     public FixedVersionRule(String versionRule, Version version) {
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleRangeParser.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleRangeParser.java
index 0fcb889c6..182cb4c36 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleRangeParser.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleRangeParser.java
@@ -21,7 +21,7 @@ import org.apache.servicecomb.foundation.common.Version;
 
 // 1.0.0-2.0.0
 public class VersionRuleRangeParser implements VersionRuleParser {
-  class RangeVersionRule extends VersionRule {
+  static class RangeVersionRule extends VersionRule {
     private final Version from;
 
     private final Version to;
diff --git a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleStartFromParser.java b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleStartFromParser.java
index 6d1bdd698..d657e701e 100644
--- a/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleStartFromParser.java
+++ b/foundations/foundation-registry/src/main/java/org/apache/servicecomb/registry/version/VersionRuleStartFromParser.java
@@ -21,7 +21,7 @@ import org.apache.servicecomb.foundation.common.Version;
 
 // 1.0.0+
 public class VersionRuleStartFromParser implements VersionRuleParser {
-  class StartFromVersionRule extends VersionRule {
+  static class StartFromVersionRule extends VersionRule {
     private final Version from;
 
     public StartFromVersionRule(String versionRule, Version from) {
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
index b1bed54ae..50486183c 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
@@ -60,7 +60,7 @@ public class CircuitBreakerHandler extends AbstractGovernanceHandler<CircuitBrea
   }
 
   private CircuitBreaker getCircuitBreaker(CircuitBreakerPolicy policy) {
-    LOGGER.info("applying new policy: {}", policy.toString());
+    LOGGER.info("applying new policy: {}", policy);
 
     CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
         .failureRateThreshold(policy.getFailureRateThreshold())
@@ -70,7 +70,7 @@ public class CircuitBreakerHandler extends AbstractGovernanceHandler<CircuitBrea
         .permittedNumberOfCallsInHalfOpenState(policy.getPermittedNumberOfCallsInHalfOpenState())
         .minimumNumberOfCalls(policy.getMinimumNumberOfCalls())
         .slidingWindowType(policy.getSlidingWindowTypeEnum())
-        .slidingWindowSize(Integer.valueOf(policy.getSlidingWindowSize()))
+        .slidingWindowSize(Integer.parseInt(policy.getSlidingWindowSize()))
         .build();
     CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
     if (meterRegistry != null) {
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/policy/AbstractPolicy.java b/governance/src/main/java/org/apache/servicecomb/governance/policy/AbstractPolicy.java
index 5ccf4f3a3..5fe427d80 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/policy/AbstractPolicy.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/policy/AbstractPolicy.java
@@ -34,10 +34,10 @@ public abstract class AbstractPolicy extends Configurable {
       return defaultValue;
     }
     if (time.matches(GovernanceUtils.DIGIT_REGEX)) {
-      if (Long.valueOf(time) < 0) {
+      if (Long.parseLong(time) < 0) {
         throw new RuntimeException("The value of time should not be less than 0.");
       }
-      return Duration.ofMillis(Long.valueOf(time));
+      return Duration.ofMillis(Long.parseLong(time));
     }
     return Duration.parse(GovernanceUtils.DIGIT_PREFIX + time);
   }
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/policy/CircuitBreakerPolicy.java b/governance/src/main/java/org/apache/servicecomb/governance/policy/CircuitBreakerPolicy.java
index fd605d37b..20a4906d7 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/policy/CircuitBreakerPolicy.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/policy/CircuitBreakerPolicy.java
@@ -164,7 +164,7 @@ public class CircuitBreakerPolicy extends AbstractPolicy {
       return DEFAULT_SLIDING_WINDOW_SIZE;
     }
     if (slidingWindowSize.matches(GovernanceUtils.DIGIT_REGEX)) {
-      if (Long.valueOf(slidingWindowSize) < 0) {
+      if (Long.parseLong(slidingWindowSize) < 0) {
         throw new RuntimeException("The value should be more than 0.");
       }
       return slidingWindowSize;
diff --git a/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/RSAAuthenticationToken.java b/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/RSAAuthenticationToken.java
index 0a7385e11..01db32f9a 100644
--- a/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/RSAAuthenticationToken.java
+++ b/handlers/handler-publickey-auth/src/main/java/org/apache/servicecomb/authentication/RSAAuthenticationToken.java
@@ -85,7 +85,7 @@ public class RSAAuthenticationToken {
       return null;
     }
     return new RSAAuthenticationToken(tokenArr[0], tokenArr[1],
-        Long.valueOf(tokenArr[2]), tokenArr[3], tokenArr[4]);
+        Long.parseLong(tokenArr[2]), tokenArr[3], tokenArr[4]);
   }
 
   public String getServiceId() {
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java
index 3dc5ac8cb..636ef4d9f 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/AbstractInvocationMeter.java
@@ -28,10 +28,8 @@ import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer;
 import com.netflix.config.DynamicPropertyFactory;
 import com.netflix.spectator.api.Id;
 import com.netflix.spectator.api.Measurement;
-import com.netflix.spectator.api.Registry;
 
 public abstract class AbstractInvocationMeter extends AbstractPeriodMeter {
-  private final Registry registry;
 
   //total time
   private final SimpleTimer totalTimer;
@@ -48,10 +46,7 @@ public abstract class AbstractInvocationMeter extends AbstractPeriodMeter {
   // latency distribution
   private final LatencyDistributionMeter latencyDistributionMeter;
 
-  private long lastUpdated;
-
-  public AbstractInvocationMeter(Registry registry, Id id) {
-    this.registry = registry;
+  public AbstractInvocationMeter(Id id) {
     this.id = id;
     latencyDistributionMeter = createLatencyDistribution(MeterInvocationConst.TAG_LATENCY_DISTRIBUTION);
     totalTimer = createStageTimer(MeterInvocationConst.STAGE_TOTAL);
@@ -81,8 +76,6 @@ public abstract class AbstractInvocationMeter extends AbstractPeriodMeter {
   }
 
   public void onInvocationFinish(InvocationFinishEvent event) {
-    lastUpdated = registry.clock().wallTime();
-
     InvocationStageTrace stageTrace = event.getInvocation().getInvocationStageTrace();
     latencyDistributionMeter.record((long) stageTrace.calcTotalTime());
     totalTimer.record((long) stageTrace.calcTotalTime());
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java
index dc0c3331a..181276a21 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeter.java
@@ -24,7 +24,6 @@ import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer;
 
 import com.netflix.spectator.api.Id;
 import com.netflix.spectator.api.Measurement;
-import com.netflix.spectator.api.Registry;
 
 public class ConsumerInvocationMeter extends AbstractInvocationMeter {
   private final SimpleTimer clientFiltersRequestTimer;
@@ -41,8 +40,8 @@ public class ConsumerInvocationMeter extends AbstractInvocationMeter {
 
   private final SimpleTimer clientFiltersResponseTimer;
 
-  public ConsumerInvocationMeter(Registry registry, Id id) {
-    super(registry, id);
+  public ConsumerInvocationMeter(Id id) {
+    super(id);
     clientFiltersRequestTimer = createStageTimer(MeterInvocationConst.STAGE_CLIENT_FILTERS_REQUEST);
     consumerSendRequestTimer = createStageTimer(MeterInvocationConst.STAGE_CONSUMER_SEND_REQUEST);
     consumerGetConnectionTimer = createStageTimer(MeterInvocationConst.STAGE_CONSUMER_GET_CONNECTION);
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java
index 5543c9f54..a0ead928f 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ConsumerInvocationMeters.java
@@ -26,6 +26,6 @@ public class ConsumerInvocationMeters extends AbstractInvocationMeters {
 
   @Override
   protected AbstractInvocationMeter createMeter(Id id) {
-    return new ConsumerInvocationMeter(registry, id);
+    return new ConsumerInvocationMeter(id);
   }
 }
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java
index 678c14953..5b1b55ff0 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeter.java
@@ -25,7 +25,6 @@ import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer;
 
 import com.netflix.spectator.api.Id;
 import com.netflix.spectator.api.Measurement;
-import com.netflix.spectator.api.Registry;
 
 public class EdgeInvocationMeter extends ConsumerInvocationMeter {
   private final SimpleTimer executorQueueTimer;
@@ -36,8 +35,8 @@ public class EdgeInvocationMeter extends ConsumerInvocationMeter {
 
   private final SimpleTimer sendResponseTimer;
 
-  public EdgeInvocationMeter(Registry registry, Id id) {
-    super(registry, id);
+  public EdgeInvocationMeter(Id id) {
+    super(id);
     executorQueueTimer = createStageTimer(MeterInvocationConst.STAGE_EXECUTOR_QUEUE);
     serverFiltersRequestTimer = createStageTimer(MeterInvocationConst.STAGE_SERVER_FILTERS_REQUEST);
     serverFiltersResponseTimer = createStageTimer(MeterInvocationConst.STAGE_SERVER_FILTERS_RESPONSE);
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java
index b7db74c27..987d6f3e0 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/EdgeInvocationMeters.java
@@ -27,6 +27,6 @@ public class EdgeInvocationMeters extends ConsumerInvocationMeters {
 
   @Override
   protected AbstractInvocationMeter createMeter(Id id) {
-    return new EdgeInvocationMeter(registry, id);
+    return new EdgeInvocationMeter(id);
   }
 }
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java
index 96a1171e7..da705fa95 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeter.java
@@ -24,7 +24,6 @@ import org.apache.servicecomb.foundation.metrics.meter.SimpleTimer;
 
 import com.netflix.spectator.api.Id;
 import com.netflix.spectator.api.Measurement;
-import com.netflix.spectator.api.Registry;
 
 public class ProducerInvocationMeter extends AbstractInvocationMeter {
   private final SimpleTimer executorQueueTimer;
@@ -37,8 +36,8 @@ public class ProducerInvocationMeter extends AbstractInvocationMeter {
 
   private final SimpleTimer sendResponseTimer;
 
-  public ProducerInvocationMeter(Registry registry, Id id) {
-    super(registry, id);
+  public ProducerInvocationMeter(Id id) {
+    super(id);
 
     executorQueueTimer = createStageTimer(MeterInvocationConst.STAGE_EXECUTOR_QUEUE);
     executionTimer = createStageTimer(MeterInvocationConst.STAGE_EXECUTION);
diff --git a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java
index f8e88148a..3a9920b86 100644
--- a/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java
+++ b/metrics/metrics-core/src/main/java/org/apache/servicecomb/metrics/core/meter/invocation/ProducerInvocationMeters.java
@@ -26,6 +26,6 @@ public class ProducerInvocationMeters extends AbstractInvocationMeters {
 
   @Override
   protected AbstractInvocationMeter createMeter(Id id) {
-    return new ProducerInvocationMeter(registry, id);
+    return new ProducerInvocationMeter(id);
   }
 }
diff --git a/pom.xml b/pom.xml
index 39a4faeab..1997c5abc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -45,6 +45,7 @@
     <test.additional.args/>
     <!-- plugin version start -->
     <dependency-check-maven.version>7.0.4</dependency-check-maven.version>
+    <spotbug-maven.version>4.6.0.0</spotbug-maven.version>
     <surefire-maven.version>3.0.0-M6</surefire-maven.version>
     <!-- plugin version end -->
   </properties>
@@ -295,6 +296,23 @@
           </archive>
         </configuration>
       </plugin>
+      <plugin>
+        <groupId>com.github.spotbugs</groupId>
+        <artifactId>spotbugs-maven-plugin</artifactId>
+        <configuration>
+          <xmlOutput>true</xmlOutput>
+          <failOnError>true</failOnError>
+          <threshold>Medium</threshold>
+          <excludeFilterFile>ci/spotbugs/exclude.xml</excludeFilterFile>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
     <pluginManagement>
       <plugins>
@@ -448,6 +466,11 @@
             </execution>
           </executions>
         </plugin>
+        <plugin>
+          <groupId>com.github.spotbugs</groupId>
+          <artifactId>spotbugs-maven-plugin</artifactId>
+          <version>${spotbug-maven.version}</version>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>
diff --git a/scripts/build.sh b/scripts/build.sh
index 15cb3aa8e..d5949f1cc 100644
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -26,7 +26,7 @@ if [ "$1" == "install" ]; then
         exit 1
     fi
 
-    mvn clean install -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B -Pdocker -Pdemo-run-release -Pjacoco -Pit -Pcoverage
+    mvn clean install -Dspotbugs.skip=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B -Pdocker -Pdemo-run-release -Pjacoco -Pit -Pcoverage
     if [ $? == 0 ]; then
         echo "${green}Installation Success..${reset}"
     else
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java
index ab5d805d0..fff2346df 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java
@@ -144,7 +144,7 @@ public class ClassificationAddress {
   private Map<String, List<String>> generateZoneAndRegionAddress(String key) {
     InstanceCache KieCaches = instanceCacheManager
         .getOrCreate(REGISTRY_APP_ID, key, DefinitionConst.VERSION_RULE_LATEST);
-    List<CacheEndpoint> CacheEndpoints = new ArrayList<>();
+    List<CacheEndpoint> CacheEndpoints;
     if (REGISTRY_SERVICE_NAME.equals(key)) {
       CacheEndpoints = KieCaches.getOrCreateTransportMap().get(defaultTransport);
       maxRetryTimes = CacheEndpoints.size();
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
index b1f4d5c8f..fe82fd9c9 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
@@ -207,16 +207,11 @@ public abstract class AbstractSwaggerGenerator implements SwaggerGenerator {
       return;
     }
 
-    if (cls.isInterface()) {// && !isInterfaceReactive(cls)) {
+    if (cls.isInterface()) {
       info.setVendorExtension(SwaggerConst.EXT_JAVA_INTF, cls.getName());
       return;
     }
 
-//    if (cls.getInterfaces().length > 0) {
-//      info.setVendorExtension(SwaggerConst.EXT_JAVA_INTF, cls.getInterfaces()[0].getName());
-//      return;
-//    }
-
     if (StringUtils.isEmpty(swaggerGeneratorFeature.getPackageName())) {
       return;
     }
@@ -225,23 +220,6 @@ public abstract class AbstractSwaggerGenerator implements SwaggerGenerator {
     info.setVendorExtension(SwaggerConst.EXT_JAVA_INTF, intfName);
   }
 
-//  /**
-//   * to avoid old invocation bug.
-//   * @param interfaceCls
-//   * @return
-//   */
-//  private boolean isInterfaceReactive(Class<?> interfaceCls) {
-//    for (Method method : interfaceCls.getDeclaredMethods()) {
-//      if (isSkipMethod(method)) {
-//        continue;
-//      }
-//      if (CompletableFuture.class.isAssignableFrom(method.getReturnType())) {
-//        return true;
-//      }
-//    }
-//    return false;
-//  }
-
   @Override
   public void replaceMethodWhiteList(String... methodNames) {
     methodWhiteList.clear();
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerBeanParamMapper.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerBeanParamMapper.java
index d374a320c..ae5468ce5 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerBeanParamMapper.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerBeanParamMapper.java
@@ -35,7 +35,7 @@ import org.apache.servicecomb.swagger.invocation.SwaggerInvocation;
  * </pre>
  */
 public final class ConsumerBeanParamMapper extends ConsumerArgumentMapper {
-  private class FieldMeta {
+  private static class FieldMeta {
     String swaggerArgumentName;
 
     Getter<Object, Object> getter;
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerBeanParamMapper.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerBeanParamMapper.java
index 3131d5eca..66075af17 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerBeanParamMapper.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerBeanParamMapper.java
@@ -25,7 +25,7 @@ import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.swagger.invocation.SwaggerInvocation;
 
 public class ProducerBeanParamMapper extends ProducerArgumentMapper {
-  private class FieldMeta {
+  private static class FieldMeta {
     String swaggerParameterName;
 
     Setter<Object, Object> setter;
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/codec/ArgWrapperJavaType.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/codec/ArgWrapperJavaType.java
index 2eafd06b9..d61353d83 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/codec/ArgWrapperJavaType.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/codec/ArgWrapperJavaType.java
@@ -37,7 +37,7 @@ import io.swagger.util.Json;
 public class ArgWrapperJavaType extends SimpleType {
   private static final long serialVersionUID = 964882360361204479L;
 
-  class ArgInfo {
+  static class ArgInfo {
     JavaType javaType;
 
     JsonDeserializer<Object> deserializer;
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClientConnection.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClientConnection.java
index 27200fde6..40524fb98 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClientConnection.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayClientConnection.java
@@ -58,7 +58,7 @@ public class HighwayClientConnection extends TcpClientConnection {
   @Override
   protected boolean onLoginResponse(Buffer bodyBuffer) {
     try {
-      LoginResponse response = LoginResponse.readObject(bodyBuffer);
+      LoginResponse.readObject(bodyBuffer);
       return true;
     } catch (Throwable e) {
       LOGGER.error("decode login response failed.", e);
diff --git a/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletUtils.java b/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletUtils.java
index e134ca5b9..29cf057da 100644
--- a/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletUtils.java
+++ b/transports/transport-rest/transport-rest-servlet/src/main/java/org/apache/servicecomb/transport/rest/servlet/ServletUtils.java
@@ -69,7 +69,7 @@ public class ServletUtils {
     }
 
     int idx = urlPattern.indexOf("/*");
-    if (idx < 0 || (idx >= 0 && idx != urlPattern.length() - 2)) {
+    if (idx < 0 || idx != urlPattern.length() - 2) {
       throw new ServiceCombException("only support rule like /* or /path/* or /path1/path2/* and so on.");
     }
   }