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/06/17 01:33:41 UTC

svn commit: r955428 - in /cxf/trunk: common/common/src/main/java/org/apache/cxf/resource/ rt/core/src/main/java/org/apache/cxf/bus/resource/ rt/core/src/main/java/org/apache/cxf/bus/spring/

Author: dkulp
Date: Wed Jun 16 23:33:41 2010
New Revision: 955428

URL: http://svn.apache.org/viewvc?rev=955428&view=rev
Log:
In some strange cases if cxf.xml isn't the first import in a spring
config, the ResourceManagerImpl can loop.

Modified:
    cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java

Modified: cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java
URL: http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java?rev=955428&r1=955427&r2=955428&view=diff
==============================================================================
--- cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java (original)
+++ cxf/trunk/common/common/src/main/java/org/apache/cxf/resource/DefaultResourceManager.java Wed Jun 16 23:33:41 2010
@@ -35,6 +35,7 @@ public class DefaultResourceManager impl
 
     protected final List<ResourceResolver> registeredResolvers 
         = new CopyOnWriteArrayList<ResourceResolver>();
+    protected boolean firstCalled;
 
     public DefaultResourceManager() { 
         initializeDefaultResolvers(); 
@@ -47,8 +48,13 @@ public class DefaultResourceManager impl
     public DefaultResourceManager(List<? extends ResourceResolver> resolvers) {
         addResourceResolvers(resolvers);
     }
+    
+    protected void onFirstResolve() {
+        //nothing
+        firstCalled = true;
+    }
  
-    public final <T> T resolveResource(String name, Class<T> type) { 
+    public final <T> T resolveResource(String name, Class<T> type) {
         return findResource(name, type, false, registeredResolvers);
     } 
 
@@ -86,6 +92,9 @@ public class DefaultResourceManager impl
     
     private <T> T findResource(String name, Class<T> type, boolean asStream, 
                                List<ResourceResolver> resolvers) {
+        if (!firstCalled) {
+            onFirstResolve();
+        }
         if (resolvers == null) {
             resolvers = registeredResolvers;
         }

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java?rev=955428&r1=955427&r2=955428&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/resource/ResourceManagerImpl.java Wed Jun 16 23:33:41 2010
@@ -19,9 +19,7 @@
 
 package org.apache.cxf.bus.resource;
 
-import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 import javax.annotation.Resource;
 
@@ -31,7 +29,6 @@ import org.apache.cxf.configuration.Conf
 import org.apache.cxf.extension.BusExtension;
 import org.apache.cxf.resource.DefaultResourceManager;
 import org.apache.cxf.resource.ObjectTypeResolver;
-import org.apache.cxf.resource.PropertiesResolver;
 import org.apache.cxf.resource.ResourceManager;
 import org.apache.cxf.resource.ResourceResolver;
 
@@ -43,23 +40,18 @@ public class ResourceManagerImpl extends
     public ResourceManagerImpl() {
     }
 
-    public ResourceManagerImpl(List<? extends ResourceResolver> r) {
-        super(r);
-    }
     public ResourceManagerImpl(Bus b) {
         super();
         setBus(b);
-    }
-    public ResourceManagerImpl(Bus b, List<? extends ResourceResolver> r) {
-        super(r);
-        setBus(b);
-    }
-
-    public ResourceManagerImpl(Map<String, Object> properties) { 
-        super();
-        registeredResolvers.clear();
-        
-        registeredResolvers.add(new PropertiesResolver(properties));
+    } 
+    protected void onFirstResolve() {
+        super.onFirstResolve();
+        if (bus != null) {
+            ConfiguredBeanLocator locator = bus.getExtension(ConfiguredBeanLocator.class);
+            if (locator != null) {
+                this.addResourceResolvers(locator.getBeansOfType(ResourceResolver.class));
+            }
+        }
     }
 
     /**
@@ -71,25 +63,15 @@ public class ResourceManagerImpl extends
         registeredResolvers.addAll(resolvers);
     }
     
-    public final void addResolvers(Collection<? extends ResourceResolver> resolvers) {
-        super.addResourceResolvers(resolvers);
-    }
-    public final void addResolver(ResourceResolver resolver) {
-        super.addResourceResolver(resolver);
-    }
-    
     @Resource
     public final void setBus(Bus b) {
         if (bus != b) {
             bus = b;
+            firstCalled = false;
             super.addResourceResolver(new ObjectTypeResolver(bus));
             if (null != bus) {
                 bus.setExtension(this, ResourceManager.class);
             }
-            ConfiguredBeanLocator locator = bus.getExtension(ConfiguredBeanLocator.class);
-            if (locator != null) {
-                this.addResolvers(locator.getBeansOfType(ResourceResolver.class));
-            }
         }
     }
 

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java?rev=955428&r1=955427&r2=955428&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/spring/Jsr250BeanPostProcessor.java Wed Jun 16 23:33:41 2010
@@ -21,10 +21,10 @@ package org.apache.cxf.bus.spring;
 
 
 
-import org.apache.cxf.Bus;
 import org.apache.cxf.common.injection.ResourceInjector;
 import org.apache.cxf.resource.ResourceManager;
 import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
@@ -63,17 +63,24 @@ public class Jsr250BeanPostProcessor 
     }
     private ResourceManager getResourceManager(Object bean) {
         if (resourceManager == null) {
+            boolean temp = isProcessing;
+            isProcessing = false;
             if (bean instanceof ResourceManager) {
                 resourceManager = (ResourceManager)bean;
                 resourceManager.addResourceResolver(new BusApplicationContextResourceResolver(context));
             } else {
-                Bus b = (Bus)context.getBean("cxf");
-                ResourceManager m = b.getExtension(ResourceManager.class);
+                ResourceManager m = null;
+                try {
+                    m = (ResourceManager)context.getBean(ResourceManager.class.getName());
+                } catch (NoSuchBeanDefinitionException t) {
+                    //ignore - no resource manager
+                }
                 if (resourceManager == null && m != null) {
                     resourceManager = m;
                     resourceManager.addResourceResolver(new BusApplicationContextResourceResolver(context));
                 }
             }
+            isProcessing = temp;
         }
         return resourceManager;
     }