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 2013/12/06 12:15:57 UTC

svn commit: r1548494 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java systests/jaxrs/src/test/resources/jaxrs_spring_discovery/WEB-INF/beans.xml

Author: sergeyb
Date: Fri Dec  6 11:15:57 2013
New Revision: 1548494

URL: http://svn.apache.org/r1548494
Log:
[CXF-3725] Optional autodiscovery of JAX-RS root resources, patch from Andriy Redko applied

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
    cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_discovery/WEB-INF/beans.xml

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java?rev=1548494&r1=1548493&r2=1548494&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java Fri Dec  6 11:15:57 2013
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import javax.ws.rs.Path;
 import javax.ws.rs.ext.Provider;
 import javax.xml.namespace.QName;
 
@@ -205,6 +206,7 @@ public class JAXRSServerFactoryBeanDefin
             try {
                 if (basePackages != null && !basePackages.isEmpty()) {
                     final List< Object > providers = new ArrayList< Object >();
+                    final List< Object > services = new ArrayList< Object >();
                     
                     // Reusing Spring's approach to classpath scanning. Because Java packages are
                     // open, it's impossible to get all classes belonging to specific package.
@@ -231,8 +233,9 @@ public class JAXRSServerFactoryBeanDefin
                             
                             // Create a bean only if it's a provider (annotated)
                             if (metadata.isAnnotated(Provider.class.getName())) {                                
-                                final Class<?> clazz = ClassLoaderUtils.loadClass(metadata.getClassName(), getClass());
-                                providers.add(ctx.getAutowireCapableBeanFactory().createBean(clazz));
+                                providers.add(createBean(ctx, metadata));
+                            } else if (metadata.isAnnotated(Path.class.getName())) { 
+                                services.add(createBean(ctx, metadata));
                             }
                         }                        
                     }
@@ -240,6 +243,10 @@ public class JAXRSServerFactoryBeanDefin
                     if (!providers.isEmpty()) {                        
                         this.setProviders(providers);
                     }
+                    
+                    if (!services.isEmpty()) {                        
+                        this.setServiceBeans(services);
+                    }
                 }
             } catch (IOException ex) {
                 throw new BeanDefinitionStoreException("I/O failure during classpath scanning", ex);
@@ -251,6 +258,12 @@ public class JAXRSServerFactoryBeanDefin
                 setBus(BusWiringBeanFactoryPostProcessor.addDefaultBus(ctx));
             }
         }
+
+        private Object createBean(final ApplicationContext ctx, final AnnotationMetadata metadata) 
+            throws ClassNotFoundException {
+            final Class<?> clazz = ClassLoaderUtils.loadClass(metadata.getClassName(), getClass());
+            return ctx.getAutowireCapableBeanFactory().createBean(clazz);
+        }
         
         private boolean shouldSkip(final String classname) {
             return classname.startsWith("org.apache.cxf");

Modified: cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_discovery/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_discovery/WEB-INF/beans.xml?rev=1548494&r1=1548493&r2=1548494&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_discovery/WEB-INF/beans.xml (original)
+++ cxf/trunk/systests/jaxrs/src/test/resources/jaxrs_spring_discovery/WEB-INF/beans.xml Fri Dec  6 11:15:57 2013
@@ -28,12 +28,5 @@ http://cxf.apache.org/schemas/jaxrs.xsd"
 	<import resource="classpath:/META-INF/cxf/cxf.xml"/>
 	<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
 
-    <jaxrs:server address="/" base-packages="org.apache.cxf.jaxrs.validation">
-        <jaxrs:serviceBeans>
-            <ref bean="bookStore"/>
-        </jaxrs:serviceBeans>
-    </jaxrs:server>
-    
-    <bean id="bookStore" class="org.apache.cxf.systest.jaxrs.discovery.BookStore" />
-    
+    <jaxrs:server address="/" base-packages="org.apache.cxf.jaxrs.validation, org.apache.cxf.systest.jaxrs.discovery" />
 </beans>