You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/10/29 10:28:50 UTC

svn commit: r1711198 - in /sling/trunk/bundles/resourceresolver/src: main/java/org/apache/sling/resourceresolver/impl/ main/java/org/apache/sling/resourceresolver/impl/providers/ test/java/org/apache/sling/resourceresolver/impl/

Author: cziegeler
Date: Thu Oct 29 09:28:50 2015
New Revision: 1711198

URL: http://svn.apache.org/viewvc?rev=1711198&view=rev
Log:
SLING-5201 : Improve resource provider resolving

Modified:
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverFactoryActivator.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
    sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java
    sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java

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=1711198&r1=1711197&r2=1711198&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 Oct 29 09:28:50 2015
@@ -37,8 +37,6 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.References;
-import org.apache.felix.scr.annotations.Service;
-import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.resource.ResourceDecorator;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.runtime.RuntimeService;
@@ -48,6 +46,7 @@ import org.apache.sling.resourceresolver
 import org.apache.sling.resourceresolver.impl.mapping.Mapping;
 import org.apache.sling.resourceresolver.impl.observation.ResourceChangeListenerWhiteboard;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker;
+import org.apache.sling.resourceresolver.impl.providers.ResourceProviderTracker.ChangeListener;
 import org.apache.sling.resourceresolver.impl.providers.RuntimeServiceImpl;
 import org.apache.sling.serviceusermapping.ServiceUserMapper;
 import org.osgi.framework.Bundle;
@@ -56,10 +55,7 @@ import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceFactory;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
-import org.osgi.service.event.EventConstants;
-import org.osgi.service.event.EventHandler;
 
 /**
  * The <code>ResourceResolverFactoryActivator/code> keeps track of required services for the
@@ -74,18 +70,15 @@ import org.osgi.service.event.EventHandl
      label = "Apache Sling Resource Resolver Factory",
      description = "Configures the Resource Resolver for request URL and resource path rewriting.",
      specVersion = "1.1",
-     metatype = true,
-     immediate = true)
+     metatype = true)
 @Properties({
     @Property(name = Constants.SERVICE_DESCRIPTION, value = "Apache Sling Resource Resolver Factory"),
-    @Property(name = Constants.SERVICE_VENDOR, value = "The Apache Software Foundation"),
-    @Property(name = EventConstants.EVENT_TOPIC, value = SlingConstants.TOPIC_RESOURCE_PROVIDER_ADDED, propertyPrivate = true)
+    @Property(name = Constants.SERVICE_VENDOR, value = "The Apache Software Foundation")
 })
 @References({
     @Reference(name = "ResourceDecorator", referenceInterface = ResourceDecorator.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
 })
-@Service(EventHandler.class)
-public class ResourceResolverFactoryActivator implements Runnable, EventHandler {
+public class ResourceResolverFactoryActivator implements Runnable {
 
     private static final class FactoryRegistration {
         /** Registration .*/
@@ -491,7 +484,17 @@ public class ResourceResolverFactoryActi
             this.changeListenerWhiteboard = new ResourceChangeListenerWhiteboard();
             this.changeListenerWhiteboard.activate(this.componentContext.getBundleContext(),
                 this.resourceProviderTracker, searchPath);
-            this.resourceProviderTracker.activate(this.componentContext.getBundleContext(), this.eventAdmin);
+            this.resourceProviderTracker.activate(this.componentContext.getBundleContext(),
+                    this.eventAdmin,
+                    new ChangeListener() {
+
+                        @Override
+                        public void providerChanged(final String pid) {
+                            if (ArrayUtils.contains(requiredResourceProviders, pid)) {
+                                checkFactoryPreconditions();
+                            }
+                        }
+                    });
         }
 
         // namespace mangling
@@ -732,11 +735,4 @@ public class ResourceResolverFactoryActi
     public ResourceProviderTracker getResourceProviderTracker() {
         return resourceProviderTracker;
     }
-
-    @Override
-    public void handleEvent(Event event) {
-        if (ArrayUtils.contains(requiredResourceProviders, event.getProperty(Constants.SERVICE_PID))) {
-            this.checkFactoryPreconditions();
-        }
-    }
 }

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java?rev=1711198&r1=1711197&r2=1711198&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java Thu Oct 29 09:28:50 2015
@@ -26,7 +26,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
@@ -61,7 +60,6 @@ import org.apache.sling.resourceresolver
 import org.apache.sling.resourceresolver.impl.helper.URIException;
 import org.apache.sling.resourceresolver.impl.mapping.MapEntry;
 import org.apache.sling.resourceresolver.impl.params.ParsedParameters;
-import org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
 import org.apache.sling.resourceresolver.impl.providers.stateful.CombinedResourceProvider;
 import org.apache.sling.resourceresolver.impl.providers.stateful.ResourceProviderAuthenticator;
