Author: cziegeler
Date: Thu Jul 21 14:54:07 2016
New Revision: 1753699

URL: http://svn.apache.org/viewvc?rev=1753699&view=rev
Log:
SLING-5885 : ResourceResolverFactory might not get correctly re-registered if 
configuration is changed

Modified:
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/FactoryPreconditions.java
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/FactoryPreconditions.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/FactoryPreconditions.java?rev=1753699&r1=1753698&r2=1753699&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/FactoryPreconditions.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/FactoryPreconditions.java
 Thu Jul 21 14:54:07 2016
@@ -80,11 +80,13 @@ public class FactoryPreconditions {
             }
             if ( namesConfiguration != null ) {
                 for(final String r : namesConfiguration) {
-                    final String value = r.trim();
-                    if ( !value.isEmpty() ) {
-                        final RequiredProvider rp = new RequiredProvider();
-                        rp.name = value;
-                        rps.add(rp);
+                    if( r != null ) {
+                        final String value = r.trim();
+                        if ( !value.isEmpty() ) {
+                            final RequiredProvider rp = new RequiredProvider();
+                            rp.name = value;
+                            rps.add(rp);
+                        }
                     }
                 }
             }

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java?rev=1753699&r1=1753698&r2=1753699&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
 Thu Jul 21 14:54:07 2016
@@ -30,6 +30,7 @@ import org.apache.commons.collections.bi
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Modified;
 import org.apache.felix.scr.annotations.Properties;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.PropertyUnbounded;
@@ -541,8 +542,17 @@ public class ResourceResolverFactoryActi
         final String[] requiredResourceProviderNames = 
PropertiesUtil.toStringArray(properties.get(PROP_REQUIRED_PROVIDERS));
 
         if ( requiredResourceProvidersLegacy != null && 
requiredResourceProvidersLegacy.length > 0 ) {
-            logger.error("ResourceResolverFactory is using deprecated required 
providers configuration (" + PROP_REQUIRED_PROVIDERS_LEGACY +
-                    "). Please change to use the property " + 
PROP_REQUIRED_PROVIDERS + " for values: " + 
Arrays.toString(requiredResourceProvidersLegacy));
+            boolean hasRealValue = false;
+            for(final String name : requiredResourceProvidersLegacy) {
+                if ( name != null && !name.trim().isEmpty() ) {
+                    hasRealValue = true;
+                    break;
+                }
+            }
+            if ( hasRealValue ) {
+                logger.error("ResourceResolverFactory is using deprecated 
required providers configuration (" + PROP_REQUIRED_PROVIDERS_LEGACY +
+                        "). Please change to use the property " + 
PROP_REQUIRED_PROVIDERS + " for values: " + 
Arrays.toString(requiredResourceProvidersLegacy));
+            }
         }
         // for testing: if we run unit test, both trackers are set from the 
outside
         if ( this.resourceProviderTracker == null ) {
@@ -579,6 +589,12 @@ public class ResourceResolverFactoryActi
          }
     }
 
+    @Modified
+    protected void modified(final ComponentContext context) {
+        this.deactivate();
+        this.activate(context);
+    }
+
     /**
      * Deactivates this component (called by SCR to take out of service)
      */
@@ -589,9 +605,14 @@ public class ResourceResolverFactoryActi
         this.componentContext = null;
 
         this.changeListenerWhiteboard.deactivate();
+        this.changeListenerWhiteboard = null;
         this.resourceProviderTracker.deactivate();
+        this.resourceProviderTracker = null;
+
         this.preconds.deactivate();
         this.resourceDecoratorTracker.close();
+
+        this.unregisterFactory();
     }
 
     /**


Reply via email to