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/07/30 18:33:22 UTC

svn commit: r1508513 - in /cxf/trunk/rt: frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/

Author: sergeyb
Date: Tue Jul 30 16:33:22 2013
New Revision: 1508513

URL: http://svn.apache.org/r1508513
Log:
[CXF-5135] Some more Configuration related coding

Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurationImpl.java
    cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientConfigurableImpl.java

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java?rev=1508513&r1=1508512&r2=1508513&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurableImpl.java Tue Jul 30 16:33:22 2013
@@ -40,7 +40,8 @@ public class ConfigurableImpl<C extends 
     
     public ConfigurableImpl(C configurable, Class<?>[] supportedProviderClasses, Configuration config) {
         this(configurable, supportedProviderClasses);
-        this.config = config instanceof ConfigurationImpl ? (ConfigurationImpl)config : new ConfigurationImpl(config);
+        this.config = config instanceof ConfigurationImpl 
+            ? (ConfigurationImpl)config : new ConfigurationImpl(config, supportedProviderClasses);
     }
     
     private ConfigurableImpl(C configurable, Class<?>[] supportedProviderClasses) {
@@ -93,7 +94,8 @@ public class ConfigurableImpl<C extends 
 
     @Override
     public C register(Class<?> providerClass, int bindingPriority) {
-        return doRegister(createProvider(providerClass), bindingPriority, supportedProviderClasses);
+        return doRegister(ConfigurationImpl.createProvider(providerClass), 
+                          bindingPriority, supportedProviderClasses);
     }
 
     @Override
@@ -103,7 +105,7 @@ public class ConfigurableImpl<C extends 
 
     @Override
     public C register(Class<?> providerClass, Map<Class<?>, Integer> contracts) {
-        return register(createProvider(providerClass), contracts);
+        return register(ConfigurationImpl.createProvider(providerClass), contracts);
     }
     
     protected C doRegister(Object provider, int bindingPriority, Class<?>... contracts) {
@@ -113,22 +115,10 @@ public class ConfigurableImpl<C extends 
             feature.configure(new FeatureContextImpl(this));
             return configurable;
         }
-        for (Class<?> contract : contracts) {
-            if (contract.isAssignableFrom(provider.getClass())) {
-                config.register(provider, contract, bindingPriority);
-            }
-        }
+        config.register(provider, bindingPriority, contracts);
         return configurable;
     }
 
-    private static Object createProvider(Class<?> cls) {
-        try {
-            return cls.newInstance();
-        } catch (Throwable ex) {
-            throw new RuntimeException(ex); 
-        }
-    }
-    
     public static class FeatureContextImpl implements FeatureContext {
         private Configurable<?> cfg;
         public FeatureContextImpl(Configurable<?> cfg) {

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurationImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurationImpl.java?rev=1508513&r1=1508512&r2=1508513&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurationImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/ConfigurationImpl.java Tue Jul 30 16:33:22 2013
@@ -29,6 +29,8 @@ import javax.ws.rs.RuntimeType;
 import javax.ws.rs.core.Configuration;
 import javax.ws.rs.core.Feature;
 
+import org.apache.cxf.jaxrs.utils.AnnotationUtils;
+
 public class ConfigurationImpl implements Configuration {
     private Map<String, Object> props = new HashMap<String, Object>();
     private RuntimeType runtimeType;
@@ -40,13 +42,29 @@ public class ConfigurationImpl implement
         this.runtimeType = rt;
     }
     
-    public ConfigurationImpl(Configuration parent) {
+    public ConfigurationImpl(Configuration parent, Class<?>[] defaultContracts) {
         if (parent != null) {
             this.props.putAll(parent.getProperties());
             this.runtimeType = parent.getRuntimeType();
+            
+            Set<Class<?>> providerClasses = new HashSet<Class<?>>(parent.getClasses());
             for (Object o : parent.getInstances()) {
-                providers.put(o, parent.getContracts(o.getClass()));
+                registerParentProvider(o, parent);
+                providerClasses.remove(o.getClass());
+            }
+            for (Class<?> cls : providerClasses) {
+                registerParentProvider(createProvider(cls), parent);
             }
+            
+        }
+    }
+    
+    private void registerParentProvider(Object o, Configuration parent) {
+        Map<Class<?>, Integer> contracts = parent.getContracts(o.getClass());
+        if (contracts != null) {
+            providers.put(o, contracts);
+        } else {
+            register(o, AnnotationUtils.getBindingPriority(o.getClass()));
         }
     }
     
@@ -136,12 +154,25 @@ public class ConfigurationImpl implement
         features.add(f);
     }
     
-    public void register(Object provider, Class<?> contract, int bindingPriority) {
+    
+    public void register(Object provider, int bindingPriority, Class<?>... contracts) {
         Map<Class<?>, Integer> metadata = providers.get(provider);
         if (metadata == null) {
             metadata = new HashMap<Class<?>, Integer>();
             providers.put(provider, metadata);
         }
-        metadata.put(contract, bindingPriority);
+        for (Class<?> contract : contracts) {
+            if (contract.isAssignableFrom(provider.getClass())) {
+                metadata.put(contract, bindingPriority);
+            }
+        }
+    }
+    
+    public static Object createProvider(Class<?> cls) {
+        try {
+            return cls.newInstance();
+        } catch (Throwable ex) {
+            throw new RuntimeException(ex); 
+        }
     }
 }

Modified: cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientConfigurableImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientConfigurableImpl.java?rev=1508513&r1=1508512&r2=1508513&view=diff
==============================================================================
--- cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientConfigurableImpl.java (original)
+++ cxf/trunk/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/spec/ClientConfigurableImpl.java Tue Jul 30 16:33:22 2013
@@ -46,6 +46,7 @@ public class ClientConfigurableImpl<C ex
     }
     
     public ClientConfigurableImpl(C configurable, Configuration config) {
-        super(configurable, CLIENT_FILTER_INTERCEPTOR_CLASSES, new ConfigurationImpl(config));
+        super(configurable, CLIENT_FILTER_INTERCEPTOR_CLASSES, 
+              new ConfigurationImpl(config, CLIENT_FILTER_INTERCEPTOR_CLASSES));
     }
 }