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;
}