Fix application scope condition route (#764)

* fix docker file java_opts

* fix application scope condition route

* fix ci
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
index 00e7e7d..4edaaf5 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/AccessesController.java
@@ -23,7 +23,7 @@
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.model.dto.AccessDTO;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
-import org.apache.dubbo.admin.service.ProviderService;
+import org.apache.dubbo.admin.service.ConsumerService;
 import org.apache.dubbo.admin.service.RouteService;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
@@ -50,12 +50,12 @@
     private static final Logger logger = LoggerFactory.getLogger(AccessesController.class);
 
     private final RouteService routeService;
-    private final ProviderService providerService;
+    private final ConsumerService consumerService;
 
     @Autowired
-    public AccessesController(RouteService routeService, ProviderService providerService) {
+    public AccessesController(RouteService routeService, ConsumerService consumerService) {
         this.routeService = routeService;
-        this.providerService = providerService;
+        this.consumerService = consumerService;
     }
 
     @RequestMapping(method = RequestMethod.GET)
@@ -99,7 +99,7 @@
             throw new ParamValidationException("Either Service or application is required.");
         }
         String application = accessDTO.getApplication();
-        if (StringUtils.isNotEmpty(application) && "2.6".equals(providerService.findVersionInApplication(application))) {
+        if (StringUtils.isNotEmpty(application) && "2.6".equals(consumerService.findVersionInApplication(application))) {
             throw new VersionValidationException("dubbo 2.6 does not support application scope blackwhite list config");
         }
         if (accessDTO.getBlacklist() == null && accessDTO.getWhitelist() == null) {
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
index 6a7a63b..9bfc5c1 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/controller/ConditionRoutesController.java
@@ -27,7 +27,7 @@
 import org.apache.dubbo.admin.common.util.ConvertUtil;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.model.dto.ConditionRouteResultDTO;
-import org.apache.dubbo.admin.service.ProviderService;
+import org.apache.dubbo.admin.service.ConsumerService;
 import org.apache.dubbo.admin.service.RouteService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -47,12 +47,12 @@
 public class ConditionRoutesController {
 
     private final RouteService routeService;
-    private final ProviderService providerService;
+    private final ConsumerService consumerService;
 
     @Autowired
-    public ConditionRoutesController(RouteService routeService, ProviderService providerService) {
+    public ConditionRoutesController(RouteService routeService, ConsumerService consumerService) {
         this.routeService = routeService;
-        this.providerService = providerService;
+        this.consumerService = consumerService;
     }
 
     @RequestMapping(method = RequestMethod.POST)
@@ -65,7 +65,7 @@
         if (StringUtils.isEmpty(serviceName) && StringUtils.isEmpty(app)) {
             throw new ParamValidationException("serviceName and app is Empty!");
         }
-        if (StringUtils.isNotEmpty(app) && providerService.findVersionInApplication(app).equals("2.6")) {
+        if (StringUtils.isNotEmpty(app) && consumerService.findVersionInApplication(app).equals("2.6")) {
             throw new VersionValidationException("dubbo 2.6 does not support application scope routing rule");
         }
         routeService.createConditionRoute(routeDTO, serviceVersion, serviceGroup);
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/ConsumerService.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/ConsumerService.java
index 6f03cc8..809bfe1 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/ConsumerService.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/ConsumerService.java
@@ -38,4 +38,11 @@
      * query for all consumer addresses
      */
     List<Consumer> findByAddress(String consumerAddress);
+
+    /**
+     * query consumer application version.
+     * @param application application name.
+     * @return version.
+     */
+    String findVersionInApplication(String application);
 }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java
index aae0ced..4a803ed 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ConsumerServiceImpl.java
@@ -16,11 +16,13 @@
  */
 package org.apache.dubbo.admin.service.impl;
 
+import org.apache.dubbo.admin.common.exception.ParamValidationException;
 import org.apache.dubbo.admin.common.util.Constants;
 import org.apache.dubbo.admin.common.util.SyncUtils;
 import org.apache.dubbo.admin.model.domain.Consumer;
 import org.apache.dubbo.admin.service.ConsumerService;
 import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.metadata.report.identifier.MetadataIdentifier;
 import org.springframework.stereotype.Component;
 
@@ -78,4 +80,18 @@
         return SyncUtils.filterFromCategory(getRegistryCache(), filter);
     }
 
+    @Override
+    public String findVersionInApplication(String application) {
+        Map<String, String> filter = new HashMap<>();
+        filter.put(Constants.CATEGORY_KEY, Constants.CONSUMERS_CATEGORY);
+        filter.put(Constants.APPLICATION_KEY, application);
+        Map<String, URL> stringURLMap = SyncUtils.filterFromCategory(getRegistryCache(), filter);
+        if (stringURLMap == null || stringURLMap.isEmpty()) {
+            throw new ParamValidationException("there is no consumer for application: " + application);
+        }
+        String defaultVersion = "2.6";
+        URL url = stringURLMap.values().iterator().next();
+        String version = url.getParameter(Constants.SPECIFICATION_VERSION_KEY);
+        return StringUtils.isBlank(version) ? defaultVersion : version;
+    }
 }
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
index aaf6c73..979ea81 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/AccessesControllerTest.java
@@ -21,9 +21,8 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
 import org.apache.dubbo.admin.model.dto.AccessDTO;
-import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.model.dto.ConditionRouteResultDTO;
-import org.apache.dubbo.admin.service.ProviderService;
+import org.apache.dubbo.admin.service.ConsumerService;
 import org.apache.dubbo.admin.service.RouteService;
 import org.junit.After;
 import org.junit.Test;
@@ -50,7 +49,7 @@
     @MockBean
     private RouteService routeService;
     @MockBean
-    private ProviderService providerService;
+    private ConsumerService consumerService;
     @Autowired
     private ObjectMapper objectMapper;
 
@@ -111,10 +110,10 @@
         restTemplate.postForLocation(url("/api/{env}/rules/access"), accessDTO, env);
         // when application is present & dubbo's version is 2.6
         accessDTO.setApplication(application);
-        when(providerService.findVersionInApplication(application)).thenReturn("2.6");
+        when(consumerService.findVersionInApplication(application)).thenReturn("2.6");
         restTemplate.postForLocation(url("/api/{env}/rules/access"), accessDTO, env);
         // dubbo's version is 2.7
-        when(providerService.findVersionInApplication(application)).thenReturn("2.7");
+        when(consumerService.findVersionInApplication(application)).thenReturn("2.7");
         restTemplate.postForLocation(url("/api/{env}/rules/access"), accessDTO, env);
         // black white list is not null
         accessDTO.setBlacklist(new HashSet<>());
diff --git a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
index 0a7b284..5cff7bb 100644
--- a/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
+++ b/dubbo-admin-server/src/test/java/org/apache/dubbo/admin/controller/ConditionRoutesControllerTest.java
@@ -21,7 +21,7 @@
 import org.apache.dubbo.admin.common.util.YamlParser;
 import org.apache.dubbo.admin.model.dto.ConditionRouteDTO;
 import org.apache.dubbo.admin.model.store.RoutingRule;
-import org.apache.dubbo.admin.service.ProviderService;
+import org.apache.dubbo.admin.service.ConsumerService;
 import org.junit.After;
 import org.junit.Test;
 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -52,7 +52,7 @@
   private final String env = "whatever";
 
   @MockBean
-  private ProviderService providerService;
+  private ConsumerService consumerService;
 
   @After
   public void tearDown() throws Exception {
@@ -73,7 +73,7 @@
     assertThat(responseEntity.getBody(), containsString("serviceName and app is Empty!"));
 
     dto.setApplication("application" + uuid);
-    when(providerService.findVersionInApplication(dto.getApplication())).thenReturn("2.6");
+    when(consumerService.findVersionInApplication(dto.getApplication())).thenReturn("2.6");
     responseEntity = restTemplate.postForEntity(
         url("/api/{env}/rules/route/condition"), dto, String.class, env
     );
@@ -100,7 +100,7 @@
     assertThat(responseEntity.getStatusCode(), is(HttpStatus.CREATED));
 
     dto.setApplication(application);
-    when(providerService.findVersionInApplication(dto.getApplication())).thenReturn("2.7");
+    when(consumerService.findVersionInApplication(dto.getApplication())).thenReturn("2.7");
 
     responseEntity = restTemplate.postForEntity(
         url("/api/{env}/rules/route/condition"), dto, String.class, env