You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2010/10/06 22:05:13 UTC

svn commit: r1005222 - in /cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus: CXFBusImpl.java extension/ExtensionManagerBus.java

Author: dkulp
Date: Wed Oct  6 20:05:13 2010
New Revision: 1005222

URL: http://svn.apache.org/viewvc?rev=1005222&view=rev
Log:
[CXF-2927] Create a ConfiguredBeanLocator if there isn't one to make
sure we don't get NPE's

Modified:
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/CXFBusImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerBus.java

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/CXFBusImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/CXFBusImpl.java?rev=1005222&r1=1005221&r2=1005222&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/CXFBusImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/CXFBusImpl.java Wed Oct  6 20:05:13 2010
@@ -20,6 +20,7 @@
 package org.apache.cxf.bus;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -90,6 +91,9 @@ public class CXFBusImpl extends Abstract
         Object obj = extensions.get(extensionType);
         if (obj == null) {
             ConfiguredBeanLocator loc = (ConfiguredBeanLocator)extensions.get(ConfiguredBeanLocator.class);
+            if (loc == null) {
+                loc = createConfiguredBeanLocator();
+            }
             if (loc != null) {
                 //force loading
                 Collection<?> objs = loc.getBeansOfType(extensionType);
@@ -107,6 +111,33 @@ public class CXFBusImpl extends Abstract
         return null;
     }
     
+    protected synchronized ConfiguredBeanLocator createConfiguredBeanLocator() {
+        ConfiguredBeanLocator loc = (ConfiguredBeanLocator)extensions.get(ConfiguredBeanLocator.class);
+        if (loc == null) {
+            loc = new ConfiguredBeanLocator() {
+                public List<String> getBeanNamesOfType(Class<?> type) {
+                    return null;
+                }
+                public <T> Collection<? extends T> getBeansOfType(Class<T> type) {
+                    return null;
+                }
+                public <T> T getBeanOfType(String name, Class<T> type) {
+                    return null;
+                }
+                public <T> boolean loadBeansOfType(Class<T> type, BeanLoaderListener<T> listener) {
+                    return false;
+                }
+                public boolean hasConfiguredPropertyValue(String beanName, 
+                                                          String propertyName,
+                                                          String value) {
+                    return false;
+                }
+            };
+            this.setExtension(loc, ConfiguredBeanLocator.class);
+        }
+        return loc;
+    }
+
     public <T> void setExtension(T extension, Class<T> extensionType) {
         extensions.put(extensionType, extension);
     }

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerBus.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerBus.java?rev=1005222&r1=1005221&r2=1005222&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerBus.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/extension/ExtensionManagerBus.java Wed Oct  6 20:05:13 2010
@@ -18,7 +18,10 @@
  */
 package org.apache.cxf.bus.extension;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.cxf.binding.BindingFactory;
@@ -27,6 +30,7 @@ import org.apache.cxf.binding.BindingFac
 import org.apache.cxf.bus.BusState;
 import org.apache.cxf.bus.CXFBusImpl;
 import org.apache.cxf.buslifecycle.BusLifeCycleManager;
+import org.apache.cxf.configuration.ConfiguredBeanLocator;
 import org.apache.cxf.configuration.Configurer;
 import org.apache.cxf.configuration.NullConfigurer;
 import org.apache.cxf.resource.DefaultResourceManager;
@@ -52,7 +56,7 @@ public class ExtensionManagerBus extends
     
     public static final String BUS_PROPERTY_NAME = "bus";
     private static final String BUS_ID_PROPERTY_NAME = "org.apache.cxf.bus.id";
-    
+    private final ExtensionManagerImpl extensionManager;
     
     public ExtensionManagerBus(Map<Class, Object> e, Map<String, Object> properties) {
         super(e);
@@ -88,11 +92,11 @@ public class ExtensionManagerBus extends
         
         extensions.put(ResourceManager.class, resourceManager);
 
-        ExtensionManagerImpl em = new ExtensionManagerImpl(new String[0],
-                                                           Thread.currentThread().getContextClassLoader(),
-                                                           extensions,
-                                                           resourceManager, 
-                                                           this);
+        extensionManager = new ExtensionManagerImpl(new String[0],
+                                                    Thread.currentThread().getContextClassLoader(),
+                                                    extensions,
+                                                    resourceManager, 
+                                                    this);
                                   
         setState(BusState.INITIAL);
         
@@ -104,33 +108,76 @@ public class ExtensionManagerBus extends
         DestinationFactoryManager dfm = this.getExtension(DestinationFactoryManager.class);
         if (null == dfm) {
             dfm = new DestinationFactoryManagerImpl(
-                new DeferredMap<DestinationFactory>(em, DestinationFactory.class),
+                new DeferredMap<DestinationFactory>(extensionManager,
+                        DestinationFactory.class),
                 this);
         }
 
         ConduitInitiatorManager cfm = this.getExtension(ConduitInitiatorManager.class);
         if (null == cfm) {
-            cfm = new ConduitInitiatorManagerImpl(new DeferredMap<ConduitInitiator>(em, 
+            cfm = new ConduitInitiatorManagerImpl(new DeferredMap<ConduitInitiator>(extensionManager, 
                 ConduitInitiator.class), this);
         }
         
         BindingFactoryManager bfm = this.getExtension(BindingFactoryManager.class);
         if (null == bfm) {
-            bfm = new BindingFactoryManagerImpl(new DeferredMap<BindingFactory>(em, BindingFactory.class),
+            bfm = new BindingFactoryManagerImpl(new DeferredMap<BindingFactory>(extensionManager,
+                                                    BindingFactory.class),
                                                 this);
             extensions.put(BindingFactoryManager.class, bfm);
         }
-        em.load(new String[] {ExtensionManagerImpl.BUS_EXTENSION_RESOURCE,
-                              ExtensionManagerImpl.BUS_EXTENSION_RESOURCE_COMPAT});
+        extensionManager.load(new String[] {
+            ExtensionManagerImpl.BUS_EXTENSION_RESOURCE,
+            ExtensionManagerImpl.BUS_EXTENSION_RESOURCE_COMPAT});
         
         
-        this.setExtension(em, ExtensionManager.class);
+        this.setExtension(extensionManager, ExtensionManager.class);
     }
 
     public ExtensionManagerBus() {
         this(null, null);
     }
-    
+    protected synchronized ConfiguredBeanLocator createConfiguredBeanLocator() {
+        ConfiguredBeanLocator loc = (ConfiguredBeanLocator)extensions.get(ConfiguredBeanLocator.class);
+        if (loc == null) {
+            loc = new ConfiguredBeanLocator() {
+                public List<String> getBeanNamesOfType(Class<?> type) {
+                    return null;
+                }
+                public <T> Collection<? extends T> getBeansOfType(Class<T> type) {
+                    extensionManager.activateAllByType(type);
+                    List<T> lst = new ArrayList<T>();
+                    for (Object o : extensions.values()) {
+                        if (type.isInstance(o)) {
+                            lst.add(type.cast(o));
+                        }
+                    }
+                    return lst;
+                }
+                public <T> T getBeanOfType(String name, Class<T> type) {
+                    T t = extensionManager.getExtension(name, type);
+                    if (t != null) {
+                        return t;
+                    }
+                    extensionManager.activateAllByType(type);
+                    return type.cast(extensions.get(type));
+                }
+                public <T> boolean loadBeansOfType(Class<T> type, BeanLoaderListener<T> listener) {
+                    int s = extensions.size();
+                    extensionManager.activateAllByType(type);
+                    return s != extensions.size();
+                }
+                public boolean hasConfiguredPropertyValue(String beanName, 
+                                                          String propertyName,
+                                                          String value) {
+                    return false;
+                }
+            };
+            this.setExtension(loc, ConfiguredBeanLocator.class);
+        }
+        return loc;
+    }
+
     private String getBusId(Map<String, Object> properties) {
 
         String busId = null;