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