Merge branch 'develop' into service-test

# Conflicts:
#	dubbo-admin-backend/pom.xml
#	dubbo-admin-frontend/src/components/test/ServiceTest.vue
diff --git a/README.md b/README.md
index b0bd681..db5a673 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,7 @@
 * visit web page
   visit `http://localhost:8081`, frontend supports hot reload.
  * CORS problem
-    for the convenience of development, we deploy frontend and backend separately, so the frontend supports hot reload. In this mode, frontend will request `localhost:8080` to fetch data, this will cause a CORS problem, so we add a configuration in `dubbo-admin-frontend/config/index.js` to support CORS. this config will activated under `npm run dev` mode.
+    for the convenience of development, we deploy frontend and backend separately, so the frontend supports hot reload. In this mode, frontend will request `localhost:8080` to fetch data, this will cause a CORS problem, so we add a configuration in `dubbo-admin-frontend/config/index.js` to support CORS. This config will be activated under `npm run dev` mode.
 
 ### Swagger support
 
diff --git a/dubbo-admin-backend/pom.xml b/dubbo-admin-backend/pom.xml
index c9c1a65..671f865 100644
--- a/dubbo-admin-backend/pom.xml
+++ b/dubbo-admin-backend/pom.xml
@@ -72,11 +72,6 @@
             <artifactId>dubbo</artifactId>
         </dependency>
 
