You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2017/11/06 16:14:49 UTC

[sling-org-apache-sling-testing-sling-mock] branch release/1.x created (now 44f2981)

This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a change to branch release/1.x
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git.


      at 44f2981  import branch for 1.x from svn

This branch includes the following new commits:

     new 44f2981  import branch for 1.x from svn

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


-- 
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].

[sling-org-apache-sling-testing-sling-mock] 01/01: import branch for 1.x from svn

Posted by ss...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch release/1.x
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git

commit 44f2981b262f1719acc9fb8e7cfba4d5864f73ac
Author: sseifert <ss...@pro-vision.de>
AuthorDate: Mon Nov 6 17:14:09 2017 +0100

    import branch for 1.x from svn
---
 pom.xml                                            | 125 ++++++--------
 .../testing/mock/sling/MockAdapterManagerImpl.java | 181 +++++++++------------
 .../mock/sling/MockDynamicClassLoaderManager.java  |  33 ----
 .../testing/mock/sling/MockJcrSlingRepository.java |  14 +-
 .../apache/sling/testing/mock/sling/MockSling.java |  67 ++++++++
 .../sling/ResourceResolverFactoryInitializer.java  |  89 ++++++----
 .../testing/mock/sling/ResourceResolverType.java   |  14 ++
 .../sling/ThreadsafeMockAdapterManagerWrapper.java |   2 +-
 .../testing/mock/sling/builder/package-info.java   |   2 +-
 .../context/ContextResourceResolverFactory.java    |   7 +
 .../sling/context/ModelAdapterFactoryUtil.java     |  32 ++--
 .../mock/sling/context/SlingContextImpl.java       |  44 ++---
 .../testing/mock/sling/context/UniqueRoot.java     |  11 +-
 .../testing/mock/sling/context/package-info.java   |   2 +-
 .../testing/mock/sling/junit/SlingContext.java     |   3 +-
 .../mock/sling/junit/SlingContextBuilder.java      |   3 +-
 .../mock/sling/junit/SlingContextCallback.java     |   3 +-
 .../testing/mock/sling/junit/package-info.java     |   2 +-
 .../testing/mock/sling/loader/ContentLoader.java   |   2 +-
 .../testing/mock/sling/loader/package-info.java    |   2 +-
 .../sling/testing/mock/sling/package-info.java     |   2 +-
 .../mock/sling/services/MockMimeTypeService.java   |   6 +-
 .../testing/mock/sling/services/package-info.java  |   2 +-
 .../sling/servlet/MockSlingHttpServletRequest.java |  23 ++-
 .../testing/mock/sling/servlet/package-info.java   |   2 +-
 .../sling/testing/mock/sling/spi/package-info.java |   2 +-
 .../mock/sling/NodeTypeDefinitionScannerTest.java  |   1 +
 .../context/AbstractSlingContextImplTest.java      |   9 +-
 .../sling/context/NoResourceResolverTypeTest.java  |  18 +-
 .../testing/mock/sling/junit/SlingContextTest.java |  81 +--------
 .../sling/resource/AbstractJcrNamespaceTest.java   |   5 +-
 .../resource/AbstractJcrResourceResolverTest.java  |   6 +-
 .../AbstractSlingCrudResourceResolverTest.java     |  18 +-
 33 files changed, 392 insertions(+), 421 deletions(-)

diff --git a/pom.xml b/pom.xml
index f028e74..2f4503f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,12 +23,12 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>30</version>
+        <version>26</version>
         <relativePath />
     </parent>
 
     <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-    <version>2.2.15-SNAPSHOT</version>
+    <version>1.9.11-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
     <name>Apache Sling Testing Sling Mock</name>
@@ -45,7 +45,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
-            <version>2.3.4</version>
+            <version>1.9.8</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -63,70 +63,63 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlet-helpers</artifactId>
-            <version>1.1.2</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.osgi</artifactId>
-            <version>2.4.0</version>
+            <version>1.0.2</version>
             <scope>compile</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.models.api</artifactId>
-            <version>1.2.2</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.models.impl</artifactId>
-            <version>1.2.2</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
     
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.11.0</version>
+            <version>2.4.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.resourceresolver</artifactId>
-            <version>1.4.8</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.api</artifactId>
-            <version>2.3.0</version>
+            <version>2.2.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.resource</artifactId>
-            <version>2.7.4</version>
+            <version>2.3.6</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.api</artifactId>
-            <version>2.1.8</version>
+            <version>2.1.6</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.core</artifactId>
-            <version>2.0.36</version>
+            <version>2.0.26</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.mime</artifactId>
-            <version>2.1.8</version>
+            <version>2.1.4</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -143,26 +136,26 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.classloader</artifactId>
-            <version>1.3.2</version>
+            <artifactId>org.apache.sling.commons.osgi</artifactId>
+            <version>2.2.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.settings</artifactId>
-            <version>1.3.8</version>
+            <artifactId>org.apache.sling.commons.classloader</artifactId>
+            <version>1.3.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.i18n</artifactId>
-            <version>2.4.4</version>
+            <artifactId>org.apache.sling.settings</artifactId>
+            <version>1.2.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.adapter</artifactId>
-            <version>2.1.6</version>
+            <artifactId>org.apache.sling.i18n</artifactId>
+            <version>2.2.4</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -171,17 +164,11 @@
             <version>1.0.2</version>
             <scope>compile</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-api</artifactId>
-            <version>2.11.3</version>
-            <scope>compile</scope>
-        </dependency>
 
         <dependency>
             <groupId>commons-collections</groupId>
             <artifactId>commons-collections</artifactId>
-            <version>3.2.2</version>
+            <version>3.2.1</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -206,19 +193,21 @@
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
             <scope>compile</scope>
         </dependency>
     
         <dependency>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-atinject_1.0_spec</artifactId>
-          <version>1.0</version>
-          <scope>compile</scope>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+            <scope>compile</scope>
         </dependency>
     
         <dependency>
             <groupId>javax.jcr</groupId>
             <artifactId>jcr</artifactId>
+            <version>2.0</version>
             <scope>compile</scope>
         </dependency>
     
@@ -236,7 +225,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.logging-mock</artifactId>
-            <version>2.0.0</version>
+            <version>1.0.0</version>
             <scope>test</scope>
         </dependency>
 
@@ -247,62 +236,50 @@
     
           <!-- Publish test artifact -->
           <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-jar-plugin</artifactId>
-              <executions>
-                  <execution>
-                      <goals>
-                          <goal>test-jar</goal>
-                      </goals>
-                  </execution>
-              </executions>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-jar-plugin</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>test-jar</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+    
+          <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <extensions>true</extensions>
           </plugin>
     
           <plugin>
-              <groupId>org.apache.felix</groupId>
-              <artifactId>maven-bundle-plugin</artifactId>
-              <extensions>true</extensions>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-scr-plugin</artifactId>
           </plugin>
     
         </plugins>
     </build>
   
+    <!-- Profiles to run unit tests against different JCR Resource versions -->
     <profiles>
         <profile>
-            <id>latest-resource-bundles</id>
+            <id>jcr.resource-2.5.4</id>
             <dependencies>
                 <dependency>
                     <groupId>org.apache.sling</groupId>
                     <artifactId>org.apache.sling.api</artifactId>
