Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes cdcc51054 -> e68a620a1


Updating JAX-RS Spring parser to do a last try and check the matching resources 
if none of them have been set previously


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e68a620a
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e68a620a
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e68a620a

Branch: refs/heads/3.0.x-fixes
Commit: e68a620a1d896b9e8c258b48ca6b129d6d53884c
Parents: cdcc510
Author: Sergey Beryozkin <sberyoz...@talend.com>
Authored: Wed Dec 3 14:37:31 2014 +0000
Committer: Sergey Beryozkin <sberyoz...@talend.com>
Committed: Wed Dec 3 14:39:08 2014 +0000

----------------------------------------------------------------------
 .../AbstractSpringComponentScanServer.java      | 18 ++++++++++----
 .../AbstractSpringConfigurationFactory.java     |  6 ++---
 .../JAXRSServerFactoryBeanDefinitionParser.java | 25 ++++++++++++++++++--
 .../org/apache/cxf/jaxrs/spring/servers.xml     |  4 ++++
 4 files changed, 43 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e68a620a/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 cb05d1c..31284aa 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
@@ -37,23 +37,31 @@ public abstract class AbstractSpringComponentScanServer 
extends AbstractSpringCo
 
     private List<ResourceProvider> resourceProviders = new 
LinkedList<ResourceProvider>();
     private List<Object> jaxrsProviders = new LinkedList<Object>();
-
-    
-    protected void setRootResources(JAXRSServerFactoryBean factory) {
+    private Class<? extends Annotation> serviceAnnotation;
+    protected AbstractSpringComponentScanServer() {
+        
+    }
+    protected AbstractSpringComponentScanServer(Class<? extends Annotation> 
serviceAnnotation) {
+        this.serviceAnnotation = serviceAnnotation;
+    }
+    protected void setJaxrsResources(JAXRSServerFactoryBean factory) {
         boolean checkJaxrsRoots = checkJaxrsRoots();
         boolean checkJaxrsProviders = checkJaxrsProviders(); 
         
         for (String beanName : applicationContext.getBeanDefinitionNames()) {
-            if (checkJaxrsRoots && isAnnotationAvailable(beanName, 
Path.class)) {
+            if (checkJaxrsRoots && isAnnotationAvailable(beanName, Path.class)
+                && (serviceAnnotation == null || 
isAnnotationAvailable(beanName, serviceAnnotation))) {
                 SpringResourceFactory resourceFactory = new 
SpringResourceFactory(beanName);
                 resourceFactory.setApplicationContext(applicationContext);
                 resourceProviders.add(resourceFactory);
-            } else if (checkJaxrsProviders && isAnnotationAvailable(beanName, 
Provider.class)) {
+            } else if (checkJaxrsProviders && isAnnotationAvailable(beanName, 
Provider.class)
+                && (serviceAnnotation == null || 
isAnnotationAvailable(beanName, serviceAnnotation))) {
                 jaxrsProviders.add(applicationContext.getBean(beanName));
             }
         }
 
         factory.setResourceProviders(getResourceProviders());
+        factory.setProviders(getJaxrsProviders());
     }
     
     protected <A extends Annotation> boolean isAnnotationAvailable(String 
beanName, Class<A> annClass) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/e68a620a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringConfigurationFactory.java
----------------------------------------------------------------------
diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringConfigurationFactory.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringConfigurationFactory.java
index f8f827e..1ee09fa 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringConfigurationFactory.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/AbstractSpringConfigurationFactory.java
@@ -44,8 +44,8 @@ public abstract class AbstractSpringConfigurationFactory
         factory.setTransportId(getTransportId());
         factory.setBus(applicationContext.getBean(SpringBus.class));
         
-        setRootResources(factory);
-        factory.setProviders(getJaxrsProviders());
+        setJaxrsResources(factory);
+        
         factory.setInInterceptors(getInInterceptors());
         factory.setOutInterceptors(getOutInterceptors());
         factory.setOutFaultInterceptors(getOutFaultInterceptors());
@@ -59,7 +59,7 @@ public abstract class AbstractSpringConfigurationFactory
         applicationContext = ac;
     }
     
-    protected abstract void setRootResources(JAXRSServerFactoryBean factory);
+    protected abstract void setJaxrsResources(JAXRSServerFactoryBean factory);
     
     protected List<Object> getJaxrsProviders() {
         return Collections.emptyList();

http://git-wip-us.apache.org/repos/asf/cxf/blob/e68a620a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
----------------------------------------------------------------------
diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
index 65cf836..8ed1310 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
@@ -157,6 +157,10 @@ public class JAXRSServerFactoryBeanDefinitionParser 
extends AbstractBeanDefiniti
         private List<String> basePackages;
         private String serviceAnnotation;
         private ApplicationContext context;
+        private boolean serviceBeansAvailable;
+        private boolean providerBeansAvailable;
+        private boolean resourceProvidersAvailable;
+        
         public SpringJAXRSServerFactoryBean() {
             super();
         }
@@ -171,7 +175,20 @@ public class JAXRSServerFactoryBeanDefinitionParser 
extends AbstractBeanDefiniti
                 server.destroy();
             }
         }
