You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2016/07/11 00:14:18 UTC

[13/33] cxf git commit: Updating the jaxrs scan server to optionally look for non-component classes and updated the client enablers to scan for component providers

Updating the jaxrs scan server to optionally look for non-component classes and updated the client enablers to scan for component providers


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

Branch: refs/heads/master-jaxrs-2.1
Commit: 3358e04e0e74d29386ba177b410b40a909b9fff7
Parents: 120f997
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Thu Jul 7 13:59:38 2016 +0100
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Thu Jul 7 13:59:38 2016 +0100

----------------------------------------------------------------------
 .../rs/service/SampleRestApplication.java       |  2 +-
 .../src/main/resources/application.properties   |  1 +
 .../rs/service/SampleScanRestApplication.java   |  4 ---
 .../src/main/resources/application.yml          |  1 +
 .../AbstractSpringComponentScanServer.java      | 37 ++++++++++++++++++--
 .../AbstractJaxRsClientConfiguration.java       | 20 ++++++++++-
 .../client/spring/WebClientConfiguration.java   | 17 ++++++++-
 7 files changed, 73 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/java/sample/rs/service/SampleRestApplication.java
----------------------------------------------------------------------
diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/java/sample/rs/service/SampleRestApplication.java b/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/java/sample/rs/service/SampleRestApplication.java
index 8839c1b..2bc20df 100644
--- a/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/java/sample/rs/service/SampleRestApplication.java
+++ b/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/java/sample/rs/service/SampleRestApplication.java
@@ -63,7 +63,7 @@ public class SampleRestApplication {
 
         @Override
         public void run(String... runArgs) throws Exception {
-            System.out.println(webClient.accept("text/plain").path("sayHello/ApacheCxfWebClientUser").get(String.class));
+            System.out.println(webClient.path("sayHello/ApacheCxfWebClientUser").get(String.class));
         }
       };
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/resources/application.properties
----------------------------------------------------------------------
diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/resources/application.properties b/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/resources/application.properties
index 955d403..90e32e8 100644
--- a/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/resources/application.properties
+++ b/distribution/src/main/release/samples/jax_rs/spring_boot/src/main/resources/application.properties
@@ -1,3 +1,4 @@
 cxf.path=/services/helloservice
 cxf.jaxrs.client.address=http://localhost:8080/services/helloservice
+cxf.jaxrs.client.headers.accept=text/plain
 cxf.jaxrs.client.classes-scan-packages=sample.rs.service

http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/java/sample/rs/service/SampleScanRestApplication.java
----------------------------------------------------------------------
diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/java/sample/rs/service/SampleScanRestApplication.java b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/java/sample/rs/service/SampleScanRestApplication.java
index 2cc9e80..e23ab95 100644
--- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/java/sample/rs/service/SampleScanRestApplication.java
+++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/java/sample/rs/service/SampleScanRestApplication.java
@@ -36,10 +36,6 @@ public class SampleScanRestApplication {
     }
  
     @Bean
-    public Swagger2Feature swaggerFeature(ApplicationContext context) {
-        return new Swagger2Feature();
-    }
-    @Bean
     @ExportMetricWriter
     public MetricWriter metricWriter() {
         return new MetricWriter() {

http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/resources/application.yml
----------------------------------------------------------------------
diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/resources/application.yml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/resources/application.yml
index 3643f09..b9582e6 100644
--- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/resources/application.yml
+++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/src/main/resources/application.yml
@@ -8,6 +8,7 @@ cxf:
     service-list-path: /info
   jaxrs:
     component-scan: true
+    classes-scan-packages: org.apache.cxf.jaxrs.swagger
 
 eureka:
   client:

http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/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 927c5e2..e1e6e21 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
@@ -19,18 +19,24 @@
 package org.apache.cxf.jaxrs.spring;
 
 import java.lang.annotation.Annotation;
+import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.ws.rs.Path;
 import javax.ws.rs.ext.Provider;
 
 import org.apache.cxf.annotations.Provider.Scope;
+import org.apache.cxf.common.util.ClasspathScanner;
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.feature.Feature;
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.service.factory.ServiceConstructionException;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.FilterType;
 
@@ -42,12 +48,16 @@ import org.springframework.context.annotation.FilterType;
 )
 public abstract class AbstractSpringComponentScanServer extends AbstractSpringConfigurationFactory {
 
+    @Value("${cxf.jaxrs.classes-scan-packages:''}")
+    private String classesScanPackages;
+    
     private List<ResourceProvider> resourceProviders = new LinkedList<ResourceProvider>();
     private List<Object> jaxrsProviders = new LinkedList<Object>();
     private List<Feature> cxfFeatures = new LinkedList<Feature>();
     private List<Interceptor<? extends Message>> cxfInInterceptors = new LinkedList<Interceptor<?>>();
     private List<Interceptor<? extends Message>> cxfOutInterceptors = new LinkedList<Interceptor<?>>();
     private Class<? extends Annotation> serviceAnnotation;
+    
     protected AbstractSpringComponentScanServer() {
         
     }
@@ -67,13 +77,33 @@ public abstract class AbstractSpringComponentScanServer extends AbstractSpringCo
                 resourceProviders.add(resourceFactory);
             } else if (checkJaxrsProviders && isAnnotationAvailable(beanName, Provider.class)
                 && matchesServiceAnnotation(beanName)) {
-                jaxrsProviders.add(applicationContext.getBean(beanName));
+                jaxrsProviders.add(getProviderBean(beanName));
             } else if (checkCxfProviders && isAnnotationAvailable(beanName, 
                 org.apache.cxf.annotations.Provider.class) && matchesServiceAnnotation(beanName)) {
-                addCxfProvider(applicationContext.getBean(beanName));
+                addCxfProvider(getProviderBean(beanName));
             }
         }
 