-        <!--<dependency>-->
-            <!--<groupId>org.apache.dubbo</groupId>-->
-            <!--<artifactId>dubbo-metadata-report-api</artifactId>-->
-        <!--</dependency>-->
-
         <dependency>
             <groupId>org.apache.curator</groupId>
             <artifactId>curator-framework</artifactId>
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index 31af96f..0aa0442 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -103,7 +103,7 @@
     Registry getRegistry() {
         Registry registry = null;
         if (registryUrl == null) {
-            if (StringUtils.isNotEmpty(registryAddress)) {
+            if (StringUtils.isBlank(registryAddress)) {
                 throw new ConfigurationException("Either configcenter or registry address is needed");
             }
             registryUrl = formUrl(registryAddress, group);
@@ -129,11 +129,7 @@
     }
 
     private URL formUrl(String config, String group) {
-        String protocol = config.split("://")[0];
-        String address = config.split("://")[1];
-        String port = address.split(":")[1];
-        String host = address.split(":")[0];
-        URL url = new URL(protocol, host, Integer.parseInt(port));
+        URL url = URL.valueOf(config);
         if (StringUtils.isNotEmpty(group)) {
             url.addParameter(org.apache.dubbo.common.Constants.GROUP_KEY, group);
         }
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/handler/CustomExceptionHandler.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/handler/CustomExceptionHandler.java
index bbba539..191250d 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/handler/CustomExceptionHandler.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/handler/CustomExceptionHandler.java
@@ -24,6 +24,7 @@
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.ServletRequestBindingException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -66,7 +67,8 @@
 
     @ResponseBody
     @ResponseStatus(HttpStatus.BAD_REQUEST)
-    @ExceptionHandler(value = {ParamValidationException.class})
+    @ExceptionHandler(value = {ParamValidationException.class,
+            ServletRequestBindingException.class})
     public CommonResponse paramValidationExceptionHandle(Exception e) {
         CommonResponse commonResponse = CommonResponse.createCommonResponse();
         logger.error("[ParamValidationException]Exception:", e);
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
index f888113..b7e7def 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
@@ -339,14 +339,14 @@
                 String[] array = condition.split("=>", 2);
                 String consumer = array[0].trim();
                 String provider = array[1].trim();
-                if (consumer != "") {
+                if (consumer.length() != 0) {
                     if (when.length() != 0) {
                         when.append(" & ").append(consumer);
                     } else {
                         when.append(consumer);
                     }
                 }
-                if (provider != "") {
+                if (provider.length() != 0) {
                     if (then.length() != 0) {
                         then.append(" & ").append(provider);
                     } else {
diff --git a/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue b/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue
index 433ba02..f21b34e 100644
--- a/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue
+++ b/dubbo-admin-frontend/src/components/governance/WeightAdjust.vue
@@ -260,6 +260,7 @@
         this.readonly = false
       },
       openDialog: function () {
+        this.updateId = ''
         this.dialog = true
       },
       openWarn: function (title, text) {
diff --git a/dubbo-admin-frontend/src/components/metrics/ServiceMetrics.vue b/dubbo-admin-frontend/src/components/metrics/ServiceMetrics.vue
new file mode 100644
index 0000000..373d1cf
--- /dev/null
+++ b/dubbo-admin-frontend/src/components/metrics/ServiceMetrics.vue
@@ -0,0 +1,40 @@
+<!--
+  - 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.
+  -->
+
+<template>
+  <v-container grid-list-xl fluid>
+    <v-layout row wrap>
+      <v-flex lg12>
+        <v-card>
+          <v-card-title>
+            <h1>Service Metrics will release in the future</h1>
+          </v-card-title>
+        </v-card>
+      </v-flex>
+    </v-layout>
+  </v-container>
+</template>
+
+<script>
+  export default {
+    name: 'ServiceMetrics'
+  }
+</script>
+
+<style scoped>
+
+</style>
diff --git a/dubbo-admin-frontend/src/components/public/Toolbar.vue b/dubbo-admin-frontend/src/components/public/Toolbar.vue
index dba8907..b32c37a 100644
--- a/dubbo-admin-frontend/src/components/public/Toolbar.vue
+++ b/dubbo-admin-frontend/src/components/public/Toolbar.vue
@@ -34,13 +34,13 @@
     </v-text-field>
 
     <v-spacer></v-spacer>
-    <v-btn icon>
+    <v-btn icon v-if="false">
       <v-icon>settings</v-icon>
     </v-btn>
     <v-btn icon @click="handleFullScreen()">
       <v-icon>fullscreen</v-icon>
     </v-btn>
-    <v-menu offset-y origin="center center" class="elelvation-1" :nudge-bottom="14" transition="scale-transition">
+    <v-menu offset-y origin="center center" class="elelvation-1" :nudge-bottom="14" transition="scale-transition" v-if="false">
       <v-btn icon flat slot="activator">
         <v-badge color="red" overlap>
           <span slot="badge">3</span>
@@ -49,7 +49,7 @@
       </v-btn>
       <!--<notification-list></notification-list>-->
     </v-menu>
-    <v-menu offset-y origin="center center" :nudge-bottom="10" transition="scale-transition">
+    <v-menu offset-y origin="center center" :nudge-bottom="10" transition="scale-transition" v-if="false">
       <v-btn icon large flat slot="activator">
         <v-avatar size="30px">
           <img src="@/assets/avatar.png" alt="Logined User" />
diff --git a/dubbo-admin-frontend/src/components/test/ServiceMock.vue b/dubbo-admin-frontend/src/components/test/ServiceMock.vue
new file mode 100644
index 0000000..7fd9a76
--- /dev/null
+++ b/dubbo-admin-frontend/src/components/test/ServiceMock.vue
@@ -0,0 +1,40 @@
+<!--
+  - 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.
+  -->
+
+<template>
+  <v-container grid-list-xl fluid>
+    <v-layout row wrap>
+      <v-flex lg12>
+        <v-card>
+          <v-card-title>
+            <h1>Service Mock will release in the future</h1>
+          </v-card-title>
+        </v-card>
+      </v-flex>
+    </v-layout>
+  </v-container>
+</template>
+
+<script>
+  export default {
+    name: 'ServiceMock'
+  }
+</script>
+
+<style scoped>
+
+</style>
diff --git a/dubbo-admin-frontend/src/router/index.js b/dubbo-admin-frontend/src/router/index.js
index d2896b5..98507b8 100644
--- a/dubbo-admin-frontend/src/router/index.js
+++ b/dubbo-admin-frontend/src/router/index.js
@@ -27,6 +27,9 @@
 import LoadBalance from '@/components/governance/LoadBalance'
 import WeightAdjust from '@/components/governance/WeightAdjust'
 import Overrides from '@/components/governance/Overrides'
+import ServiceTest from '@/components/test/ServiceTest'
+import ServiceMock from '@/components/test/ServiceMock'
+import ServiceMetrics from '@/components/metrics/ServiceMetrics'
 
 Vue.use(Router)
 
@@ -72,8 +75,7 @@
       name: 'LoadBalance',
       component: LoadBalance
     },
-    {
-      path: '/governance/weight',
+    { path: '/governance/weight',
       name: 'WeightAdjust',
       component: WeightAdjust
     },
@@ -81,6 +83,22 @@
       path: '/governance/config',
       name: 'Overrides',
       component: Overrides
+    },
+    {
+      path: '/test',
+      name: 'ServiceTest',
+      component: ServiceTest
+    },
+    {
+      path: '/mock',
+      name: 'ServiceMock',
+      component: ServiceMock
+    },
+    {
+      path: '/metrics',
+      name: 'ServiceMetrics',
+      component: ServiceMetrics
     }
+
   ]
 })
diff --git a/pom.xml b/pom.xml
index abee9bd..ee4d1b0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -93,12 +93,6 @@
 
 			<dependency>
 				<groupId>org.apache.dubbo</groupId>
-				<artifactId>dubbo-metadata-report-api</artifactId>
-                <version>${dubbo-version}</version>
-			</dependency>
-
-			<dependency>
-				<groupId>org.apache.dubbo</groupId>
 				<artifactId>dubbo</artifactId>
 				<version>${dubbo-version}</version>
 			</dependency>