-                    <version>2.16.2</version>
-                    <scope>compile</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.sling</groupId>
-                    <artifactId>org.apache.sling.resourceresolver</artifactId>
-                    <version>1.5.22</version>
+                    <version>2.9.0</version>
                     <scope>compile</scope>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.sling</groupId>
                     <artifactId>org.apache.sling.jcr.resource</artifactId>
-                    <version>3.0.0</version>
+                    <version>2.5.4</version>
                     <scope>compile</scope>
                 </dependency>
-                <dependency>
-                    <groupId>org.apache.jackrabbit</groupId>
-                    <artifactId>jackrabbit-api</artifactId>
-                    <version>2.13.4</version>
-                    <scope>provided</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.jackrabbit</groupId>
-                    <artifactId>oak-jcr</artifactId>
-                    <version>1.5.15</version>
-                    <scope>provided</scope>
-                </dependency>
             </dependencies>
         </profile>
     </profiles>
-  
+    
 </project>
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java
index b3f3825..889022b 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java
@@ -22,50 +22,41 @@ import static org.apache.sling.api.adapter.AdapterFactory.ADAPTABLE_CLASSES;
 import static org.apache.sling.api.adapter.AdapterFactory.ADAPTER_CLASSES;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import org.apache.sling.adapter.Adaption;
-import org.apache.sling.adapter.internal.AdapterFactoryDescriptor;
-import org.apache.sling.adapter.internal.AdapterFactoryDescriptorMap;
-import org.apache.sling.adapter.internal.AdaptionImpl;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.adapter.AdapterFactory;
 import org.apache.sling.api.adapter.AdapterManager;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.osgi.service.component.annotations.ReferencePolicy;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * This is a copy of org.apache.sling.adapter.internal.AdpaterManagerImpl from Sling Adapter 2.1.6,
+ * This is a copy of org.apache.sling.adapter.internal.AdpaterManagerImpl from Sling Adapter 2.1.0,
  * with all calls to SyntheticResource.setAdapterManager/unsetAdapterManager disabled, because this would
  * break the {@link ThreadsafeMockAdapterManagerWrapper} concept.
- * Additionally the reference to PackageAdmin is disabled.
  */
-@Component(immediate=true, service=AdapterManager.class,
-        property={Constants.SERVICE_DESCRIPTION + "=Sling Adapter Manager",
-                Constants.SERVICE_VENDOR + "=The Apache Software Foundation"},
-        reference = @Reference(name="AdapterFactory", service=AdapterFactory.class,
-                cardinality=ReferenceCardinality.MULTIPLE, policy=ReferencePolicy.DYNAMIC,
-                bind="bindAdapterFactory", unbind="unbindAdapterFactory")
-)
+@Component(immediate=true)
+@Service
+@Reference(name="AdapterFactory", referenceInterface=AdapterFactory.class,
+cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC)
 public class MockAdapterManagerImpl implements AdapterManager {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -108,15 +99,9 @@ public class MockAdapterManagerImpl implements AdapterManager {
     /**
      * The service tracker for the event admin
      */
-    @Reference(cardinality=ReferenceCardinality.OPTIONAL, policy=ReferencePolicy.DYNAMIC)
+    @Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY, policy=ReferencePolicy.DYNAMIC)
     private volatile EventAdmin eventAdmin;
 
-    // DISABLED IN THIS COPY OF CLASS
-    /*
-    @Reference
-    private PackageAdmin packageAdmin;
-    */
-
     // ---------- AdapterManager interface -------------------------------------
 
     /**
@@ -214,7 +199,7 @@ public class MockAdapterManagerImpl implements AdapterManager {
     }
 
     /**
-     * Unbind a adapter factory.
+     * Unbind an adapter factory.
      * @param reference Service reference
      */
     protected void unbindAdapterFactory(final ServiceReference reference) {
@@ -257,21 +242,6 @@ public class MockAdapterManagerImpl implements AdapterManager {
             return;
         }
 
-        // DISABLED IN THIS COPY OF CLASS
-        /*
-        for (String clazz : adaptables) {
-            if (!checkPackage(packageAdmin, clazz)) {
-                log.warn("Adaptable class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID));
-            }
-        }
-
-        for (String clazz : adapters) {
-            if (!checkPackage(packageAdmin, clazz)) {
-                log.warn("Adapter class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID));
-            }
-        }
-        */
-
         final AdapterFactoryDescriptor factoryDesc = new AdapterFactoryDescriptor(context,
                 reference, adapters);
 
@@ -292,51 +262,16 @@ public class MockAdapterManagerImpl implements AdapterManager {
         // clear the factory cache to force rebuild on next access
         this.factoryCache.clear();
 
-        // register adaption
-        final Dictionary<String, Object> props = new Hashtable<String, Object>();
-        props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables);
-        props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters);
-
-        ServiceRegistration adaptionRegistration = this.context.getBundleContext().registerService(
-                Adaption.class.getName(), AdaptionImpl.INSTANCE, props);
-        if (log.isDebugEnabled()) {
-            log.debug("Registered service {} with {} : {} and {} : {}", new Object[] { Adaption.class.getName(),
-                    SlingConstants.PROPERTY_ADAPTABLE_CLASSES, Arrays.toString(adaptables),
-                    SlingConstants.PROPERTY_ADAPTER_CLASSES, Arrays.toString(adapters) });
-        }
-        factoryDesc.setAdaption(adaptionRegistration);
-
         // send event
         final EventAdmin localEA = this.eventAdmin;
         if ( localEA != null ) {
+            final Dictionary<String, Object> props = new Hashtable<String, Object>();
+            props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables);
+            props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters);
             localEA.postEvent(new Event(SlingConstants.TOPIC_ADAPTER_FACTORY_ADDED,
                     props));
         }
     }