+        if (!StringUtils.isEmpty(classesScanPackages)) {
+            try {
+                final Map< Class< ? extends Annotation >, Collection< Class< ? > > > classes =
+                    ClasspathScanner.findClasses(classesScanPackages, Provider.class, 
+                                                 org.apache.cxf.annotations.Provider.class);
+                                          
+                jaxrsProviders.addAll(JAXRSServerFactoryBeanDefinitionParser
+                    .createBeansFromDiscoveredClasses(super.applicationContext, classes.get(Provider.class), null));
+                List<Object> cxfProviders = JAXRSServerFactoryBeanDefinitionParser
+                    .createBeansFromDiscoveredClasses(super.applicationContext, 
+                                                      classes.get(org.apache.cxf.annotations.Provider.class), 
+                                                      null);
+                for (Object cxfProvider : cxfProviders) {
+                    addCxfProvider(cxfProvider);
+                }
+            } catch (Exception ex) {
+                throw new ServiceConstructionException(ex);
+            }
+        }
+        
         factory.setResourceProviders(getResourceProviders());
         factory.setProviders(getJaxrsProviders());
         factory.setFeatures(getFeatures());
@@ -82,6 +112,9 @@ public abstract class AbstractSpringComponentScanServer extends AbstractSpringCo
         
     }
     
+    private Object getProviderBean(String beanName) {
+        return applicationContext.getBean(beanName);
+    }
     protected void addCxfProvider(Object bean) {
         org.apache.cxf.annotations.Provider ann = 
             bean.getClass().getAnnotation(org.apache.cxf.annotations.Provider.class);

http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/AbstractJaxRsClientConfiguration.java
----------------------------------------------------------------------
diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/AbstractJaxRsClientConfiguration.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/AbstractJaxRsClientConfiguration.java
index 87931f8..560d45e 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/AbstractJaxRsClientConfiguration.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/AbstractJaxRsClientConfiguration.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cxf.jaxrs.client.spring;
 
+import javax.ws.rs.ext.Provider;
+
 import org.apache.cxf.Bus;
 import org.apache.cxf.jaxrs.client.Client;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
@@ -27,9 +29,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
 import org.springframework.context.annotation.Import;
 
 @Import(JaxRsConfig.class)
+@ComponentScan(
+               includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, 
+                                                      value = {Provider.class})
+           )
 public abstract class AbstractJaxRsClientConfiguration implements ApplicationContextAware {
 
     protected ApplicationContext context;
@@ -37,17 +45,27 @@ public abstract class AbstractJaxRsClientConfiguration implements ApplicationCon
     private Bus bus;
     @Value("${cxf.jaxrs.client.address}")
     private String address;
+    @Value("${cxf.jaxrs.client.thread-safe:false}")
+    private Boolean threadSafe;
+    
     
     protected Client createClient() {
         JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
         bean.setBus(bus);        
         bean.setAddress(address);
+        bean.setThreadSafe(threadSafe);
         setJaxrsResources(bean);
+        
+        for (String beanName : context.getBeanDefinitionNames()) {
+            if (context.findAnnotationOnBean(beanName, Provider.class) != null) {
+                bean.setProvider(context.getBean(beanName));
+            } 
+        }
+        
         return bean.create();
     }
     
     protected abstract void setJaxrsResources(JAXRSClientFactoryBean factory);
-
     
     @Override
     public void setApplicationContext(ApplicationContext ac) throws BeansException {

http://git-wip-us.apache.org/repos/asf/cxf/blob/3358e04e/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/WebClientConfiguration.java
----------------------------------------------------------------------
diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/WebClientConfiguration.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/WebClientConfiguration.java
index 72a5164..ccac861 100644
--- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/WebClientConfiguration.java
+++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spring/WebClientConfiguration.java
@@ -20,6 +20,7 @@ package org.apache.cxf.jaxrs.client.spring;
 
 import java.lang.annotation.Annotation;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
 
 import javax.ws.rs.ext.Provider;
@@ -35,8 +36,12 @@ import org.springframework.context.annotation.Bean;
 
 public class WebClientConfiguration extends AbstractJaxRsClientConfiguration {
 
-    @Value("${cxf.jaxrs.client.classes-scan-packages:''")
+    @Value("${cxf.jaxrs.client.classes-scan-packages:''}")
     private String scanPackages;
+    @Value("${cxf.jaxrs.client.headers.accept:''}")
+    private String accept;
+    @Value("${cxf.jaxrs.client.headers.content-type:''}")
+    private String contentType;
     
     @Bean
     protected Client jaxRsWebClient() {
@@ -58,6 +63,16 @@ public class WebClientConfiguration extends AbstractJaxRsClientConfiguration {
                 throw new ServiceConstructionException(ex);
             }
         }
+        Map<String, String> extraHeaders = new HashMap<String, String>();
+        if (!StringUtils.isEmpty(accept)) {
+            extraHeaders.put("Accept", accept);
+        }
+        if (!StringUtils.isEmpty(contentType)) {
+            extraHeaders.put("Content-Type", contentType);
+        }
+        if (!extraHeaders.isEmpty()) {
+            factory.setHeaders(extraHeaders);
+        }
     }