@@ -117,10 +115,6 @@ public class ResourceResolverImpl extend
         this(factory, isAdmin, authenticationInfo, factory.getResourceProviderTracker().getResourceProviderStorage());
     }
 
-    ResourceResolverImpl(final CommonResourceResolverFactoryImpl factory, final boolean isAdmin, final Map<String, Object> authenticationInfo, final List<ResourceProviderHandler> handlers) throws LoginException {
-        this(factory, isAdmin, authenticationInfo, new ResourceProviderStorage(handlers));
-    }
-
     ResourceResolverImpl(final CommonResourceResolverFactoryImpl factory, final boolean isAdmin, final Map<String, Object> authenticationInfo, final ResourceProviderStorage storage) throws LoginException {
         this.factory = factory;
         this.authenticationInfo = authenticationInfo;
@@ -129,6 +123,12 @@ public class ResourceResolverImpl extend
         this.factory.register(this, context);
     }
 
+    /**
+     * Constructor for cloning the resource resolver
+     * @param resolver The resolver to clone
+     * @param authenticationInfo The auth info
+     * @throws LoginException if auth to a required provider fails
+     */
     private ResourceResolverImpl(final ResourceResolverImpl resolver, final Map<String, Object> authenticationInfo) throws LoginException {
         this.factory = resolver.factory;
         this.authenticationInfo = new HashMap<String, Object>();
@@ -244,6 +244,7 @@ public class ResourceResolverImpl extend
     /**
      * @see org.apache.sling.api.resource.ResourceResolver#resolve(javax.servlet.http.HttpServletRequest)
      */
+    @SuppressWarnings("deprecation")
     @Override
     public Resource resolve(final HttpServletRequest request) {
         checkClosed();

Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java?rev=1711198&r1=1711197&r2=1711198&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java Thu Oct 29 09:28:50 2015
@@ -64,6 +64,11 @@ public class ResourceProviderTracker {
         ObservationReporter createProviderReporter();
     }
 
+    public interface ChangeListener {
+
+        void providerChanged(String pid);
+    }
+
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     private final Map<ServiceReference, ResourceProviderInfo> infos = new ConcurrentHashMap<ServiceReference, ResourceProviderInfo>();
@@ -84,9 +89,12 @@ public class ResourceProviderTracker {
 
     private volatile ObservationReporter providerReporter;
 
-    public void activate(final BundleContext bundleContext, final EventAdmin eventAdmin) {
+    private volatile ChangeListener listener;
+
+    public void activate(final BundleContext bundleContext, final EventAdmin eventAdmin, final ChangeListener listener) {
         this.bundleContext = bundleContext;
         this.eventAdmin = eventAdmin;
+        this.listener = listener;
         this.tracker = new ServiceTracker(bundleContext,
                 ResourceProvider.class.getName(),
                 new ServiceTrackerCustomizer() {
@@ -125,6 +133,7 @@ public class ResourceProviderTracker {
         this.infos.clear();
         this.handlers.clear();
         this.invalidProviders.clear();
+        this.listener = null;
     }
 
     public void setObservationReporterGenerator(final ObservationReporterGenerator generator) {
@@ -148,6 +157,7 @@ public class ResourceProviderTracker {
     private void register(final ResourceProviderInfo info) {
         if ( info.isValid() ) {
            logger.debug("Registering new resource provider {}", info);
+           final List<ProviderEvent> events = new ArrayList<ResourceProviderTracker.ProviderEvent>();
            synchronized ( this.handlers ) {
                List<ResourceProviderHandler> matchingHandlers = this.handlers.get(info.getPath());
                if ( matchingHandlers == null ) {
@@ -164,12 +174,16 @@ public class ResourceProviderTracker {
                            this.handlers.remove(info.getPath());
                        }
                    } else {
+                       events.add(new ProviderEvent(true, info));
                        if ( matchingHandlers.size() > 1 ) {
                            this.deactivate(matchingHandlers.get(1));
+                           events.add(new ProviderEvent(false, matchingHandlers.get(1).getInfo()));
                        }
                    }
                }
            }
+           this.storage = null;
+           this.postEvents(events);
         } else {
             logger.warn("Ignoring invalid resource provider {}", info);
             this.invalidProviders.put(info, FailureReason.invalid);
@@ -188,6 +202,7 @@ public class ResourceProviderTracker {
 
         if ( !isInvalid ) {
             logger.debug("Unregistering resource provider {}", info);
+            final List<ProviderEvent> events = new ArrayList<ResourceProviderTracker.ProviderEvent>();
             synchronized (this.handlers) {
                 final List<ResourceProviderHandler> matchingHandlers = this.handlers.get(info.getPath());
                 if ( matchingHandlers != null ) {
@@ -195,11 +210,13 @@ public class ResourceProviderTracker {
                     if ( matchingHandlers.get(0).getInfo() == info ) {
                         doActivateNext = true;
                         this.deactivate(matchingHandlers.get(0));
+                        events.add(new ProviderEvent(false, matchingHandlers.get(0).getInfo()));
                     }
                     if (removeHandlerByInfo(info, matchingHandlers)) {
                         while (doActivateNext && !matchingHandlers.isEmpty()) {
                             if (this.activate(matchingHandlers.get(0))) {
                                 doActivateNext = false;
+                                events.add(new ProviderEvent(true, matchingHandlers.get(0).getInfo()));
                             } else {
                                 matchingHandlers.remove(0);
                             }
@@ -211,6 +228,7 @@ public class ResourceProviderTracker {
                 }
             }
             storage = null;
+            this.postEvents(events);
         } else {
             logger.debug("Unregistering invalid resource provider {}", info);
         }
@@ -247,8 +265,6 @@ public class ResourceProviderTracker {
 
             return false;
         }
-        postOSGiEvent(SlingConstants.TOPIC_RESOURCE_PROVIDER_ADDED, handler.getInfo());
-        postResourceProviderChange(ChangeType.PROVIDER_ADDED, handler.getInfo());
         logger.debug("Activated resource provider {}", handler.getInfo());
         return true;
     }
@@ -259,22 +275,21 @@ public class ResourceProviderTracker {
      */
     private void deactivate(final ResourceProviderHandler handler) {
         handler.deactivate();
-        postOSGiEvent(SlingConstants.TOPIC_RESOURCE_PROVIDER_REMOVED, handler.getInfo());
-        postResourceProviderChange(ChangeType.PROVIDER_REMOVED, handler.getInfo());
         logger.debug("Deactivated resource provider {}", handler.getInfo());
     }
 
-    private void postOSGiEvent(final String topic, final ResourceProviderInfo info) {
+    /**
+     * Post a change event through the event admin
+     * @param event
+     */
+    private void postOSGiEvent(final ProviderEvent event) {
         final Dictionary<String, Object> eventProps = new Hashtable<String, Object>();
-        eventProps.put(SlingConstants.PROPERTY_PATH, info.getPath());
-        String pid = (String) info.getServiceReference().getProperty(Constants.SERVICE_PID);
-        if (pid == null) {
-            pid = (String) info.getServiceReference().getProperty(LegacyResourceProviderWhiteboard.ORIGINAL_SERVICE_PID);
+        eventProps.put(SlingConstants.PROPERTY_PATH, event.path);
+        if (event.pid != null) {
+            eventProps.put(Constants.SERVICE_PID, event.pid);
         }
-        if (pid != null) {
-            eventProps.put(Constants.SERVICE_PID, pid);
-        }
-        eventAdmin.postEvent(new Event(topic, eventProps));
+        eventAdmin.postEvent(new Event(event.isAdd ? SlingConstants.TOPIC_RESOURCE_PROVIDER_ADDED : SlingConstants.TOPIC_RESOURCE_PROVIDER_REMOVED,
+                eventProps));
     }
 
     /**
@@ -282,8 +297,9 @@ public class ResourceProviderTracker {
      * @param type The change type
      * @param info The resource provider
      */
-    private void postResourceProviderChange(ChangeType type, final ResourceProviderInfo info) {
-        ResourceChange change = new ResourceChange(type, info.getPath(), false, null, null, null);
+    private void postResourceProviderChange(final ProviderEvent event) {
+        final ResourceChange change = new ResourceChange(event.isAdd ? ChangeType.PROVIDER_ADDED : ChangeType.PROVIDER_REMOVED,
+                event.path, false, null, null, null);
         this.providerReporter.reportChanges(Collections.singletonList(change), false);
     }
 
@@ -361,4 +377,43 @@ public class ResourceProviderTracker {
                 reporterGenerator.create(handlerPath, new PathSet(excludedPaths)),
                 excludedPaths);
     }
+
+    private void postEvents(final List<ProviderEvent> events) {
+        if ( events.isEmpty() ) {
+            return;
+        }
+        final Thread t = new Thread(new Runnable() {
+
+            @Override
+            public void run() {
+                for(final ProviderEvent e : events) {
+                    postOSGiEvent(e);
+                    postResourceProviderChange(e);
+                    if ( e.pid != null ) {
+                        listener.providerChanged(e.pid);
+                    }
+                }
+            }
+        });
+        t.setName("Apache Sling Resource Provider Change Notifier");
+        t.setDaemon(true);
+
+        t.start();
+    }
+
+    private static final class ProviderEvent {
+        public final boolean isAdd;
+        public final String pid;
+        public final String path;
+
+        public ProviderEvent(final boolean isAdd, final ResourceProviderInfo info) {
+            this.isAdd = isAdd;
+            this.path = info.getPath();
+            String pid = (String) info.getServiceReference().getProperty(Constants.SERVICE_PID);
+            if (pid == null) {
+                pid = (String) info.getServiceReference().getProperty(LegacyResourceProviderWhiteboard.ORIGINAL_SERVICE_PID);
+            }
+            this.pid = pid;
+        }
+    }
 }

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java?rev=1711198&r1=1711197&r2=1711198&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ProviderHandlerTest.java Thu Oct 29 09:28:50 2015
@@ -32,6 +32,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
+import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
 import org.apache.sling.spi.resource.provider.ResolverContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -56,7 +57,7 @@ public class ProviderHandlerTest {
         final ResourceProvider<?> leaveProvider = Mockito.mock(ResourceProvider.class);
         Mockito.when(leaveProvider.getResource(Mockito.any(ResolverContext.class), Mockito.eq(servletpath), Mockito.any(ResourceContext.class), Mockito.any(Resource.class))).thenReturn(servletResource);
         ResourceProviderHandler h = createRPHandler(leaveProvider, "my-pid", 0, servletpath);
-        ResourceResolver resolver = new ResourceResolverImpl(new CommonResourceResolverFactoryImpl(new ResourceResolverFactoryActivator()), false, null, Arrays.asList(h));
+        ResourceResolver resolver = new ResourceResolverImpl(new CommonResourceResolverFactoryImpl(new ResourceResolverFactoryActivator()), false, null, new ResourceProviderStorage(Arrays.asList(h)));
 
         final Resource parent = resolver.getResource(ResourceUtil.getParent(servletpath));
         assertNotNull("Parent must be available", parent);

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java?rev=1711198&r1=1711197&r2=1711198&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceDecoratorTestBase.java Thu Oct 29 09:28:50 2015
@@ -37,6 +37,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.resourceresolver.impl.helper.ResourceDecoratorTracker;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
+import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
 import org.apache.sling.spi.resource.provider.JCRQueryProvider;
 import org.apache.sling.spi.resource.provider.ResolverContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
@@ -136,7 +137,7 @@ public abstract class ResourceDecoratorT
         };
 
         List<ResourceProviderHandler> list = Arrays.asList(MockedResourceResolverImplTest.createRPHandler(provider, "A-provider", 0L, "/"));
-        resolver = new ResourceResolverImpl(crf, false, null, list);
+        resolver = new ResourceResolverImpl(crf, false, null, new ResourceProviderStorage(list));
     }
 
     protected void assertExistent(Resource r, boolean existent) {

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java?rev=1711198&r1=1711197&r2=1711198&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceProviderEntryTest.java Thu Oct 29 09:28:50 2015
@@ -36,6 +36,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.resourceresolver.impl.providers.ResourceProviderHandler;
+import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
 import org.apache.sling.spi.resource.provider.ResolverContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -241,7 +242,8 @@ public class ResourceProviderEntryTest {
 
     private ResourceResolver getResolver() throws LoginException {
         if (providersBasedResolver == null) {
-            providersBasedResolver = new ResourceResolverImpl(new CommonResourceResolverFactoryImpl(new ResourceResolverFactoryActivator()), false, null, providers);
+            providersBasedResolver = new ResourceResolverImpl(new CommonResourceResolverFactoryImpl(new ResourceResolverFactoryActivator()), false, null,
+                    new ResourceProviderStorage(providers));
         }
         return providersBasedResolver;
     }

Modified: sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java?rev=1711198&r1=1711197&r2=1711198&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java (original)
+++ sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/ResourceResolverMangleNamespacesTest.java Thu Oct 29 09:28:50 2015
@@ -31,6 +31,7 @@ import javax.jcr.Session;
 import org.apache.commons.collections.IteratorUtils;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.resourceresolver.impl.providers.ResourceProviderStorage;
 import org.apache.sling.spi.resource.provider.ResolverContext;
 import org.apache.sling.spi.resource.provider.ResourceContext;
 import org.apache.sling.spi.resource.provider.ResourceProvider;
@@ -94,7 +95,8 @@ public class ResourceResolverMangleNames
 
         final CommonResourceResolverFactoryImpl fac = new CommonResourceResolverFactoryImpl(act);
 
-        rr = new ResourceResolverImpl(fac, false, null, Arrays.asList(MockedResourceResolverImplTest.createRPHandler(rp, "rp1", 0, "/")));
+        rr = new ResourceResolverImpl(fac, false, null,
+                new ResourceProviderStorage(Arrays.asList(MockedResourceResolverImplTest.createRPHandler(rp, "rp1", 0, "/"))));
     }
 
     @Test