-    
-    static String getPackageName(String clazz) {
-        final int lastDot = clazz.lastIndexOf('.');
-        return lastDot <= 0 ? "" : clazz.substring(0, lastDot);
-    }
-
-    /**
-     * Check that the package containing the class is exported or is a java.*
-     * class.
-     * 
-     * @param packageAdmin the PackageAdmin service
-     * @param clazz the class name
-     * @return true if the package is exported
-     */
-    // DISABLED IN THIS COPY OF CLASS
-    /*
-    static boolean checkPackage(PackageAdmin packageAdmin, String clazz) {
-        final String packageName = getPackageName(clazz); 
-        if (packageName.startsWith("java.")) {
-            return true;
-        }
-        return packageAdmin.getExportedPackage(packageName) != null;
-    }
-    */
 
     /**
      * Unregisters the {@link AdapterFactory} referred to by the service
@@ -356,25 +291,13 @@ public class MockAdapterManagerImpl implements AdapterManager {
 
         boolean factoriesModified = false;
         AdapterFactoryDescriptorMap adfMap = null;
-
-        AdapterFactoryDescriptor removedDescriptor = null;
         for (final String adaptable : adaptables) {
             synchronized ( this.descriptors ) {
                 adfMap = this.descriptors.get(adaptable);
             }
             if (adfMap != null) {
                 synchronized ( adfMap ) {
-                    AdapterFactoryDescriptor factoryDesc = adfMap.remove(reference);
-                    if (factoryDesc != null) {
-                        factoriesModified = true;
-                        // A single ServiceReference should correspond to a single Adaption service being registered
-                        // Since the code paths above does not fully guarantee it though, let's keep this check in place
-                        if (removedDescriptor != null && removedDescriptor != factoryDesc) {
-                            log.error("When unregistering reference {} got duplicate service descriptors {} and {}. Unregistration of {} services may be incomplete.",
-                                    new Object[] { reference, removedDescriptor, factoryDesc, Adaption.class.getName()} );
-                        }
-                        removedDescriptor = factoryDesc;
-                    }
+                    factoriesModified |= (adfMap.remove(reference) != null);
                 }
             }
         }
@@ -385,16 +308,6 @@ public class MockAdapterManagerImpl implements AdapterManager {
             this.factoryCache.clear();
         }
 
-        // unregister adaption
-        if (removedDescriptor != null) {
-            removedDescriptor.getAdaption().unregister();
-            if (log.isDebugEnabled()) {
-                log.debug("Unregistered service {} with {} : {} and {} : {}", new Object[] { Adaption.class.getName(),
-                        SlingConstants.PROPERTY_ADAPTABLE_CLASSES, Arrays.toString(adaptables),
-                        SlingConstants.PROPERTY_ADAPTER_CLASSES, Arrays.toString(adapters) });
-            }
-        }
-
         // send event
         final EventAdmin localEA = this.eventAdmin;
         if ( localEA != null ) {
@@ -515,4 +428,64 @@ public class MockAdapterManagerImpl implements AdapterManager {
             }
         }
     }
+
+
+    /**
+     * The <code>AdapterFactoryDescriptor</code> is an entry in the
+     * {@link AdapterFactoryDescriptorMap} conveying the list of adapter (target)
+     * types and the respective {@link AdapterFactory}.
+     */
+    private static class AdapterFactoryDescriptor {
+
+        private volatile AdapterFactory factory;
+
+        private final String[] adapters;
+
+        private final ServiceReference reference;
+
+        private final ComponentContext context;
+
+        public AdapterFactoryDescriptor(
+                final ComponentContext context,
+                final ServiceReference reference,
+                final String[] adapters) {
+            this.reference = reference;
+            this.context = context;
+            this.adapters = adapters;
+        }
+
+        public AdapterFactory getFactory() {
+            if ( factory == null ) {
+                factory = (AdapterFactory) context.locateService(
+                        "AdapterFactory", reference);
+            }
+            return factory;
+        }
+
+        public String[] getAdapters() {
+            return adapters;
+        }
+    }
+
+    /**
+     * The <code>AdapterFactoryDescriptorMap</code> is a sorted map of
+     * {@link AdapterFactoryDescriptor} instances indexed (and ordered) by their
+     * {@link ServiceReference}. This map is used to organize the
+     * registered {@link org.apache.sling.api.adapter.AdapterFactory} services for
+     * a given adaptable type.
+     * <p>
+     * Each entry in the map is a {@link AdapterFactoryDescriptor} thus enabling the
+     * registration of multiple factories for the same (adaptable, adapter) type
+     * tuple. Of course only the first entry (this is the reason for having a sorted
+     * map) for such a given tuple is actually being used. If that first instance is
+     * removed the eventual second instance may actually be used instead.
+     */
+    private static class AdapterFactoryDescriptorMap extends
+            TreeMap<ServiceReference, AdapterFactoryDescriptor> {
+
+        private static final long serialVersionUID = 2L;
+
+    }
+
+    
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java b/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java
deleted file mode 100644
index 2ec7f15..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sling.testing.mock.sling;
-
-import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
-
-/**
- * Mock implementation of {@link DynamicClassLoaderManager}.
- */
-class MockDynamicClassLoaderManager implements DynamicClassLoaderManager {
-
-    @Override
-    public ClassLoader getDynamicClassLoader() {
-        return MockDynamicClassLoaderManager.class.getClassLoader();
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java
index e3073cd..48fd567 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java
@@ -26,16 +26,18 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
 
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.testing.mock.jcr.MockJcr;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
 
 /**
  * Mock {@link SlingRepository} implementation.
  */
-@Component(service = SlingRepository.class)
+@Component
+@Service(SlingRepository.class)
 public final class MockJcrSlingRepository implements SlingRepository {
 
     private Repository repository;
@@ -114,10 +116,4 @@ public final class MockJcrSlingRepository implements SlingRepository {
         return this.repository.login();
     }
 
-    @Override
-    public Session impersonateFromService(String subServiceName, Credentials credentials, String workspaceName)
-            throws LoginException, RepositoryException {
-        return this.repository.login(credentials);
-    }
-
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
index fdc222e..b53faae 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
@@ -26,6 +26,7 @@ import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse;
 import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter;
@@ -53,6 +54,18 @@ public final class MockSling {
 
     /**
      * Creates new sling resource resolver factory instance.
+     * @param type Type of underlying repository.
+     * @return Resource resolver factory instance
+     * @deprecated Please use {@link #newResourceResolverFactory(ResourceResolverType, BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolverFactory newResourceResolverFactory(final ResourceResolverType type) {
+        return newResourceResolverFactory(type, MockOsgi.newBundleContext());
+    }
+    
+    /**
+     * Creates new sling resource resolver factory instance.
      * @param bundleContext Bundle context
      * @return Resource resolver factory instance
      */
@@ -106,6 +119,47 @@ public final class MockSling {
     }
 
     /**
+     * Creates new sling resource resolver factory instance using
+     * {@link #DEFAULT_RESOURCERESOLVER_TYPE}.
+     * @return Resource resolver factory instance
+     * @deprecated Please use {@link #newResourceResolverFactory(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolverFactory newResourceResolverFactory() {
+        return newResourceResolverFactory(DEFAULT_RESOURCERESOLVER_TYPE);
+    }
+
+    /**
+     * Creates new sling resource resolver instance.
+     * @param type Type of underlying repository.
+     * @return Resource resolver instance
+     * @deprecated Please use {@link #newResourceResolver(ResourceResolverType, BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolver newResourceResolver(final ResourceResolverType type) {
+        ResourceResolverFactory factory = newResourceResolverFactory(type);
+        try {
+            return factory.getAdministrativeResourceResolver(null);
+        } catch (LoginException ex) {
+            throw new RuntimeException("Mock resource resolver factory implementation seems to require login.", ex);
+        }
+    }
+
+    /**
+     * Creates new sling resource resolver instance using
+     * {@link #DEFAULT_RESOURCERESOLVER_TYPE}.
+     * @return Resource resolver instance
+     * @deprecated Please use {@link #newResourceResolver(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolver newResourceResolver() {
+        return newResourceResolver(DEFAULT_RESOURCERESOLVER_TYPE);
+    }
+
+    /**
      * Creates new sling resource resolver instance.
      * @param type Type of underlying repository.
      * @param bundleContext Bundle context
@@ -145,6 +199,19 @@ public final class MockSling {
     /**
      * Creates a new sling script helper instance using
      * {@link #DEFAULT_RESOURCERESOLVER_TYPE} for the resource resolver.
+     * @return Sling script helper instance
+     * @deprecated Please use {@link #newSlingScriptHelper(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static SlingScriptHelper newSlingScriptHelper() {
+        BundleContext bundleContext = MockOsgi.newBundleContext();
+        return newSlingScriptHelper(bundleContext);
+    }
+
+    /**
+     * Creates a new sling script helper instance using
+     * {@link #DEFAULT_RESOURCERESOLVER_TYPE} for the resource resolver.
      * @param bundleContext Bundle context
      * @return Sling script helper instance
      */
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java
index 5b64c58..dd8b69e 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java
@@ -23,16 +23,18 @@ import java.util.Hashtable;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.query.Query;
 
+import org.apache.sling.api.resource.QueriableResourceProvider;
+import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceProviderFactory;
 import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.jcr.api.SlingRepository;
-import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider;
+import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory;
 import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
 import org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator;
 import org.apache.sling.serviceusermapping.ServiceUserMapper;
 import org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl;
-import org.apache.sling.spi.resource.provider.ResourceProvider;
 import org.apache.sling.testing.mock.osgi.MockEventAdmin;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.osgi.framework.BundleContext;
@@ -63,16 +65,16 @@ class ResourceResolverFactoryInitializer {
             // register JCR node types found in classpath
             registerJcrNodeTypes(slingRepository, nodeTypeMode);
             
-            // initialize JCR resource provider
-            ensureJcrResourceProviderDependencies(bundleContext);
-            initializeJcrResourceProvider(bundleContext);
+            // initialize JCR resource provider factory
+            ensureJcrResourceProviderFactoryDependencies(bundleContext);
+            initializeJcrResourceProviderFactory(bundleContext);
         }
         
         // initialize resource resolver factory activator
         ensureResourceResolverFactoryActivatorDependencies(bundleContext);
         initializeResourceResolverFactoryActivator(bundleContext);
 
-        ServiceReference<ResourceResolverFactory> factoryRef = bundleContext.getServiceReference(ResourceResolverFactory.class);
+        ServiceReference factoryRef = bundleContext.getServiceReference(ResourceResolverFactory.class.getName());
         if (factoryRef == null) {
             throw new IllegalStateException("Unable to get ResourceResolverFactory.");
         }
@@ -80,34 +82,29 @@ class ResourceResolverFactoryInitializer {
     }
     
     /**
-     * Ensure dependencies for JcrResourceProvider are present.
+     * Ensure dependencies for JcrResourceProviderFactory are present.
      * @param bundleContext Bundle context
      */
-    @SuppressWarnings("unchecked")
-    private static void ensureJcrResourceProviderDependencies(BundleContext bundleContext) {
-        if (bundleContext.getServiceReference(DynamicClassLoaderManager.class) == null) {
-            bundleContext.registerService(DynamicClassLoaderManager.class, new MockDynamicClassLoaderManager(), null);
-        }
-        
-        try {
-            Class pathMapperClass = Class.forName("org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper");
-            registerServiceIfNotPresent(bundleContext, pathMapperClass, pathMapperClass.newInstance());
-        }
-        catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
-            // ignore - service was removed in org.apache.sling.jcr.resource 3.0.0
-        }
+    private static void ensureJcrResourceProviderFactoryDependencies(BundleContext bundleContext) {
+        // setup PathMapper which is a mandatory service for JcrProviderFactory (since org.apache.sling.jcr.resource 2.5.4)
+        // use reflection to not depend on it if running with older version of org.apache.sling.jcr.resource
+        registerServiceIfFoundInClasspath(bundleContext, "org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper");
     }
  
     /**
-     * Initialize JCR resource provider.
+     * Initialize JCR resource provider factory.
      * @param bundleContext Bundle context
      */
-    private static void initializeJcrResourceProvider(BundleContext bundleContext) {
+    @SuppressWarnings("deprecation")
+    private static void initializeJcrResourceProviderFactory(BundleContext bundleContext) {
         Dictionary<String, Object> config = new Hashtable<String, Object>();
-        JcrResourceProvider provider = new JcrResourceProvider();
-        MockOsgi.injectServices(provider, bundleContext);
-        MockOsgi.activate(provider, bundleContext, config);
-        bundleContext.registerService(ResourceProvider.class, provider, config);
+        config.put(ResourceProvider.ROOTS, new String[] { "/" });
+        config.put(QueriableResourceProvider.LANGUAGES, new String[] { Query.XPATH, Query.SQL, Query.JCR_SQL2 });
+
+        JcrResourceProviderFactory factory = new JcrResourceProviderFactory();
+        MockOsgi.injectServices(factory, bundleContext);
+        MockOsgi.activate(factory, bundleContext, config);
+        bundleContext.registerService(ResourceProviderFactory.class.getName(), factory, config);
     }
     
     /**
@@ -129,9 +126,8 @@ class ResourceResolverFactoryInitializer {
      */
     private static void initializeResourceResolverFactoryActivator(BundleContext bundleContext) {
         Dictionary<String, Object> config = new Hashtable<String, Object>();
-        // do not required a specific resource provider (otherwise "NONE" will not work)
-        config.put("resource.resolver.required.providers", "");
-        config.put("resource.resolver.required.providernames", "");
+        config.put("resource.resolver.required.providers", new String[0]);
+
         ResourceResolverFactoryActivator activator = new ResourceResolverFactoryActivator();
         MockOsgi.injectServices(activator, bundleContext);
         MockOsgi.activate(activator, bundleContext, config);
@@ -145,11 +141,10 @@ class ResourceResolverFactoryInitializer {
      * @param serviceClass Service class
      * @param instance Service instance
      */
-    private static <T> void registerServiceIfNotPresent(BundleContext bundleContext, Class<T> serviceClass, 
-            T instance) {
+    private static void registerServiceIfNotPresent(BundleContext bundleContext, Class<?> serviceClass, 
+            Object instance) {
         registerServiceIfNotPresent(bundleContext, serviceClass, instance, new Hashtable<String, Object>());
     }
-    
     /**
      * Registers a service if the service class is found in classpath,
      * and if no service with this class is already registered.
@@ -158,12 +153,34 @@ class ResourceResolverFactoryInitializer {
      * @param instance Service instance
      * @param config OSGi config
      */
-    private static <T> void registerServiceIfNotPresent(BundleContext bundleContext, Class<T> serviceClass, 
-            T instance, Dictionary<String, Object> config) {
+    private static void registerServiceIfNotPresent(BundleContext bundleContext, Class<?> serviceClass, 
+            Object instance, Dictionary<String, Object> config) {
         if (bundleContext.getServiceReference(serviceClass.getName()) == null) {
             MockOsgi.injectServices(instance, bundleContext);
             MockOsgi.activate(instance, bundleContext, config);
-            bundleContext.registerService(serviceClass, instance, config);
+            bundleContext.registerService(serviceClass.getName(), instance, config);
+        }
+    }
+    
+    /**
+     * Registers a service if the service class is found in classpath,
+     * and if no service with this class is already registered.
+     * @param className Service class name
+     */
+    private static void registerServiceIfFoundInClasspath(BundleContext bundleContext, String className) {
+        try {
+            Class<?> serviceClass = Class.forName(className);
+            Object instance = serviceClass.newInstance();
+            registerServiceIfNotPresent(bundleContext, serviceClass, instance);
+        }
+        catch (ClassNotFoundException ex) {
+            // skip service registration
+        }
+        catch (InstantiationException e) {
+            // skip service registration
+        }
+        catch (IllegalAccessException e) {
+            // skip service registration
         }
     }
     
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java
index f0d2b1d..e9d9b33 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java
@@ -54,6 +54,20 @@ public enum ResourceResolverType {
     JCR_MOCK(MockJcrResourceResolverAdapter.class.getName(), null, NodeTypeMode.NAMESPACES_ONLY),
 
     /**
+     * Uses a real JCR Jackrabbit repository.
+     * <ul>
+     * <li>Uses the real Sling Resource Resolver and JCR Resource mapping
+     * implementation.</li>
+     * <li>The JCR repository is started on first access, this may take some
+     * seconds.</li>
+     * <li>Beware: The repository is not cleared for each unit test, so make
+     * sure us use a unique node path for each unit test.</li>
+     * </ul>
+     */
+    JCR_JACKRABBIT("org.apache.sling.testing.mock.sling.jackrabbit.JackrabbitMockResourceResolverAdapter",
+            "org.apache.sling:org.apache.sling.testing.sling-mock-jackrabbit", NodeTypeMode.NODETYPES_REQUIRED),
+
+    /**
      * Uses a real JCR Jackrabbit Oak repository.
      * <ul>
      * <li>Uses the real Sling Resource Resolver and JCR Resource mapping
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java b/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java
index 428bd4c..d9c21e9 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java
@@ -87,7 +87,7 @@ class ThreadsafeMockAdapterManagerWrapper implements AdapterManager {
             if (bundleContext == null) {
                 setBundleContext(MockOsgi.newBundleContext());
             }
-            ServiceReference<AdapterManager> serviceReference = bundleContext.getServiceReference(AdapterManager.class);
+            ServiceReference serviceReference = bundleContext.getServiceReference(AdapterManager.class.getName());
             if (serviceReference != null) {
                 return (AdapterManager)bundleContext.getService(serviceReference);
             }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java
index e8a9066..3c94555 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Content builder for creating test content.
  */
-@org.osgi.annotation.versioning.Version("1.1")
+@aQute.bnd.annotation.Version("1.1")
 package org.apache.sling.testing.mock.sling.builder;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
index 65cf6d2..2448e07 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
@@ -48,6 +48,9 @@ final class ContextResourceResolverFactory {
             case JCR_MOCK:
                 initializeJcrMock(factory);
                 break;
+            case JCR_JACKRABBIT:
+                initializeJcrJackrabbit(factory);
+                break;
             case JCR_OAK:
                 initializeJcrOak(factory);
                 break;
@@ -71,6 +74,10 @@ final class ContextResourceResolverFactory {
         // nothing to do
     }
 
+    private static void initializeJcrJackrabbit(ResourceResolverFactory factory) {
+        // register sling node types?
+    }
+
     private static void initializeJcrOak(ResourceResolverFactory factory) {
         // register sling node types?
     }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java
index 7ff2195..b47399c 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Dictionary;
@@ -189,6 +188,7 @@ final class ModelAdapterFactoryUtil {
     }
 
 
+    @SuppressWarnings("unused")
     private static class RegisterModelsBundle implements Bundle {
         
         private static final String MAGIC_STRING = "MOCKS-YOU-KNOW-WHAT-TO-SCAN";
@@ -218,14 +218,14 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public Dictionary<String,String> getHeaders() {
+        public Dictionary getHeaders() {
             Dictionary<String, String> headers = new Hashtable<String, String>();
             headers.put(PACKAGE_HEADER, MAGIC_STRING);
             return headers;
         }
 
         @Override
-        public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
+        public Enumeration findEntries(String path, String filePattern, boolean recurse) {
             Vector<URL> urls = new Vector<URL>(); // NOPMD
             if (packageNames != null) {
                 urls.addAll(getModelClassUrlsForPackages(packageNames));
@@ -237,7 +237,7 @@ final class ModelAdapterFactoryUtil {
         }
         
         @Override
-        public Class<?> loadClass(String name) throws ClassNotFoundException {
+        public Class loadClass(String name) throws ClassNotFoundException {
             return getClass().getClassLoader().loadClass(name);
         }
 
@@ -292,12 +292,12 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public ServiceReference<?>[] getRegisteredServices() { // NOPMD
+        public ServiceReference[] getRegisteredServices() { // NOPMD
             return null;
         }
 
         @Override
-        public ServiceReference<?>[] getServicesInUse() { // NOPMD
+        public ServiceReference[] getServicesInUse() { // NOPMD
             return null;
         }
 
@@ -312,7 +312,7 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public Dictionary<String,String> getHeaders(String locale) {
+        public Dictionary getHeaders(String locale) {
             return null;
         }
 
@@ -322,12 +322,12 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public Enumeration<URL> getResources(String name) throws IOException {
+        public Enumeration getResources(String name) throws IOException {
             return null;
         }
 
         @Override
-        public Enumeration<String> getEntryPaths(String path) {
+        public Enumeration getEntryPaths(String path) {
             return null;
         }
 
@@ -341,31 +341,31 @@ final class ModelAdapterFactoryUtil {
             return 0;
         }
 
-        @Override
-        public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+        // this is part of org.osgi 4.2.0
+        public Map getSignerCertificates(int signersType) {
             return null;
         }
 
-        @Override
+        // this is part of org.osgi 4.2.0
         public Version getVersion() {
             return null;
         }
 
-        @Override
+        // this is part of osgi 5/6
         public int compareTo(Bundle o) {
             return 0;
         }
 
-        @Override
+        // this is part of osgi 5/6
         public <A> A adapt(Class<A> type) {
             return null;
         }
 
-        @Override
+        // this is part of osgi 5/6
         public File getDataFile(String filename) {
             return null;
         }
-        
+
     }
 
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
index 6d4fa7c..e10a24c 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
@@ -50,14 +50,14 @@ import org.apache.sling.testing.mock.sling.services.MockSlingSettingService;
 import org.apache.sling.testing.mock.sling.servlet.MockRequestPathInfo;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse;
-import org.osgi.annotation.versioning.ConsumerType;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
+import aQute.bnd.annotation.ConsumerType;
+
 /**
  * Defines Sling context objects with lazy initialization. Should not be used
  * directly but via the {@link org.apache.sling.testing.mock.sling.junit.SlingContext} JUnit
@@ -108,12 +108,7 @@ public class SlingContextImpl extends OsgiContextImpl {
             MockOsgi.setConfigForPid(bundleContext(), RESOURCERESOLVERFACTORYACTIVATOR_PID, this.resourceResolverFactoryActivatorProps);
         }
         
-        // automatically register resource resolver factory when ResourceResolverType != NONE,
-        // so the ResourceResolverFactory is available as OSGi service immediately
-        if (resourceResolverType != ResourceResolverType.NONE) {
-            resourceResolverFactory();
-        }
-        
+        this.resourceResolverFactory = newResourceResolverFactory();
         registerDefaultServices();
     }
     
@@ -124,13 +119,6 @@ public class SlingContextImpl extends OsgiContextImpl {
     protected ResourceResolverFactory newResourceResolverFactory() {
         return ContextResourceResolverFactory.get(this.resourceResolverType, bundleContext());
     }
-    
-    private ResourceResolverFactory resourceResolverFactory() {
-        if (this.resourceResolverFactory == null) {
-            this.resourceResolverFactory = newResourceResolverFactory();
-        }
-        return this.resourceResolverFactory;
-    }
 
     /**
      * Default services that should be available for every unit test
@@ -173,7 +161,14 @@ public class SlingContextImpl extends OsgiContextImpl {
             try {
                 Class<?> clazz = Class.forName(className);
                 registerInjectActivateService(clazz.newInstance());
-            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+            }
+            catch (ClassNotFoundException ex) {
+                // ignore - probably not the latest sling models impl version
+            }
+            catch (InstantiationException e) {
+                // ignore - probably not the latest sling models impl version
+            }
+            catch (IllegalAccessException e) {
                 // ignore - probably not the latest sling models impl version
             }
         }
@@ -217,7 +212,6 @@ public class SlingContextImpl extends OsgiContextImpl {
         this.contentBuilder = null;
         this.resourceBuilder = null;
         this.uniqueRoot = null;
-        this.resourceResolverFactory = null;
         
         super.tearDown();
     }
@@ -228,16 +222,14 @@ public class SlingContextImpl extends OsgiContextImpl {
     public final ResourceResolverType resourceResolverType() {
         return this.resourceResolverType;
     }
-    
+
     /**
-     * Returns the singleton resource resolver bound to this context.
-     * It is automatically closed after the test.
      * @return Resource resolver
      */
     public final ResourceResolver resourceResolver() {
         if (this.resourceResolver == null) {
             try {
-                this.resourceResolver = this.resourceResolverFactory().getAdministrativeResourceResolver(null);
+                this.resourceResolver = this.resourceResolverFactory.getAdministrativeResourceResolver(null);
             } catch (LoginException ex) {
                 throw new RuntimeException("Creating resource resolver failed.", ex);
             }
@@ -317,9 +309,6 @@ public class SlingContextImpl extends OsgiContextImpl {
     }
 
     /**
-     * Creates a {@link ContentBuilder} object for easily creating test content.
-     * This API was part of Sling Mocks since version 1.x.
-     * You can use alternatively the {@link #build()} method and use the {@link ResourceBuilder} API.
      * @return Content builder for building test content
      */
     public ContentBuilder create() {
@@ -416,9 +405,9 @@ public class SlingContextImpl extends OsgiContextImpl {
      */
     public final void runMode(String... runModes) {
         Set<String> newRunModes = ImmutableSet.<String> builder().add(runModes).build();
-        ServiceReference<SlingSettingsService> ref = bundleContext().getServiceReference(SlingSettingsService.class);
+        ServiceReference ref = bundleContext().getServiceReference(SlingSettingsService.class.getName());
         if (ref != null) {
-            MockSlingSettingService slingSettings = (MockSlingSettingService)bundleContext().getService(ref);
+            MockSlingSettingService slingSettings = (MockSlingSettingService) bundleContext().getService(ref);
             slingSettings.setRunModes(newRunModes);
         }
     }
@@ -478,9 +467,6 @@ public class SlingContextImpl extends OsgiContextImpl {
                 .put(AdapterFactory.ADAPTER_CLASSES, new String[] {
                     adapterClass.getName()
                 })
-                // make sure this overlay has higher ranking than other adapter factories
-                // normally we should use Integer.MAX_VALUE for this - but due to SLING-7194 prefers lowest-ranking services first
-                .put(Constants.SERVICE_RANKING, Integer.MIN_VALUE)
                 .build());
     }
 
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java b/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java
index f5f68d3..cc00d75 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java
@@ -18,18 +18,21 @@
  */
 package org.apache.sling.testing.mock.sling.context;
 
+import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_ORDERED_FOLDER;
+
 import java.util.UUID;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceUtil;
-import org.osgi.annotation.versioning.ConsumerType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableMap;
 
+import aQute.bnd.annotation.ConsumerType;
+
 /**
  * Manages unique root paths in JCR repository.
  * This is important for resource resolver types like JCR_JACKRABBIT  
@@ -79,7 +82,7 @@ public class UniqueRoot {
      */
     public final String content() {
         if (contentRoot == null) {
-            contentRoot = getOrCreateResource("/content/" + uniquePathPart, "sling:OrderedFolder");
+            contentRoot = getOrCreateResource("/content/" + uniquePathPart, NT_SLING_ORDERED_FOLDER);
         }
         return contentRoot.getPath();
     }
@@ -91,7 +94,7 @@ public class UniqueRoot {
      */
     public final String apps() {
         if (appsRoot == null) {
-            appsRoot = getOrCreateResource("/apps/" + uniquePathPart, "sling:OrderedFolder");
+            appsRoot = getOrCreateResource("/apps/" + uniquePathPart, NT_SLING_ORDERED_FOLDER);
         }
         return appsRoot.getPath();
     }
@@ -103,7 +106,7 @@ public class UniqueRoot {
      */
     public final String libs() {
         if (libsRoot == null) {
-            libsRoot = getOrCreateResource("/libs/" + uniquePathPart, "sling:OrderedFolder");
+            libsRoot = getOrCreateResource("/libs/" + uniquePathPart, NT_SLING_ORDERED_FOLDER);
         }
         return libsRoot.getPath();
     }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java
index 36a2859..cf0963d 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Sling context implementation for unit tests.
  */
-@org.osgi.annotation.versioning.Version("3.5")
+@aQute.bnd.annotation.Version("3.5")
 package org.apache.sling.testing.mock.sling.context;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
index bcd5da5..52aa2ff 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
@@ -29,7 +29,8 @@ import org.junit.rules.ExternalResource;
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
-import org.osgi.annotation.versioning.ProviderType;
+
+import aQute.bnd.annotation.ProviderType;
 
 /**
  * JUnit rule for setting up and tearing down Sling context objects for unit tests.
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
index b9ca1c4..37780dd 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
@@ -25,7 +25,8 @@ import org.apache.sling.testing.mock.osgi.context.ContextPlugin;
 import org.apache.sling.testing.mock.osgi.context.ContextPlugins;
 import org.apache.sling.testing.mock.osgi.context.OsgiContextImpl;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
-import org.osgi.annotation.versioning.ProviderType;
+
+import aQute.bnd.annotation.ProviderType;
 
 /**
  * Builder class for creating {@link SlingContext} instances with different sets of parameters.
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
index 79343c3..d4fc9c4 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
@@ -19,7 +19,8 @@
 package org.apache.sling.testing.mock.sling.junit;
 
 import org.apache.sling.testing.mock.osgi.context.ContextCallback;
-import org.osgi.annotation.versioning.ConsumerType;
+
+import aQute.bnd.annotation.ConsumerType;
 
 /**
  * Callback interface for application-specific setup and teardown operations to
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
index a998c8f..dd040c1 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Rule for providing easy access to Sling context in JUnit tests.
  */
-@org.osgi.annotation.versioning.Version("4.1")
+@aQute.bnd.annotation.Version("4.1")
 package org.apache.sling.testing.mock.sling.junit;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java b/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
index f62a1f1..751ab55 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
@@ -458,7 +458,7 @@ public final class ContentLoader {
         for (String name : names) {
             String fileExtension = StringUtils.substringAfterLast(name, ".");
             if (bundleContext != null && StringUtils.isNotEmpty(fileExtension)) {
-                ServiceReference<MimeTypeService> ref = bundleContext.getServiceReference(MimeTypeService.class);
+                ServiceReference ref = bundleContext.getServiceReference(MimeTypeService.class.getName());
                 if (ref != null) {
                     MimeTypeService mimeTypeService = (MimeTypeService)bundleContext.getService(ref);
                     mimeType = mimeTypeService.getMimeType(fileExtension);
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java
index 92b8da5..0851487 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Helpers for importing test content into the mocked repositories / resource hierarchies.
  */
-@org.osgi.annotation.versioning.Version("1.1")
+@aQute.bnd.annotation.Version("1.1")
 package org.apache.sling.testing.mock.sling.loader;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
index c0dc58f..85ce5c4 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Sling APIs.
  */
-@org.osgi.annotation.versioning.Version("3.0")
+@aQute.bnd.annotation.Version("1.5")
 package org.apache.sling.testing.mock.sling;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java b/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java
index a13ffa3..fbc6fb7 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java
@@ -21,16 +21,18 @@ package org.apache.sling.testing.mock.sling.services;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.mime.MimeTypeService;
 import org.apache.sling.commons.mime.internal.MimeTypeServiceImpl;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Component;
 
 /**
  * Mock {@link MimeTypeService} implementation.
  */
-@Component(service = MimeTypeService.class)
+@Component(inherit = false)
+@Service(MimeTypeService.class)
 public final class MockMimeTypeService extends MimeTypeServiceImpl {
 
     private boolean initialized;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java
index 37315a7..e919159 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mocks for selected Sling services.
  */
-@org.osgi.annotation.versioning.Version("2.0.1")
+@aQute.bnd.annotation.Version("2.0")
 package org.apache.sling.testing.mock.sling.services;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
index 798ad02..a5afbe2 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
@@ -23,6 +23,7 @@ import java.util.ResourceBundle;
 
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.i18n.ResourceBundleProvider;
+import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.sling.MockSling;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -36,6 +37,16 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers
 
     /**
      * Instantiate with default resource resolver
+     * @deprecated Please use {@link #MockSlingHttpServletRequest(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public MockSlingHttpServletRequest() {
+        this(MockOsgi.newBundleContext());
+    }
+
+    /**
+     * Instantiate with default resource resolver
      * @param bundleContext Bundle context
      */
     public MockSlingHttpServletRequest(BundleContext bundleContext) {
@@ -44,6 +55,16 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers
 
     /**
      * @param resourceResolver Resource resolver
+     * @deprecated Please use {@link #MockSlingHttpServletRequest(ResourceResolver, BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public MockSlingHttpServletRequest(ResourceResolver resourceResolver) {
+        this(resourceResolver, MockOsgi.newBundleContext());
+    }
+
+    /**
+     * @param resourceResolver Resource resolver
      * @param bundleContext Bundle context
      */
     public MockSlingHttpServletRequest(ResourceResolver resourceResolver, BundleContext bundleContext) {
@@ -63,7 +84,7 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers
     public ResourceBundle getResourceBundle(String baseName, Locale locale) {
         // check of ResourceBundleProvider is registered in mock OSGI context
         ResourceBundle resourceBundle = null;
-        ServiceReference<ResourceBundleProvider> serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class);
+        ServiceReference serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class.getName());
         if (serviceReference != null) {
             ResourceBundleProvider provider = (ResourceBundleProvider)bundleContext.getService(serviceReference);
             resourceBundle = provider.getResourceBundle(baseName, locale);
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
index 4d35479..0408710 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Servlet-related Sling APIs.
  */
-@org.osgi.annotation.versioning.Version("3.0")
+@aQute.bnd.annotation.Version("2.0")
 package org.apache.sling.testing.mock.sling.servlet;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java
index 99975db..0316d03 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java
@@ -19,5 +19,5 @@
 /**
  * SPI for hooking in alternative resource type adapter implementations.
  */
-@org.osgi.annotation.versioning.Version("1.0")
+@aQute.bnd.annotation.Version("1.0")
 package org.apache.sling.testing.mock.sling.spi;
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java b/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java
index 032129b..1b1f888 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.List;
 
+import org.apache.sling.testing.mock.sling.NodeTypeDefinitionScanner;
 import org.junit.Test;
 
 
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java b/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
index 4c2d13b..6299dfb 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
@@ -48,9 +48,6 @@ public abstract class AbstractSlingContextImplTest {
 
     @Before
     public void setUp() throws Exception {
-        // make sure ResourceResolverFactory is available immediately and not lazily
-        assertEquals(1, context.getServices(ResourceResolverFactory.class, null).length);
-
         context.addModelsForPackage("org.apache.sling.testing.mock.sling.context.models");
         
         ContentLoader contentLoader = this.context.load();
@@ -141,4 +138,10 @@ public abstract class AbstractSlingContextImplTest {
         assertTrue(newRunModes.contains("mode2"));
     }
     
+    @Test
+    public void testResourceResolverFactory() {
+        ResourceResolverFactory[] factories = context.getServices(ResourceResolverFactory.class, null);
+        assertEquals(1, factories.length);
+    }
+
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java b/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java
index 5af4d3e..23369ea 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java
@@ -18,37 +18,23 @@
  */
 package org.apache.sling.testing.mock.sling.context;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
 
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.SyntheticResource;
-import org.apache.sling.spi.resource.provider.ResourceProvider;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
 
-@RunWith(MockitoJUnitRunner.class)
 public class NoResourceResolverTypeTest {
 
     @Rule
     public SlingContext context = new SlingContext(ResourceResolverType.NONE);
     
-    @Mock
-    private ResourceProvider<?> resourceProvider;
-    
     @Test
     public void testRoot() {
-        // resgister dummy resource provider because otherwise ResourceResolverFactory get's not activated
-        // with lates sling resource resolver implementation
-        context.registerService(ResourceProvider.class, resourceProvider,
-                ResourceProvider.PROPERTY_ROOT, "/");
-        
         Resource root = context.resourceResolver().getResource("/");
-        assertTrue(root instanceof SyntheticResource);
+        assertNull(root);
     }
     
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
index 8caef09..ead89a6 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
@@ -24,10 +24,9 @@ import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import org.apache.sling.api.adapter.AdapterFactory;
-import org.apache.sling.api.adapter.SlingAdaptable;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.junit.Before;
 import org.junit.Rule;
@@ -47,16 +46,18 @@ public class SlingContextTest {
     private final SlingContextCallback contextAfterTeardown = mock(SlingContextCallback.class);
 
     // Run all unit tests for each resource resolver types listed here
+    @SuppressWarnings("unchecked")
     @Rule
     public SlingContext context = new SlingContextBuilder(ResourceResolverType.JCR_MOCK)
         .beforeSetUp(contextBeforeSetup)
         .afterSetUp(contextAfterSetup)
         .beforeTearDown(contextBeforeTeardown)
         .afterTearDown(contextAfterTeardown)
-        .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of(
-                "resource.resolver.searchpath", new String[] {"/apps","/libs","/testpath"},
-                "resource.resolver.mapping", new String[] {"/:/", "/content/test/</"}
-                ))
+        .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of("resource.resolver.searchpath", new String[] {
+            "/apps",
+            "/libs",
+            "/testpath",
+        }))
         .build();
 
     @Before
@@ -109,33 +110,6 @@ public class SlingContextTest {
     }
 
     @Test
-    public void testRegisterAdapterOverlayStatic() {
-        prepareInitialAdapterFactory();
-        
-        // register overlay adapter with static adaption
-        context.registerAdapter(TestAdaptable.class, String.class, "static-adaption");
-
-        // test overlay adapter with static adaption
-        assertEquals("static-adaption", new TestAdaptable("testMessage2").adaptTo(String.class));
-    }
-
-    @Test
-    public void testRegisterAdapterOverlayDynamic() {
-        prepareInitialAdapterFactory();
-        
-        // register overlay adapter with dynamic adaption
-        context.registerAdapter(TestAdaptable.class, String.class, new Function<TestAdaptable, String>() {
-            @Override
-            public String apply(TestAdaptable input) {
-                return input.getMessage() + "-dynamic";
-            }
-        });
-
-        // test overlay adapter with dynamic adaption
-        assertEquals("testMessage3-dynamic", new TestAdaptable("testMessage3").adaptTo(String.class));
-    }
-    
-    @Test
     public void testResourceBuilder() {
         
         context.build().resource("/test1", "prop1", "value1")
@@ -145,48 +119,9 @@ public class SlingContextTest {
         
         Resource test1 = context.resourceResolver().getResource("/test1");
         assertNotNull(test1);
-        assertEquals("value1", test1.getValueMap().get("prop1", String.class));
+        assertEquals("value1", ResourceUtil.getValueMap(test1).get("prop1", String.class));
         assertNotNull(test1.getChild("a"));
         assertNotNull(test1.getChild("b"));
     }
-    
-    @Test
-    public void testUrlMapping() {
-        assertEquals("/foo", context.resourceResolver().map("/content/test/foo"));
-    }
-    
-    
-    private void prepareInitialAdapterFactory() {
-        // register "traditional" adapter factory without specific service ranking
-        AdapterFactory adapterFactory = new AdapterFactory() {
-            @SuppressWarnings("unchecked")
-            @Override
-            public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
-                return (AdapterType)(((TestAdaptable)adaptable).getMessage() + "-initial");
-            }
-        };
-        context.registerService(AdapterFactory.class, adapterFactory, ImmutableMap.<String, Object>builder()
-                .put(AdapterFactory.ADAPTABLE_CLASSES, new String[] { TestAdaptable.class.getName() })
-                .put(AdapterFactory.ADAPTER_CLASSES, new String[] { String.class.getName() })
-                .build());
-        
-        // test initial adapter factory
-        assertEquals("testMessage1-initial", new TestAdaptable("testMessage1").adaptTo(String.class));        
-    }
-
-
-    private static class TestAdaptable extends SlingAdaptable {
         
-        private final String message;
-
-        public TestAdaptable(String message) {
-            this.message = message;
-        }
-
-        public String getMessage() {
-            return message;
-        }
-        
-    }
-
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java
index 3fedcca..427e338 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.testing.mock.sling.resource;
 
+import static org.apache.sling.jcr.resource.JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY;
 import static org.junit.Assert.assertEquals;
 
 import javax.jcr.RepositoryException;
@@ -56,7 +57,7 @@ public abstract class AbstractJcrNamespaceTest {
         Resource resource = resolver.getResource(context.uniqueRoot().content() + "/foo");
         
         ValueMap props = ResourceUtil.getValueMap(resource);
-        assertEquals("fooType", props.get("sling:resourceType"));
+        assertEquals("fooType", props.get(SLING_RESOURCE_TYPE_PROPERTY));
         assertEquals("fooType", resource.getResourceType());
         
         MockOsgi.shutdown(bundleContext);
@@ -72,7 +73,7 @@ public abstract class AbstractJcrNamespaceTest {
         Resource resource = resolver.getResource(context.uniqueRoot().content() + "/foo");
         
         ValueMap props = ResourceUtil.getValueMap(resource);
-        assertEquals("fooType", props.get("sling:resourceType"));
+        assertEquals("fooType", props.get(SLING_RESOURCE_TYPE_PROPERTY));
         assertEquals("fooType", resource.getResourceType());
     }
 
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
index 8b6251a..2726da9 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.testing.mock.sling.resource;
 
+import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_ORDERED_FOLDER;
+import static org.apache.sling.jcr.resource.JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -151,7 +153,7 @@ public abstract class AbstractJcrResourceResolverTest {
         Resource parent = context.resourceResolver().getResource(getTestRootNode().getPath());
 
         Resource child = context.resourceResolver().create(parent, "nodeTypeResource", ImmutableMap.<String, Object> builder()
-                .put("sling:resourceType", JcrConstants.NT_UNSTRUCTURED).build());
+                .put(SLING_RESOURCE_TYPE_PROPERTY, JcrConstants.NT_UNSTRUCTURED).build());
         assertNotNull(child);
         assertEquals(JcrConstants.NT_UNSTRUCTURED, child.getResourceType());
         assertEquals(JcrConstants.NT_UNSTRUCTURED, child.adaptTo(Node.class).getPrimaryNodeType().getName());
@@ -164,7 +166,7 @@ public abstract class AbstractJcrResourceResolverTest {
         Resource child = ResourceUtil.getOrCreateResource(context.resourceResolver(), parent.getPath() + "/intermediate/child",
                 "sling/resource/type", JcrConstants.NT_UNSTRUCTURED, true);
         assertNotNull(child);
-        assertEquals("sling:OrderedFolder", parent.getResourceType());
+        assertEquals(NT_SLING_ORDERED_FOLDER, parent.getResourceType());
         assertEquals("sling/resource/type", child.getResourceType());
     }
 
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
index 7b0d5e7..a98c26e 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
@@ -169,16 +169,26 @@ public abstract class AbstractSlingCrudResourceResolverTest {
     public void testDateProperty() throws IOException {
         Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
         ValueMap props = ResourceUtil.getValueMap(resource1);
-        assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
+        // TODO: enable this test when JCR resource implementation supports writing Date objects (SLING-3846)
+        if (getResourceResolverType() != ResourceResolverType.JCR_MOCK
+                && getResourceResolverType() != ResourceResolverType.JCR_JACKRABBIT 
+                && getResourceResolverType() != ResourceResolverType.JCR_OAK ) {
+            assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
+        }
     }
 
     @Test
     public void testDatePropertyToCalendar() throws IOException {
         Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
         ValueMap props = ResourceUtil.getValueMap(resource1);
-        Calendar calendarValue = props.get("dateProp", Calendar.class);
-        assertNotNull(calendarValue);
-        assertEquals(DATE_VALUE, calendarValue.getTime());
+        // TODO: enable this test when JCR resource implementation supports writing Date objects (SLING-3846)
+        if (getResourceResolverType() != ResourceResolverType.JCR_MOCK
+                && getResourceResolverType() != ResourceResolverType.JCR_JACKRABBIT
+                && getResourceResolverType() != ResourceResolverType.JCR_OAK ) {
+            Calendar calendarValue = props.get("dateProp", Calendar.class);
+            assertNotNull(calendarValue);
+            assertEquals(DATE_VALUE, calendarValue.getTime());
+        }
     }
 
     @Test

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.