You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2018/08/23 16:25:04 UTC

[geode] branch develop updated: GEODE-5619: Change scanning for XSDRootElement to consider all packag… (#2361)

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

jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 966852d  GEODE-5619: Change scanning for XSDRootElement to consider all packag… (#2361)
966852d is described below

commit 966852dd0f7e8f0d097c0776adcdaca9c4fa891c
Author: Jens Deppe <jd...@pivotal.io>
AuthorDate: Thu Aug 23 09:24:57 2018 -0700

    GEODE-5619: Change scanning for XSDRootElement to consider all packag… (#2361)
---
 .../InternalConfigurationPersistenceService.java        |  2 +-
 .../internal/cli/util/ClasspathScanLoadHelper.java      | 17 +++++++++++++++--
 .../InternalConfigurationPersistenceServiceTest.java    |  2 +-
 3 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
index cbc0ee5..8015b30 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
@@ -195,7 +195,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
     if (sysProperty != null) {
       packages = Arrays.stream(sysProperty.split(",")).collect(Collectors.toSet());
     } else {
-      packages.add("org.apache.geode");
+      packages.add("*");
     }
     return packages;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
index 93c06c5..d9e7c0f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
@@ -19,10 +19,12 @@ import static java.util.stream.Collectors.toSet;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 import io.github.classgraph.ClassGraph;
 import io.github.classgraph.ClassInfoList;
 import io.github.classgraph.ScanResult;
+import io.github.classgraph.utils.WhiteBlackList;
 
 /**
  * Utility class to scan class-path & load classes.
@@ -45,7 +47,8 @@ public class ClasspathScanLoadHelper {
         .filter(ci -> !ci.isAbstract() && !ci.isInterface() && ci.isPublic());
 
     classInfoList = classInfoList
-        .filter(ci -> Arrays.stream(onlyFromPackages).anyMatch(p -> ci.getName().startsWith(p)));
+        .filter(ci -> Arrays.stream(onlyFromPackages)
+            .anyMatch(p -> classMatchesPackage(ci.getName(), p)));
 
     return classInfoList.loadClasses().stream().collect(toSet());
   }
@@ -54,9 +57,19 @@ public class ClasspathScanLoadHelper {
     ClassInfoList classInfoList = scanResult.getClassesWithAnnotation(annotation.getName());
 
     classInfoList = classInfoList
-        .filter(ci -> Arrays.stream(onlyFromPackages).anyMatch(p -> ci.getName().startsWith(p)));
+        .filter(ci -> Arrays.stream(onlyFromPackages)
+            .anyMatch(p -> classMatchesPackage(ci.getName(), p)));
 
     return classInfoList.loadClasses().stream().collect(toSet());
   }
 
+  private boolean classMatchesPackage(String className, String packageSpec) {
+    if (!packageSpec.contains("*")) {
+      return className.startsWith(packageSpec);
+    }
+
+    Pattern globPattern = WhiteBlackList.globToPattern(packageSpec);
+    return globPattern.matcher(className).matches();
+  }
+
 }
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
index 281e682..33b9174 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
@@ -192,7 +192,7 @@ public class InternalConfigurationPersistenceServiceTest {
   @Test
   public void getPackagesToScanWithoutSystemProperty() {
     Set<String> packages = service.getPackagesToScan();
-    assertThat(packages).containsExactly("org.apache.geode");
+    assertThat(packages).containsExactly("*");
   }
 
   @Test