-        
+        @Override
+        public void setServiceBeans(List<Object> beans) {
+            super.setServiceBeans(beans);
+            this.serviceBeansAvailable = true;
+        }
+        @Override
+        public void setProviders(List<? extends Object> beans) {
+            super.setProviders(beans);
+            this.providerBeansAvailable = true;
+        }
+        public void setResourceProviders(List<ResourceProvider> rps) {
+            super.setResourceProviders(rps);
+            this.resourceProvidersAvailable = true;
+        }
         public void setBasePackages(List<String> basePackages) {
             this.basePackages = basePackages;
         }
@@ -196,7 +213,7 @@ public class JAXRSServerFactoryBeanDefinitionParser extends 
AbstractBeanDefiniti
                     factories.add(factory);
                 }
                 tempFactories.clear();
-                super.setResourceProviders(factories);
+                setResourceProviders(factories);
             }
             Class<? extends Annotation> serviceAnnotationClass = 
loadServiceAnnotationClass();
             if (basePackages != null) {
@@ -227,6 +244,10 @@ public class JAXRSServerFactoryBeanDefinitionParser 
extends AbstractBeanDefiniti
                 }
                 this.setServiceBeans(services);
                 this.setProviders(providers);
+            } else if (!serviceBeansAvailable && !providerBeansAvailable && 
!resourceProvidersAvailable) {
+                AbstractSpringComponentScanServer scanServer = new 
AbstractSpringComponentScanServer() { };
+                scanServer.setApplicationContext(context);
+                scanServer.setJaxrsResources(this);
             }
             if (bus == null) {
                 setBus(BusWiringBeanFactoryPostProcessor.addDefaultBus(ctx));

http://git-wip-us.apache.org/repos/asf/cxf/blob/e68a620a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/spring/servers.xml
----------------------------------------------------------------------
diff --git 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/spring/servers.xml 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/spring/servers.xml
index 5061d56..cc75402 100644
--- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/spring/servers.xml
+++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/spring/servers.xml
@@ -48,6 +48,10 @@
         <jaxrs:extensionMappings>
             <entry key="json" value="application/json"/>
         </jaxrs:extensionMappings>
+        <jaxrs:serviceBeans>
+            <bean class="org.apache.cxf.jaxrs.resources.BookStore"/>
+            <bean 
class="org.apache.cxf.jaxrs.resources.BookStoreSubresourcesOnly"/>
+        </jaxrs:serviceBeans>
     </jaxrs:server>
     <bean id="dataBinding" 
class="org.apache.cxf.jaxrs.provider.DataBindingProvider"/>
     <bean id="jaxb" class="org.apache.cxf.jaxrs.provider.JAXBElementProvider">

Reply via email to