You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/06/12 14:29:06 UTC
git commit: [CXF-5479] Updating Spring class path scanner to support
laoding interfaces only and accepting a custom loader
Repository: cxf
Updated Branches:
refs/heads/master 8447da0da -> 3d635a798
[CXF-5479] Updating Spring class path scanner to support laoding interfaces only and accepting a custom loader
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/3d635a79
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/3d635a79
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/3d635a79
Branch: refs/heads/master
Commit: 3d635a7989366b61ce55231c82c8625aa75b8524
Parents: 8447da0
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Thu Jun 12 13:28:43 2014 +0100
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Thu Jun 12 13:28:43 2014 +0100
----------------------------------------------------------------------
.../cxf/common/util/ClasspathScanner.java | 24 +++++++--
.../cxf/common/util/SpringClasspathScanner.java | 53 ++++++++++++++------
.../maven_plugin/javatowadl/Java2WADLMojo.java | 7 ++-
3 files changed, 63 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/3d635a79/core/src/main/java/org/apache/cxf/common/util/ClasspathScanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/util/ClasspathScanner.java b/core/src/main/java/org/apache/cxf/common/util/ClasspathScanner.java
index 6d6b95b..870e749 100644
--- a/core/src/main/java/org/apache/cxf/common/util/ClasspathScanner.java
+++ b/core/src/main/java/org/apache/cxf/common/util/ClasspathScanner.java
@@ -92,12 +92,21 @@ public class ClasspathScanner {
public static Map< Class< ? extends Annotation >, Collection< Class< ? > > > findClasses(
Collection< String > basePackages, List<Class< ? extends Annotation > > annotations)
throws IOException, ClassNotFoundException {
- return HELPER.findClassesInternal(basePackages, annotations);
+ return findClasses(basePackages, annotations, null);
}
+
+ public static Map< Class< ? extends Annotation >, Collection< Class< ? > > > findClasses(
+ Collection< String > basePackages,
+ List<Class< ? extends Annotation > > annotations,
+ ClassLoader loader) throws IOException, ClassNotFoundException {
+ return HELPER.findClassesInternal(basePackages, annotations, loader);
+ }
protected Map< Class< ? extends Annotation >, Collection< Class< ? > > > findClassesInternal(
- Collection< String > basePackages, List<Class< ? extends Annotation > > annotations)
+ Collection< String > basePackages,
+ List<Class< ? extends Annotation > > annotations,
+ ClassLoader loader)
throws IOException, ClassNotFoundException {
return Collections.emptyMap();
}
@@ -123,9 +132,14 @@ public class ClasspathScanner {
*/
public static List<URL> findResources(Collection<String> basePackages, String extension)
throws IOException {
- return HELPER.findResourcesInternal(basePackages, extension);
+ return findResources(basePackages, extension, null);
}
+ public static List<URL> findResources(Collection<String> basePackages, String extension,
+ ClassLoader loader)
+ throws IOException {
+ return HELPER.findResourcesInternal(basePackages, extension, loader);
+ }
public static Set<String> parsePackages(final String packagesAsCsv) {
final String[] values = StringUtils.split(packagesAsCsv, ",");
@@ -144,7 +158,9 @@ public class ClasspathScanner {
return basePackages;
}
- protected List<URL> findResourcesInternal(Collection<String> basePackages, String extension)
+ protected List<URL> findResourcesInternal(Collection<String> basePackages,
+ String extension,
+ ClassLoader loader)
throws IOException {
return Collections.emptyList();
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/3d635a79/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java b/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java
index 8daab5d..b026c66 100644
--- a/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java
+++ b/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java
@@ -46,10 +46,12 @@ class SpringClasspathScanner extends ClasspathScanner {
protected Map< Class< ? extends Annotation >, Collection< Class< ? > > > findClassesInternal(
- Collection< String > basePackages, List<Class< ? extends Annotation > > annotations)
+ Collection< String > basePackages,
+ List<Class< ? extends Annotation > > annotations,
+ ClassLoader loader)
throws IOException, ClassNotFoundException {
- ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ ResourcePatternResolver resolver = getResolver(loader);
MetadataReaderFactory factory = new CachingMetadataReaderFactory(resolver);
final Map< Class< ? extends Annotation >, Collection< Class< ? > > > classes =
@@ -89,8 +91,7 @@ class SpringClasspathScanner extends ClasspathScanner {
boolean concreteClass = !metadata.isInterface() && !metadata.isAbstract();
if (metadata.isAnnotated(annotation.getName())) {
if (concreteClass) {
- classes.get(annotation).add(
- ClassLoaderUtils.loadClass(metadata.getClassName(), getClass()));
+ classes.get(annotation).add(loadClass(metadata.getClassName(), loader));
} else {
matchingInterfaces.get(annotation).add(metadata.getClassName());
}
@@ -100,29 +101,39 @@ class SpringClasspathScanner extends ClasspathScanner {
}
}
}
- for (Map.Entry<Class<? extends Annotation>, Collection<String>> e1 : matchingInterfaces.entrySet()) {
- for (Map.Entry<String, String[]> e2 : nonMatchingClasses.entrySet()) {
- for (String intName : e2.getValue()) {
- if (e1.getValue().contains(intName)) {
- classes.get(e1.getKey()).add(ClassLoaderUtils.loadClass(e2.getKey(), getClass()));
- break;
+ if (!nonMatchingClasses.isEmpty()) {
+ for (Map.Entry<Class<? extends Annotation>, Collection<String>> e1 : matchingInterfaces.entrySet()) {
+ for (Map.Entry<String, String[]> e2 : nonMatchingClasses.entrySet()) {
+ for (String intName : e2.getValue()) {
+ if (e1.getValue().contains(intName)) {
+ classes.get(e1.getKey()).add(loadClass(e2.getKey(), loader));
+ break;
+ }
}
}
}
}
+ for (Map.Entry<Class<? extends Annotation>, Collection<String>> e : matchingInterfaces.entrySet()) {
+ if (classes.get(e.getKey()).isEmpty()) {
+ for (String intName : e.getValue()) {
+ classes.get(e.getKey()).add(loadClass(intName, loader));
+ }
+ }
+ }
+
return classes;
}
- protected List<URL> findResourcesInternal(Collection<String> basePackages, String extension)
+ protected List<URL> findResourcesInternal(Collection<String> basePackages,
+ String extension,
+ ClassLoader loader)
throws IOException {
final List<URL> resourceURLs = new ArrayList<URL>();
if (basePackages == null || basePackages.isEmpty()) {
return resourceURLs;
}
- ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
-
-
+ ResourcePatternResolver resolver = getResolver(loader);
for (final String basePackage: basePackages) {
final boolean scanAllPackages = basePackage.equals(ALL_PACKAGES);
@@ -145,7 +156,10 @@ class SpringClasspathScanner extends ClasspathScanner {
return resourceURLs;
}
-
+ private ResourcePatternResolver getResolver(ClassLoader loader) {
+ return loader != null
+ ? new PathMatchingResourcePatternResolver(loader) : new PathMatchingResourcePatternResolver();
+ }
private boolean shouldSkip(final String classname) {
for (String packageToSkip: PACKAGES_TO_SKIP) {
@@ -156,4 +170,13 @@ class SpringClasspathScanner extends ClasspathScanner {
return false;
}
+
+ private Class<?> loadClass(String className, ClassLoader loader)
+ throws ClassNotFoundException {
+ if (loader == null) {
+ return ClassLoaderUtils.loadClass(className, getClass());
+ } else {
+ return loader.loadClass(className);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/3d635a79/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
----------------------------------------------------------------------
diff --git a/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java b/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
index a52b349..58cc578 100644
--- a/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
+++ b/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/Java2WADLMojo.java
@@ -311,9 +311,12 @@ public class Java2WADLMojo extends AbstractMojo {
}
if (resourceClasses.isEmpty() && basePackages != null) {
try {
- @SuppressWarnings("unchecked")
+ List<Class<? extends Annotation>> anns = new ArrayList<Class<? extends Annotation>>();
+ anns.add(Path.class);
final Map< Class< ? extends Annotation >, Collection< Class< ? > > > discoveredClasses =
- ClasspathScanner.findClasses(ClasspathScanner.parsePackages(basePackages), Path.class);
+ ClasspathScanner.findClasses(ClasspathScanner.parsePackages(basePackages),
+ anns,
+ getClassLoader());
if (discoveredClasses.containsKey(Path.class)) {
resourceClasses.addAll(discoveredClasses.get(Path.class));
}