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 2017/03/21 16:03:07 UTC
cxf git commit: [CXF-7290] Adding cxf.jaxrs.component-scan-packages
and cxf.jaxrs.component-scan-beans properties
Repository: cxf
Updated Branches:
refs/heads/master 1a7411c27 -> 3833280c6
[CXF-7290] Adding cxf.jaxrs.component-scan-packages and cxf.jaxrs.component-scan-beans properties
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/3833280c
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/3833280c
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/3833280c
Branch: refs/heads/master
Commit: 3833280c67c489a7e83b8540361df4154f4aeccf
Parents: 1a7411c
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Tue Mar 21 16:02:48 2017 +0000
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Tue Mar 21 16:02:48 2017 +0000
----------------------------------------------------------------------
.../AbstractSpringComponentScanServer.java | 42 +++++++++++++++++---
1 file changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/3833280c/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringComponentScanServer.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringComponentScanServer.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringComponentScanServer.java
index 04b338e..9225ad9 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringComponentScanServer.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringComponentScanServer.java
@@ -33,6 +33,7 @@ import javax.ws.rs.ext.Provider;
import org.apache.cxf.annotations.Provider.Scope;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.ClasspathScanner;
+import org.apache.cxf.common.util.PackageUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.feature.Feature;
import org.apache.cxf.interceptor.Interceptor;
@@ -55,6 +56,10 @@ public abstract class AbstractSpringComponentScanServer extends AbstractSpringCo
private static final Logger LOG = LogUtils.getL7dLogger(AbstractSpringComponentScanServer.class);
@Value("${cxf.jaxrs.classes-scan-packages:}")
private String classesScanPackages;
+ @Value("${cxf.jaxrs.component-scan-packages:}")
+ private String componentScanPackages;
+ @Value("${cxf.jaxrs.component-scan-beans:}")
+ private String componentScanBeans;
private List<ResourceProvider> resourceProviders = new LinkedList<ResourceProvider>();
private List<Object> jaxrsProviders = new LinkedList<Object>();
@@ -74,17 +79,23 @@ public abstract class AbstractSpringComponentScanServer extends AbstractSpringCo
boolean checkJaxrsProviders = checkJaxrsProviders();
boolean checkCxfProviders = checkCxfProviders();
+ Set<String> componentScanPackagesSet = !StringUtils.isEmpty(componentScanPackages)
+ ? ClasspathScanner.parsePackages(componentScanPackages) : null;
+ Set<String> componentScanBeansSet = !StringUtils.isEmpty(componentScanBeans)
+ ? ClasspathScanner.parsePackages(componentScanBeans) : null;
+
for (String beanName : applicationContext.getBeanDefinitionNames()) {
- if (checkJaxrsRoots && isAnnotationAvailable(beanName, Path.class)
- && matchesServiceAnnotation(beanName)) {
+ if (checkJaxrsRoots
+ && isValidComponent(beanName, Path.class, componentScanPackagesSet, componentScanBeansSet)) {
SpringResourceFactory resourceFactory = new SpringResourceFactory(beanName);
resourceFactory.setApplicationContext(applicationContext);
resourceProviders.add(resourceFactory);
- } else if (checkJaxrsProviders && isAnnotationAvailable(beanName, Provider.class)
- && matchesServiceAnnotation(beanName)) {
+ } else if (checkJaxrsProviders
+ && isValidComponent(beanName, Provider.class, componentScanPackagesSet, componentScanBeansSet)) {
jaxrsProviders.add(getProviderBean(beanName));
- } else if (checkCxfProviders && isAnnotationAvailable(beanName,
- org.apache.cxf.annotations.Provider.class) && matchesServiceAnnotation(beanName)) {
+ } else if (checkCxfProviders
+ && isValidComponent(beanName, org.apache.cxf.annotations.Provider.class,
+ componentScanPackagesSet, componentScanBeansSet)) {
addCxfProvider(getProviderBean(beanName));
}
}
@@ -119,6 +130,25 @@ public abstract class AbstractSpringComponentScanServer extends AbstractSpringCo
}
+ protected boolean isValidComponent(String beanName,
+ Class<? extends Annotation> ann,
+ Set<String> componentScanPackagesSet,
+ Set<String> componentScanBeansSet) {
+ return isAnnotationAvailable(beanName, ann)
+ && matchesServiceAnnotation(beanName)
+ && matchesComponentPackage(beanName, componentScanPackagesSet)
+ && matchesComponentName(beanName, componentScanBeansSet);
+ }
+ protected boolean matchesComponentName(String beanName, Set<String> componentScanBeansSet) {
+ return componentScanBeansSet == null || componentScanBeansSet.contains(beanName);
+ }
+ protected boolean matchesComponentPackage(String beanName, Set<String> componentScanPackagesSet) {
+ return componentScanPackagesSet == null
+ || !applicationContext.isSingleton(beanName)
+ || componentScanPackagesSet.contains(
+ PackageUtils.getPackageName(applicationContext.getBean(beanName).getClass()));
+
+ }
private static void warnIfDuplicatesAvailable(List<? extends Object> providers) {
Set<String> classNames = new HashSet<>();
for (Object o : providers) {